Darek R.
Guest
Thu Apr 01, 2004 10:39 pm
Witam!
Ostatnio drobny błąd w programie kosztował mnie ładnych kilka dni myślenia i
nerwów. Doszedłem już o co chodzi, ale ku przestrodze innym...
Ogłaszam konkurs - pierwsza osoba która zgadnie co jest źle w poniższym
kodzie i powoduje wieszanie się procka dostanie ode mnie piwo.
INTERRUPT (SIG_USART0_RECV)
{
if (UDR0==' ') odebrano=true;
}
Podpowiedzi:
- zmienna odebrano jest zdefiniowana jako bool volatile
- reszta kodu jest ok, przerwania włączone, odbiornik oczywiście też itd.
- przerwanie powinno w przypadku odebrania spacji ustawić flagę odebrano
- w rzeczywistości gdy _cokolwiek_ przyjdzie na USART0 (niekoniecznie
spacja) procek (ATmega 162) wisi
Czekam na poprawne odpowiedzi!
--
Pozdrowienia
Dariusz Rzońca
Tomek
Guest
Thu Apr 01, 2004 11:02 pm
Witam!
Quote:
INTERRUPT (SIG_USART0_RECV)
{
if (UDR0==' ') odebrano=true;
}
Zamien INTERRUPT na SIGNAL !! Po szczegoly odsylam do FAQ projektu
AVRSide...
Tomek
Andy
Guest
Thu Apr 01, 2004 11:07 pm
Użytkownik "Darek R." <drzonca@w.pl> napisał w wiadomości
news:c4i9dv$oh5$1@nemesis.news.tpi.pl...
Quote:
Witam!
Ostatnio drobny błąd w programie kosztował mnie ładnych kilka dni myślenia
i
nerwów. Doszedłem już o co chodzi, ale ku przestrodze innym...
Ogłaszam konkurs - pierwsza osoba która zgadnie co jest źle w poniższym
kodzie i powoduje wieszanie się procka dostanie ode mnie piwo.
INTERRUPT (SIG_USART0_RECV)
{
if (UDR0==' ') odebrano=true;
}
...
pewnie nie kasuje sie flaga zgloszenia przerwania
i po zakonczeniu obslugi wchodzi znow do przerwania
--
Andrzej
Andy
Guest
Thu Apr 01, 2004 11:28 pm
Użytkownik "Tomek" <tomezz@poczta.onet.pl> napisał w wiadomo¶ci
news:c4iaj7$3cl$1@news.onet.pl...
Quote:
...
Zamien INTERRUPT na SIGNAL !! Po szczegoly odsylam do FAQ projektu
AVRSide...
no fakt
jak sie tylko przerwania odblokuja to zaraz wchodzi ponownie
do tej proc obslugi zanim odczyta z UDR0
--
Andrzej
QmX
Guest
Fri Apr 02, 2004 5:53 am
Użytkownik "Darek R." <drzonca@w.pl> napisał w wiadomości
news:c4i9dv$oh5$1@nemesis.news.tpi.pl...
Quote:
INTERRUPT (SIG_USART0_RECV)
{
if (UDR0==' ') odebrano=true;
}
Klasyczny przykład złego użycia procedury obsługi przerwania typu INTERRUPT
(z włączoną obsługą przerwań w przerwaniu) dla przerwania zgłaszanego
warunkiem.
QmX.
Mister
Guest
Fri Apr 02, 2004 6:36 am
"Darek R." <drzonca@w.pl> wrote in message
news:c4i9dv$oh5$1@nemesis.news.tpi.pl...
Quote:
Witam!
Ostatnio drobny błąd w programie kosztował mnie ładnych kilka dni myślenia
i
nerwów. Doszedłem już o co chodzi, ale ku przestrodze innym...
Ogłaszam konkurs - pierwsza osoba która zgadnie co jest źle w poniższym
kodzie i powoduje wieszanie się procka dostanie ode mnie piwo.
INTERRUPT (SIG_USART0_RECV)
{
if (UDR0==' ') odebrano=true;
}
A dlaczego używasz interrupt zamiast signal w takim wypadku??
Mister
QmX
Guest
Fri Apr 02, 2004 6:55 am
Użytkownik "Mister" <wojpie@wywal_to.poczta.onet.pl> napisał w wiadomo¶ci
news:c4j55r$gfb$1@atlantis.news.tpi.pl...
Quote:
INTERRUPT (SIG_USART0_RECV)
Kiedy¶ zrobiłem literówkę w nazwie wektora przerwania.

AVR-GCC nie raczył o tym poinformować.
Dopiero po analizie kodu wynikowego doszedłem do tego dlaczego proc się
ci±gle resetował. :-)
QmX.
Marcin Stanisz
Guest
Fri Apr 02, 2004 6:58 am
W artykule <c4i9dv$oh5$1@nemesis.news.tpi.pl> Darek R. napisal(a):
Quote:
Witam!
Ostatnio drobny bł±d w programie kosztował mnie ładnych kilka dni my¶lenia i
nerwów. Doszedłem już o co chodzi, ale ku przestrodze innym...
Ogłaszam konkurs - pierwsza osoba która zgadnie co jest Ľle w poniższym
kodzie i powoduje wieszanie się procka dostanie ode mnie piwo.
Darek, musiałby¶ to piwo skrzynkami nam rozdawać

)) Ale jak± człowiek
ma satysfakcję (i pustkę, bo co nagle robić z nadmiarem wolnego czasu),
kiedy taki bł±d roztrzaska...
Pozdrawiam
Marcin Stanisz
--
"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"
Darek R.
Guest
Fri Apr 02, 2004 10:27 am
Tomek napisał:
Quote:
Zamien INTERRUPT na SIGNAL !! Po szczegoly odsylam do FAQ projektu
AVRSide...
Dokładnie! Gratuluję zwycięstwa, słowo się rzekło, piwo u płota, po
szczegóły zapraszam na priv.
BTW: W faq tego nie znalazłem - może wtedy krócej bym nad tym siedział (u
siebie nie miałem dwóch linijek kodu do przeanalizowania tylko kilkaset - po
prostu procek się nagle wieszał...).
--
Pozdrowienia
Dariusz Rzońca
Darek R.
Guest
Fri Apr 02, 2004 10:28 am
QmX napisał:
Quote:
Klasyczny przykład złego użycia procedury obsługi przerwania typu
INTERRUPT
(z włączoną obsługą przerwań w przerwaniu) dla przerwania zgłaszanego
warunkiem.
Dobrze, ale za póĽno - nagroda była tylko jedna ;)
--
Pozdrowienia
Dariusz Rzońca
Darek R.
Guest
Fri Apr 02, 2004 10:30 am
Mister napisał:
Quote:
A dlaczego używasz interrupt zamiast signal w takim wypadku??
No wła¶nie chyba po to żeby potem nad tym siedzieć i zastanawiać się czemu
się zawiesza ;)
--
Pozdrowienia
Dariusz Rzońca
Darek R.
Guest
Fri Apr 02, 2004 10:34 am
Marcin Stanisz napisał:
Quote:
Darek, musiałby¶ to piwo skrzynkami nam rozdawać

))
Nie no, piwo w nagrodę było jedno, dla pierwszego odpowiadaj±cego. Ale
następnym razem zrobię inaczej - jak się gdzie¶ znowu zatnę w programie to
od razu się Was zapytam

))
Quote:
Ale jak± człowiek
ma satysfakcję (i pustkę, bo co nagle robić z nadmiarem wolnego czasu),
kiedy taki bł±d roztrzaska...
Satysfakcja jest, to fakt. Pustki nie ma - po prostu robi się projekt dalej,
pamiętaj±c już na całe życie o unikaniu podobnych błędów.
--
Pozdrowienia
Dariusz Rzońca
Wojtek
Guest
Fri Apr 02, 2004 12:21 pm
Użytkownik "Tomek" <tomezz@poczta.onet.pl> napisał w wiadomo¶ci news:c4iaj7$3cl$1@news.onet.pl...
Quote:
Zamien INTERRUPT na SIGNAL !! Po szczegoly odsylam do FAQ projektu
AVRSide...
Rzućcie jaki¶ link. Nie mogę tego znaleĽć...
Wojtek