我如何在Ubuntu上用C语言编程我的Arduino。我听说过AVR,但是所有的在线教程似乎都非常乏味,并且没有使用Arduino引导加载程序的AVR芯片的选择。有人能帮我用一种更简单的方法在Ubuntu上安装avr,并开始用C语言为Arduino编程吗?
发布于 2015-09-05 14:14:28
我推荐以下一组命令行选项用于编译:
avr-gcc -c
-std=gnu99
-Os
-Wall
-ffunction-sections -fdata-sections
-mmcu=m328p
-DF_CPU=16000000以及关于联系:
avr-gcc -Os
-mmcu=m328p
-ffunction-sections -fdata-sections
-Wl,--gc-sectionsWhere…
-c的意思是“只编译到目标文件,不要链接”-std=gnu99的意思是“我的代码符合C99,我使用GNU扩展”-Os的意思是“优化可执行文件的大小而不是代码速度”。-Wall的意思是“打开(几乎)所有警告”-ffunction-sections -fdata-sections是-Wl,--gc-sections优化的必要条件-mmcu=m328p的意思是“MCU部件号是ATmega 328 p”。-DF_CPU=16000000的意思是“时钟频率为16 MHz”(根据实际时钟频率调整)。-Wl,--gc-sections的意思是“告诉链接器删除未使用的函数和数据部分”(这有助于减少代码大小)。为了实际编译代码,首先使用“只编译标志”发出avr-gcc命令,如下所示:
avr-gcc -c -std=gnu99 <etc.> MyProgram.c -o MyProgram.o然后,您将对所有源文件重复此操作。最后,通过在链接模式中调用AVR-GCC将结果对象文件链接到一起:
avr-gcc -Os <etc.> MyProgram.o SomeUtility.o -o TheExecutable.elf这将生成一个ELF文件,它不能由您的MCU直接执行。因此,您需要以Intel Hex格式从其中提取有用的部分(原始机器代码):
avr-objcopy -O ihex -R .eeprom TheExecutable.elf TheExecutable.ihex最后,您需要AVRdude将十六进制文件的内容上载到MCU:
avrdude -C /path/to/avrdude.conf
-p m328p
-c PROGRAMMER_NAME
-b 19600
-P PORT_NAME
-U flash:w:TheExecutable.ihex:iWhere…
-C /path/to/avrdude.conf的意思是“使用此文件作为配置文件”。-c PROGRAMMER_NAME的意思是“我使用的是PROGRAMMER_NAME类型的程序员”(您需要自己填写,这取决于您使用的是哪种程序员)。-b 19600是波特率(您可能需要根据您设置的波特率或已预编程到引导加载程序中的波特率来调整这一速率)。-P PORT_NAME的意思是“程序员连接到PORT_NAME端口”。在Linux上,它通常类似于/dev/ttyusbN,其中N是某个数字。-U flash:w:TheExecutable.ihex:i的意思是“向闪存写入TheExecutable.ihex的内容,这是英特尔的十六进制格式”。发布于 2017-01-20 21:01:24
如果您只想在已经安装了引导加载程序的Arduino中使用C代码。您可以在Arduino IDE中用C编写代码,并像往常一样编译它。草图实际上是一堆头文件和宏。
下面是用C编写的眨眼素描:
#include <avr/io.h> //defines pins, ports etc
#include<util/delay.h> //functions for wasting time
int main (void) {
//init
DDRB |= (1<<PB5); //Data Direction Register B:
//writing a 1 to the Pin B5 bit enables output
//Event loop
while (1) {
PORTB = 0b00100000; //turn on 5th LED bit/pin in PORT B (Pin13 in Arduino)
_delay_ms (1000); //wait
PORTB = 0b00000000; //turn off all bits/pins on PB
_delay_ms (1000); //wait
} //end loop
return(0); //end program. This never happens.
}将其粘贴到IDE中并自己尝试。
如果您想从Arduino转到没有引导加载程序的AVR编程,我可以推荐Elliot Williams的优秀网络广播作为介绍。- https://www.youtube.com/watch?v=ERY7d7W-6nA
祝你好运,玩得开心
https://stackoverflow.com/questions/32413959
复制相似问题