Avr-gcc
From Attie's Wiki
(Difference between revisions)
m |
|||
(47 intermediate revisions by 4 users not shown) | |||
Line 5: | Line 5: | ||
</pre> | </pre> | ||
− | + | See: using the [[Arduino IDE]] | |
+ | |||
<h2>avrdude</h2> | <h2>avrdude</h2> | ||
+ | use [[avrdude]] to load files into the arduino | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<h2>makefile</h2> | <h2>makefile</h2> | ||
− | + | <h3>devices</h3> | |
+ | * <code>atmega168</code> | ||
+ | * <code>atmega328p</code> | ||
+ | |||
+ | <h3>simple</h3> | ||
+ | Just produces the .elf and .hex file. Also optimizes for space (HUGE difference) | ||
<pre> | <pre> | ||
all: | all: | ||
− | avr-gcc avr.c -mmcu= | + | avr-gcc avr.c -mmcu=atmega328p -o example.elf -Wall -Os |
avr-objcopy -j .text -O ihex example.elf example.hex | avr-objcopy -j .text -O ihex example.elf example.hex | ||
− | avrdude -c buspirate -P /dev/ttyUSB1 | + | avrdude -c buspirate -P /dev/ttyUSB1 -p m328p -U flash:w:example.hex |
</pre> | </pre> | ||
− | + | <h3>complex</h3> | |
+ | produces .o, .asm, .map and .lst files too | ||
<pre> | <pre> | ||
all: | all: | ||
− | avr-gcc -g -mmcu= | + | avr-gcc -g -mmcu=atmega328p -c avr.c -Wa,-alh,-L -o example.o > example.asm |
− | avr-gcc -g -mmcu= | + | avr-gcc -g -mmcu=atmega328p -Wl,-Map,example.map -o example.elf example.o |
avr-objdump -h -S example.elf > example.lst | avr-objdump -h -S example.elf > example.lst | ||
avr-objcopy -j .text -j .data -O ihex example.elf example.hex | avr-objcopy -j .text -j .data -O ihex example.elf example.hex | ||
− | avrdude -c buspirate -P /dev/ttyUSB1 | + | avrdude -c buspirate -P /dev/ttyUSB1 -p m328p -U flash:w:example.hex |
</pre> | </pre> | ||
− | + | <h2>sample source</h2> | |
+ | |||
+ | <h3>blink</h3> | ||
+ | <source lang="c"> | ||
+ | /* 8 Mhz cpu */ | ||
+ | #define F_CPU 8000000UL | ||
+ | |||
+ | /* led pin */ | ||
+ | #define LED 0b00100000 | ||
+ | |||
+ | #include <util/delay.h> | ||
+ | #include <avr/io.h> | ||
+ | |||
+ | int main(void) { | ||
+ | /* set port b direction register to output for led pin */ | ||
+ | DDRB = LED; | ||
+ | |||
+ | while(1) { | ||
+ | |||
+ | /* turn led off */ | ||
+ | PORTB &= ~LED; | ||
+ | _delay_ms(450); | ||
+ | |||
+ | /* turn led on */ | ||
+ | PORTB |= LED; | ||
+ | _delay_ms(50); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <h3>S.O.S.</h3> | ||
+ | <source lang="c"> | ||
+ | /* 8 Mhz cpu */ | ||
+ | #define F_CPU 8000000UL | ||
+ | |||
+ | /* led pin */ | ||
+ | #define LED 0b00100000 | ||
+ | |||
+ | #include <util/delay.h> | ||
+ | #include <avr/io.h> | ||
+ | |||
+ | void dot(void) { | ||
+ | /* turn led on */ | ||
+ | PORTB |= LED; | ||
+ | _delay_ms(200); | ||
+ | |||
+ | /* turn led off */ | ||
+ | PORTB &= ~LED; | ||
+ | _delay_ms(500); | ||
+ | } | ||
+ | |||
+ | void dash(void) { | ||
+ | /* turn led on */ | ||
+ | PORTB |= LED; | ||
+ | _delay_ms(700); | ||
+ | |||
+ | /* turn led off */ | ||
+ | PORTB &= ~LED; | ||
+ | _delay_ms(500); | ||
+ | } | ||
+ | |||
+ | int main(void) { | ||
+ | char i; | ||
+ | |||
+ | /* set port b direction register to output for led pin */ | ||
+ | DDRB = LED; | ||
+ | |||
+ | while(1) { | ||
+ | |||
+ | for (i=0;i<3;i++) { | ||
+ | dot(); | ||
+ | } | ||
+ | for (i=0;i<3;i++) { | ||
+ | dash(); | ||
+ | } | ||
+ | for (i=0;i<3;i++) { | ||
+ | dot(); | ||
+ | } | ||
+ | |||
+ | _delay_ms(5000); | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
<h2>other commands</h2> | <h2>other commands</h2> | ||
− | < | + | <pre> |
avr-size example.elf | avr-size example.elf | ||
− | </ | + | avr-gcc --help=optimizers |
+ | </pre> | ||
− | |||
<h2>resources</h2> | <h2>resources</h2> | ||
− | |||
https://www.mainframe.cx/~ckuethe/avr-c-tutorial/<br> | https://www.mainframe.cx/~ckuethe/avr-c-tutorial/<br> | ||
+ | http://arduino.cc/en/Hacking/PinMapping168<br> | ||
http://hintshop.ludvig.co.nz/show/buspirate-avr-programming/<br> | http://hintshop.ludvig.co.nz/show/buspirate-avr-programming/<br> | ||
http://itp.nyu.edu/physcomp/uploads/6pinAVRproghead.jpg<br> | http://itp.nyu.edu/physcomp/uploads/6pinAVRproghead.jpg<br> | ||
http://dangerousprototypes.com/bus-pirate-manual/<br> | http://dangerousprototypes.com/bus-pirate-manual/<br> | ||
+ | http://www.ladyada.net/library/arduino/bootloader.html |
Latest revision as of 23:40, 18 December 2010
How to setup avr-gcc and get compiling for an Arduino!
$ yum install avr-gcc avr-libc avr-binutils avrdude
See: using the Arduino IDE
Contents |
avrdude
use avrdude to load files into the arduino
makefile
devices
-
atmega168
-
atmega328p
simple
Just produces the .elf and .hex file. Also optimizes for space (HUGE difference)
all: avr-gcc avr.c -mmcu=atmega328p -o example.elf -Wall -Os avr-objcopy -j .text -O ihex example.elf example.hex avrdude -c buspirate -P /dev/ttyUSB1 -p m328p -U flash:w:example.hex
complex
produces .o, .asm, .map and .lst files too
all: avr-gcc -g -mmcu=atmega328p -c avr.c -Wa,-alh,-L -o example.o > example.asm avr-gcc -g -mmcu=atmega328p -Wl,-Map,example.map -o example.elf example.o avr-objdump -h -S example.elf > example.lst avr-objcopy -j .text -j .data -O ihex example.elf example.hex avrdude -c buspirate -P /dev/ttyUSB1 -p m328p -U flash:w:example.hex
sample source
blink
/* 8 Mhz cpu */ #define F_CPU 8000000UL /* led pin */ #define LED 0b00100000 #include <util/delay.h> #include <avr/io.h> int main(void) { /* set port b direction register to output for led pin */ DDRB = LED; while(1) { /* turn led off */ PORTB &= ~LED; _delay_ms(450); /* turn led on */ PORTB |= LED; _delay_ms(50); } }
S.O.S.
/* 8 Mhz cpu */ #define F_CPU 8000000UL /* led pin */ #define LED 0b00100000 #include <util/delay.h> #include <avr/io.h> void dot(void) { /* turn led on */ PORTB |= LED; _delay_ms(200); /* turn led off */ PORTB &= ~LED; _delay_ms(500); } void dash(void) { /* turn led on */ PORTB |= LED; _delay_ms(700); /* turn led off */ PORTB &= ~LED; _delay_ms(500); } int main(void) { char i; /* set port b direction register to output for led pin */ DDRB = LED; while(1) { for (i=0;i<3;i++) { dot(); } for (i=0;i<3;i++) { dash(); } for (i=0;i<3;i++) { dot(); } _delay_ms(5000); } }
other commands
avr-size example.elf avr-gcc --help=optimizers
resources
https://www.mainframe.cx/~ckuethe/avr-c-tutorial/
http://arduino.cc/en/Hacking/PinMapping168
http://hintshop.ludvig.co.nz/show/buspirate-avr-programming/
http://itp.nyu.edu/physcomp/uploads/6pinAVRproghead.jpg
http://dangerousprototypes.com/bus-pirate-manual/
http://www.ladyada.net/library/arduino/bootloader.html