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
Didn't find your answer? Ask the community — no account required.
A
Adam Dybkowski
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).
A
a_a
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
A
Adam Dybkowski
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.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.