a_a
Guest
Wed Nov 22, 2006 10:37 am
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
Adam Dybkowski
Guest
Thu Nov 23, 2006 12:49 am
a_a napisał(a):
Quote:
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).
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).
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
a_a
Guest
Thu Nov 23, 2006 8:11 am
Adam Dybkowski napisał(a):
Quote:
a_a napisał(a):
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).
Co ma oznaczać w tym przypadku "w osobnych projektach"?
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.
Quote:
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.
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
Adam Dybkowski
Guest
Fri Nov 24, 2006 12:14 am
a_a napisał(a):
Quote:
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).
Co ma oznaczać w tym przypadku "w osobnych projektach"?
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.
No to zrób oddzielny projekt dla samego bootloadera i już. Będziesz miał
uniwersalny bootloader do wgrania w różne urządzenia.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.