atmel

Sep 28, 2005 17 Replies

Witam,



mam program który zlicza czas za pomocą timer0 i generowanego przez niego przerwania (kwarc mam 3.2768MHz). Wygląda to w skrócie tak:



#include <inttypes.h>



#include <avr/io.h>



#include <avr/interrupt.h>



#include <avr/signal.h>



#include <avr/sfr_defs.h>



int sekunda=0;



SIGNAL(SIG_OVERFLOW0) { static int i=0; i++; if (i==50) { sekunda++; if (sekunda==60) { sekunda=0; } i=0; } }



int main (void) { sei(); DDRB=0xff; PORTB=0xff; TCCR0=4; TIMSK|=(1<<TOIE0); TCNT0=0;



for (;;) { PORTB=sekunda; }



return (0); }



pytanie brzmi: dlaczego to nie działa? Jak w procedurze obsługi przerwania zamienię sekunda na PORTB to już jest ok.



dziękuję z góry za pomoc Wojtek


U¿ytkownik "Wojtek" <adun snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news:dher7p$h68$ snipped-for-privacy@nemesis.news.tpi.pl...

to chyba klasyczny problem powinno byc:

volatile int sekunda=0;

dzięki, przyznam się że pisze w c juz ładnych kilka lat (PC) i nigdy jeszcze nie musiałem użyć volatile, dlatego taki pomysł nawet nie przyszedł mi do głowy :)

pozdrawiam Wojtek

a może jeszcze ktoś wie dlaczego wszystkie diody świecą prawidłowo oprócz tych podłączonych do pinów portu C: PC2(TCK) PC5(TDI)

pozdrawiam wojtek

U¿ytkownik "Wojtek" <adun snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news:dhespu$5hb$ snipped-for-privacy@atlantis.news.tpi.pl...

Ja z kolei nie pisze zbyt duzo na PC'ta ale chyba jesli siega sie do tych samych zasobow (np jakiejs zmiennej) np z dwoch roznych watkow to zasob musi byc typu volatile.

W przeciwnym wypadku program moze dzialac ale nie musi i to bedzie zalezalo od kompliatora oraz ustawien optymalizacji.

U¿ytkownik "Wojtek" <adun snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news:dhevlg$ir9$ snipped-for-privacy@atlantis.news.tpi.pl...

byc moze masz aktywny fuse od JTAG a jesli tak to piny te sa zarezerwowane do komunikacji z JTAG'iem

w rzeczy samej :)

dzięki!

wojtek

U¿ytkownik "Wojtek" <adun snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news:dher7p$h68$ snipped-for-privacy@nemesis.news.tpi.pl...

Wed³ug mnie dlatego ¿e przypisujesz warto¶æ int do PORTB a to jest byte ..... Zmieñ deklaracjê sekundy i powinno i¶æ. Pozdrawiam Piotr

Piotr Pitucha napisał(a):

To akurat nie ma zadnego znaczenia, bo w przerwaniu sekunda zmienia się od 0 do 59 ( czyli w zakresie byte ), a w przypisaniu PORTB=sekunda kompilator sam zadba o konwersję typu.

Użytkownik Piotr Pitucha napisał: ....

....

.....

Tak się zastanawiam, czytając liczne wątki na temat C z zastosowaniach dla mikokontrolerów, na ile pisanie programu ma za cel wykonanie urządzenia o konkretnych funkcjach a na ile pokonywanie schodów leksykalnych języka i widzimisię mniej lub bardziej NIEDOROBIONEGO cross-kompilatora: :)))))))))))

U¿ytkownik "A.Grodecki" <ag.usun snipped-for-privacy@modeltronik.com napisa³ w wiadomo¶ci news:dhggn5$52v$ snipped-for-privacy@nemesis.news.tpi.pl...

Mo¿e i masz racjê, ale zmiany w procesorach s± wiêksze ni¿ w kompilatorach, dajê sobie jako tako radê a nie znam kompletnie asemblera ¿adnego z procesorów którym siê bawiê :) Pozdrawiam

Szczesliwie w wielu ATmegach interfejs JTAG mozna wylaczyc programowo aby te piny wykorzystac do innych celow (tak jest m.in. z portem F w procesorze ATmega128).

Dnia Wed, 28 Sep 2005 21:51:57 +0200, Andy snipped-for-privacy@ceti.pl napisał:

Do tego jeszcze mozna tak:

++sekunda %= 60; :)

Ja wole to samo dajacy a IMHO bardziej zrozumialy zapis: sekunda = (sekunda + 1) % 60;

Inna sprawa, ze wiekszosc malo rozgarnietych kompilatorow (w tym pewnie i gcc) zastosuje w tym miejscu czasochlonna operacje obliczania reszty z dzielenia. Rozwiazanie poczatkowe (z if'em) zadziala szybciej.

Dnia Sun, 02 Oct 2005 01:57:15 +0200, J.F. <jfox snipped-for-privacy@poczta.onet.pl> napisał:

Z punktu widzenia skladni i semantyki ANSII C - tak. Ale jak juz zauwazono, proc ktory moze do tego moze nie miec sprzetowego dzielenia bedzie sie biedzil dluzej.

Z punktu widzenia rozsadku - od biedy tak. Skladni i semantyki - nie, ++zmienna to juz nie jest l-value.

I gcc-avr protestuje..

J.

Dnia Sun, 02 Oct 2005 02:57:00 +0200, J.F. <jfox snipped-for-privacy@poczta.onet.pl> napisał:

Masz racje. I nie tylko -avr :)

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required