AVR - bootloader

Dzień dobry, Zamierzam pierwszy raz użyć bootloadera w urządzeniu z procesorem AVR (program w avr-gcc). W związku z tym mam 2 koncepcje: aplikacja i bootloader w osobnych projektach (1) lub w tym samym (2). Która z nich jest lepsza i jakie zagrożenia mogą mnie czekać? Urządzenie będzie domyślnie startować z bootloadera i w przypadku istnienia aplikacji automatycznie do niej wskakiwać. Bootloader będzie też można wywołać już z pracującej aplikacji. Zamierzam w obu sekcjach korzystać z tych samych przerwań, przy czym ze zmienioną obsługą. W przypadku drugim czy jest to w ogóle możliwe?

Pozdrawiam antek

Reply to
a_a
Loading thread data ...

a_a napisał(a):

Co ma oznaczać w tym przypadku "w osobnych projektach"? Bootloader to kawałek kodu, który musi być całkiem niezależnie od aplikacji linkowany i z takiego punktu widzenia jest odrębnym projektem. Ale nic nie stoi na przeszkodzie, abyś używał w nim tych samych bibliotek, które stosujesz w aplikacji, np. funkcji do obsługi portu szeregowego. Oczywiście muszą być one zlinkowane razem z bootloaderem, który ma się zmieścić w przeznaczonym na niego obszarze (np. w ATmega128 bootloader może zająć max. 8 KB na końcu pamięci Flash). Jak to już zorganizujesz to tylko kwestia plików makefile.

Bardzo skutecznym założeniem, które upraszcza konstrukcję bootloadera, jest nieużywanie w nim przerwań. Wszystko da się zrobić w pollingu (np. oczekiwanie na gotowość UARTu czy pamięci DataFlash) i takie specjalne funkcje dostarcz bootloaderowi. Jak już wyżej wspomniałem, jest na niego przeznaczone niewiele miejsca i dlatego często trzeba zrezygnować z rozbudowanych wygodnych sterowników opartych na przerwaniach. A gdy korzystasz z jakiegoś systemu operacyjnego to już całkiem odpada wciśnięcie go też w bootloader.

Wbrew pozorom, bootloader dla ATmegi 128 bardzo wygodnie mi się pisało w języku C, trzeba tylko pamiętać o zlinkowaniu kodu począwszy od wyższego adresu (zależnie od rozmiaru obszaru zarezerwowanego na bootloader). Wszystkie potrzebne funkcje do zapisywania pamięci Flash dostarczają standardowe pliki nagłówkowe środowiska WinAVR (AFAIR boot.h).

Reply to
Adam Dybkowski

Adam Dybkowski napisał(a):

Taki pomysł powstał w mej głowie ponieważ mam kilka urządzeń z tym samym procesorem, i wszystkie hurtem bym mógł łatwo doposażyć w ten bootloader.

Tu akurat nie będzie problemu bo wszystkie sterowniki pisałem od zera pod konkretny protokół, tak że zajmują niewiele miejsca.

dziękuję za odpowiedź i pozdrawiam

Reply to
a_a

a_a napisał(a):

No to zrób oddzielny projekt dla samego bootloadera i już. Będziesz miał uniwersalny bootloader do wgrania w różne urządzenia.

Reply to
Adam Dybkowski

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.