Próbuję właśnie uruchomić nową bibliotekę RFM69 z Green Booka w jednym ze swoich projektów. Z uwagi na specyfikę sprzętu musiałem wprowadzić pewne modyfikacje. Po pierwsze inny jest MCU - Atmega 328P, po drugie zamieniłem programowe SPI na sprzętowe.
Trafiłem jednak na bardzo dziwny problem - kod zawiesza się w bardzo dziwnym miejscu, w którym na pierwszy rzut oka nie ma niczego, na czym mógłby się zawiesić...
Metodą prób i błędów doszedłem do tego, że za zawieszenie odpowiada funkcja rfm69_init(). Żeby ustalić dokładne miejsce, wewnątrz kodu tej funkcji pododawałem wywołania uart_puts(), wysyłające kolejne "znaczniki". Oczywiście zgodnie z przyjętą tutaj zasadą, wrzucam jedynie omawiany fragment kodu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Układ po zrestartowaniu wysyła jedynie znacznik "A", dalsze już nie docierają. Opcja USE_IRQ jest ustawiona na 1, IRQ_NR to także 1. Dalszy blok kodu, umieszczony wewnątrz instrukcji warunkowej preprocesora powinien się więc wykonać. Nawet gdyby tutaj tkwił jakiś problem, to program powinien zaraz przejść do dalszej części i wysłać literkę "E". Nie ma tutaj przecież żadnej pętli, która mogłaby przejąć wykonywanie programu...
Poniżej zamieszczam inne modyfikacje, które wprowadziłem:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.