avr-gcc

Witam.

Zaczynam programowanie AVRow, jako zadeklarowany linuksowiec staram sie uzywac linuksowych narzedzi, ale niestety nie wychodzi. :(

Prosty program, np. taki (test.S): #v+

#include <avr/io.h>

#define mp r16

.global main

main: ldi mp, 0xff out DDRA, mp

ldi mp, 0x03 out PORTA, mp

loop: rjmp loop #v-

Skompilowany za pomoca avr-gcc (3.4.3, z Debiana testing) po prostu nie dziala. Kiedy napisze cos podobnego w Avr Studio uruchomionym pod wine, i wczytam to za pomoca avrdude (tak samo robie z tym pod avr-gcc), wszystko jest OK.

Po prostu nie dziala, mimo takiego samego kodu (pomijajac roznice w skladni), plik wygenerowany przez gcc jest wikszy.

Kompilacja wyglada tak:

#v+ avr-gcc -I. -mmcu=attiny26 -x assembler-with-cpp \ -Wa,-gstabs,-ahlms=test.lst -c test.S -o test.o avr-gcc -Wl,-Map,led.out.map -mmcu=attiny26 -lm -o led.out test.o avr-objcopy -j .text \ -j .data \ -O ihex led.out led.hex #v-

Nie wiem, co wiecej napisac, stan portu sie nie zmiania, jakby uklad wogole nie byl zaprogramowany. Czy jest cos o czym zapomnialem?

Reply to
Damian Pietras
Loading thread data ...

[...]

Wrzuc na Siec pliki hex wygenerowane na oba sposoby (dzialajacy i nie dzialajacy) - zobaczymy, co w nich jest "nie tego".

Reply to
Adam Dybkowski

Damian Pietras napisał(a):

^^^^ rejestry w plikach nagłówkowych są zadeklarowane tak, żeby móc się do nich odwoływać w kodzie C jak do komórek pamięci RAM. jeśli chcesz użyć do instrukcji in albo out, możesz albo odjąć od nich 0x20, albo użyć makra _SFR_IO_ADDR(), jeśli wolisz eleganckie rozwiązania:

ldi mp, 0xff out _SFR_IO_ADDR(DDRA), mp

w.

Reply to
Wojtek Kaniewski

Z avr-gcc: #v+ :100000000BC00FC00EC00DC00CC00BC00AC009C091 :1000100008C007C006C005C011241FBECFEDCDBF6C :0E00200001C0EECF0FEF0ABF03E00BBFFDCF14 :00000001FF #v-

Z Avr Studio:

#v+ :020000020000FC :0A0000000FEF0ABB03E00BBBFFCFBC :00000001FF #v-

Apropos, da sie jakos prosto disasemblowac taki plik?

Reply to
Damian Pietras

Damian Pietras napisał(a):

avr-objdump -D -b ihex -m avrX plik.hex, gdzie X to 1-5, w zależności od docelowego układu.

w.

Reply to
Wojtek Kaniewski

Dziala! Dzieki!

Reply to
Damian Pietras

A to wyjasnie, skad wiekszy rozmiar: avr-gcc dodaje instrukcje skoku do wszystkich przerwan, inicjuje stos i zeruje rejestr statusu.

Reply to
Damian Pietras

Albo od razu w C

DDRA = 0xFF;

Reply to
Tom

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.