带Arduino的Avr GCC
如何在Ubuntu上用C语言编程我的Arduino。我听说过avr gcc,但所有的在线教程似乎都非常乏味,而且没有带Arduino引导加载程序的avr芯片选项。有谁能帮我在Ubuntu上安装avr gcc并开始用C为Arduino编程 我推荐以下一组用于编译的命令行选项:带Arduino的Avr GCC,c,ubuntu,arduino-uno,avr-gcc,C,Ubuntu,Arduino Uno,Avr Gcc,如何在Ubuntu上用C语言编程我的Arduino。我听说过avr gcc,但所有的在线教程似乎都非常乏味,而且没有带Arduino引导加载程序的avr芯片选项。有谁能帮我在Ubuntu上安装avr gcc并开始用C为Arduino编程 我推荐以下一组用于编译的命令行选项: avr-gcc -c -std=gnu99 -Os -Wall -ffunction-sections -fdata-sections -mmc
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-sections
在哪里
表示“仅编译到对象文件,不链接”-c
表示“我的代码符合C99,我使用GNU扩展”-std=gnu99
的意思是“优化可执行文件的大小而不是代码速度”-Os
表示“打开(几乎)所有警告”-Wall
对于-ffunction sections-fdata sections
优化是必需的-Wl,--gc sections
表示“MCU零件号为ATmega 328P”-mmcu=m328p
表示“时钟频率为16 MHz”(根据实际时钟频率进行调整)-DF_CPU=16000000
的意思是“告诉链接器删除未使用的函数和数据节”(这有助于减少代码大小)-Wl,--gc sections
avr gcc
命令,如下所示:
avr-gcc -c -std=gnu99 <etc.> MyProgram.c -o MyProgram.o
最后,您需要AVRdude将十六进制文件的内容上传到MCU:
avrdude -C /path/to/avrdude.conf
-p m328p
-c PROGRAMMER_NAME
-b 19600
-P PORT_NAME
-U flash:w:TheExecutable.ihex:i
在哪里
表示“将此文件用作配置文件”-C/path/to/avrdude.conf
的意思是“我正在使用一个类型为PROGRAMMER\u NAME的程序员”(根据您使用的程序员类型,您需要自己填写)-c PROGRAMMER\u NAME
是波特率(您可能需要根据设置的波特率或已预编程到引导加载程序中的波特率进行调整)-b 19600
表示“程序员已连接到PORT_NAME”。在Linux上,它通常类似于-P PORT_NAME
,其中N是一些数字/dev/ttyusbN
表示“将Intel十六进制格式的TheExecutable.ihex的内容写入闪存”-U flash:w:TheExecutable.ihex:i
#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.
}
#包括
祝你好运,玩得开心:)你为什么要这样?您已经在Arduino IDE中用C编程了。是否有任何东西只能通过手动编译C代码来实现?我建议坚持使用Arduino IDE。@adam10603例如,如果有人不喜欢Arduino IDE,那么它对Java的依赖性;也许他想把这个项目与另一个构建系统(例如make)等集成在一起。有很多原因你想做。@ AdUn0.603的ARDUINO语言非常类似于C++,但是我试图用C编程,因为我想从嵌入式C.@ ADAM10603开始,我喜欢C在所有平台上提供的手动内存控制。您仍然可以使用malloc
和free
以及Arduino IDE中的指针,它们的工作方式相同。非常感谢。然而,我必须询问在哪里下载和安装一个运行正常的AVRCC版本。编译和链接之间有什么区别?此外,此设置是否适用于预装Arduino引导加载器的Atmega芯片?@ApplicationDeveloper“在哪里下载并安装运行正常的avr gcc版本”—只需谷歌一下即可。“编译和链接之间有什么区别?”——说来话长,用谷歌搜索就知道了。“此设置是否适用于预装Arduino引导加载程序的Atmega芯片?”–是的。感谢您所做的一切。
avrdude -C /path/to/avrdude.conf
-p m328p
-c PROGRAMMER_NAME
-b 19600
-P PORT_NAME
-U flash:w:TheExecutable.ihex:i
#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.
}