durny WinAVR

Jun 05, 2005 5 Replies

Obecnie programuje w WinAVR dla ATmega128. Mój projekt sk³ada siê z trzech plików a.c, b.c i d.c. Mam funkcjê napisan± w pliku d.c ktora wywolywana jest w funkcjach, z pozostalych dwoch plikow. Mimo zaincludowania pliku naglowkowego zawierajacego deklaracje tej funkcji do tych dwoch plikow kompilator nie wywoluje tej funkcji w miejscach w ktorych je napisalem. W pliku *.map widze, ze one sa ale nie dziala to tak jak powinno. Wszystko wraca do normy w chwili gdy zaremuje jedna z nich. Programuje mikrokontrolery w C od wielu lat i mialem juz do czynienia z kilkoma kompilatorami C dla mikrokontrolerow. Z tego powodu wykluczam proste problemy zwiazane ze skladnia plikow zrodlowych. Czy spotkaliscie sie z tego typu problemami w przypadku tego kompilatora? Jestem bezradny bo przeczy to wszelkim regulom zwiazanym z normami ANSI. Bede wdzieczny za wszelkie wskazowki.



Jacek M.



U¿ytkownik "Jacek" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:d7v4ob$d8j$ snipped-for-privacy@news.onet.pl...

a w *.lst widzisz, ze jest wolana ?

Czy pod debugerem jak sledziesz to wchodzi do tej funkcji ?

Zrobilem kilkanascie projektow na AVR'a, uzywalem winavr i nie mialem takich poblemow.

Moze cos ze stosem nie tak ?

Chyba Marek Dz. nieadawno podpowiadal, ze Atmega fabrycznie ma ustawiony fuse kompatybilnosci ze 103 a wtedy program napisany pod 128 nie za bardzo dziala.

Byl jakis watek na ten temat pare dni temu.

Kto "one"? Masz kilka funkcji o tej samej nazwie czy jak?

TP.

Jeśli wszystkie moduły programu dają się poprawnie skompilować i zlinkować, to praktycznie jest pewne, że błąd jest w Twoim kodzie. Poza tym plik .map nic nie mówi (albo niewiele) na temat miejsc(a) z których są odwołania do danego symbolu - nawet jeśli dodasz parametr --cref do opcji linkera. Skompiluj pliki a.c i b.c do assemblera i zobacz czy rzeczywiście są wywołania tej funkcji w tych miejscach, w których być powinny. Przy czym jeszcze raz powtarzam, że jest praktycznie pewne, że nie jest to błąd kompilatora.

E, coś ściemniasz. Mówisz że programujesz od kilku lat, a jednocześnie piszesz że "pogramujesz w WinAVR" albo że "kompilator nie wywoluje tej funkcji". A z kontekstu całego posta można odnieść wrażenie że utożsamiasz WinAVR (czyli zbiór kilku powiązanych ze sobą programów) z kompilatorem (avr-gcc - jeden z tych programów).

Regards, /J.D.

U¿ytkownik "Jan Dubiec" snipped-for-privacy@SPAMTRAP.slackware.pl> napisa³ w wiadomo¶ci news: snipped-for-privacy@hs001.slackware.pl...

wrote:

Rzeczywiscie nie pomyslalem o sprawdzeniu kodu w asemblerze

Przepraszam ale moje skroty myslowe wynikaja nie z braku znajomosci poprawnej nomenklatury ale z pospiechu (terminy mnie gonia). Rzeczywiscie pisze w C dla mikrokontrolerow od osmiu lat i staralem sie na grupie pisac przede wszystkim zwiezle, zakladajac ze w gronie ludzi z branzy bede zrozumialy i nie musze zawsze pisac zgodnie z oficjalna forma. Moj tekst i tak jest spory, z tego wynikaja te tak "pokraczne formy". Prawda jest, ze dopiero rozpoczynam prace z GCC, WinAVR i Atmega128. Do tej pory pracowalem z pakietami oprogramowania narzedziowego Keil-a, Fujitsu i IAR.

Tak w ogole to zauwazylem, ze od czasu do czasu rozpoczyna tutaj swoja krucjate grupa osob broniacych poprawnosci jezykowej ponad wszystko. Mnie wydaje sie, ze nalezy byc tutaj zrozumianym i zwiezlym nawet kosztem skrotowej (nie do konca poprawnej) formy. Przepraszam wszystkich urazonych. A problem rozwiazalem. Okazalo sie, ze w funkcji "wspolnej" umiescilem pulapke o ktorej zapomnialem i potem dziwilem sie, ze to nie dzialalo :-)). Po jej usunieciu juz znowu wszystko wrocilo do normy. Dziekuje wszystkim za pomoc i tym zyczliwym i tym mniej...

Serdecznie Was pozdrawiam Jacek M.

Zobacz zrodlo w asemblerze (najlepiej po deasemblacji juz zlinkowanego programu) - czy tam sa wywolania? Skad wiesz, ze funkcje nie sa wywolywane?

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required