Image94 (3)

Image94 (3)



Top www



www.alarmy-gerard.pl


Listing 145 Tworzenie nowej sekcji

#--Linker Options--

4 -Wl,...:    tell GCC to pass this to linker.

4 -Map:    create map tile

4 -cref:    add cross reference to map file

LOFLAGS - -w I,-Map-KTARGETJ.-nap,-cref


LOFLAGS ♦- JCEXTMEM0PTS;

LDFLAGS +* l(PRINTF_LIB) S(SCANF_LIB) 5(MATH_L1B)

4 wprowadzenie nowej sekcji

LDFLAGS ♦ • -w',-s«etion-start=.hoorload«»r=$CBOOTSTART)

Listing 146 ćmienna określająca początek nowej sekcji

BOOTSTART = Ox3BOU

Z-pointer 1

Adres strony. Wybiera stron* dc kasowania oraz zapisu.


Widać na nim fragment opcji linkera, który powinieneś odszukać oraz linię, którą należy dopisać. Aby wszystko działało prawidłowo, należy jeszcze wcześniej ustawić zmienną BOOTSTART. Dla wygody proponuje* zrobić to na samym początku pliku, zgodnie z listingiem 146. Zwracani uwagę na to, żc adres początku sekcji liczony jest w bajtach, a nie w słowach. Bajt o numerze 0x3800 odpowiada słowu OzlCOO. Adres ten odpowiada wybraniu największego dostępnego rozmiaru botloadera dla ATmegal62.

Przygotowanie do pisania aplikacji

Do pierwszej, testowej aplikacji skonfigurujemy płytkę z wyświetlaczem LED. Wyświetlacz wykorzystamy w bardzo ograniczony sposób jako zestaw diod świecących do wskazywania aktualnego stanu programu.

Pierwszy program - testujemy możliwość umieszczenia funkcji w nowej sekcji

Po przygotowaniu sprzętu utwórz nowy pro-jckt (w materiałach dodatkowych nazwałem go bootsect). Dodaj do niego plik makra.li z poprzedniego ćwiczenia. W standardowym pliku makęfile wprowadź zmiany wyszczególnione na listingach 145 oraz 146. Utwórz puste pliki hcrnl-def.h oraz bootsect.c.

Do pliku harddęf.h wpisz zawartość listingu 147. Listing ten opisuje całkowicie nasz komputerek w konfiguracji z wyświetlaczem LED. Listing 148 to propozycja prostego programu, który pozwoli nam sprawdzić, jak funkcjonuje umieszczenie funkcji w sekcji .bootloader. Program nie powinien wymagać specjalnych wyjaśnień. Jego zadaniem jest wyświetlenie na wyświetlaczu kreski, gdy uruchomiono program główny, a kropki, gdy wywołana została funkcia bool.

Konfiguracja procesora do pracy z bootloaderem

Jeszcze zanim program zostanie wysiany do procesora, dobrze byłoby dokonać jego konfiguracji. Wykorzystamy do tego celu programator BASCOM’a ze względu na jego czytelność i poglądowość.

Bity, które trzeba zmienić, zostały wyróż nione na ry sunku 53. Zauważ zawartość roz-wijalncj listy dotyczącej wektora resetu. Wpisz program do procesora, a następnie wypróbuj dwie różne wartości w tym miejscu. Zgodnie z oczekiwaniem, zależnie od ustawienia bitu BOOTRST uruchomiona zostanie albo aplikacja (funkcja mam), albo bootloader (funkcja boot), co objawi się wyświetleniem na wyświetlaczu kreski w pierwszym przypadku i kropki w drugim.

Rys. 52 Adresowanie pamięci FLASH do zapisu


X12I -slZLfeJ U Ii


■H


Fu..Ut<M USfr.H^ln^uotm. FumW KB/ Ml O CKSa-OO 9 HhmI RC C


Fu*.ME 'Ci.eW.ncO FwmWF tOiuMaSTAC OEnwhn


Fu. Wal

Fu.afat M. ClLUąjłmł w)t! j1.1 'i:    ^


IS 1 S_P tpcłrwr


Wiemy już jak umieścić nową sekcje w prucesorze. Zaraz spróbujemy umieścić w niej wybraną funkcję.


listing 147 Plik harddęf.h


fffndef H4KL>utł'_H_iNCLUDtu

#define harddef_h_included

#define LED_A 4 #defiie LED_B 3 #defiie led_C 5 #defiie LED_D 2 rfdcfine led_e 6 rfdefine LED_F 0 #define LCD_G 7 #define LCD„DP 1 rfdeflne LEDPORT b #definc COMl S rfdefine COM2 4 #define COM3 3 #define COM4 2 #define COMPORT p tfdefine SWPORT E jKdefine SWl C #define SW? 7

#endif //HARDDEF H INCLUDED


Listing !4S Test umieszczenia .funkcji w sekcji .booiloailer tfinclude <avr/io.h>

tfinclude "harddęf.h"

#include “makra.h"

vo1d boot(void) attribute

(GesticnC. .Dootloader")));

int main(void)

(

// Konfiguracja portów PORT(COMPORT) - l«COMl | l«COM2 | i«C0M311«CQM4;

DDRCLEDPDRrj - Oxff;

DDR(COMPORr) - 1«CCM111<C0M2|

L«C0M3 | l«COM4 J

ff wyświetlenie kreski

PORT(LEDPORT) ■ ~(l«Lt:D A);

portCcjmpokt) &- ~Ci« lmi) ; return 0;

>

void boot(void)

{

// Konfiguracja portów PORT(COMPORT) - l«OOMl | l«COM2 |

1«CDM3 | l«COM4 ;

ddr(ledfdrt) - 0xff;

DOR (COMPORT) - l«COMl|l«CCM2| 1<<OM3I1<<COM4S

// wyświetlenie kropki port(ledport) - ~(1«LEC_CP); port(comport) L- ~(1«ccmi);

forC;;)

U


Rys. 53 Konfiguracja procesora do pracy z bootloaderem


Dwa podejścia do tworzenia bootloadera

Zastanówmy się przez chwilę, jak działa przykład, który właśnie stworzyliśmy. Gdy wektor zerowania jest ustawiony na początek naszej sekcji bootloadera, wywoływana jest znajdująca się na jej początku funkcja boot. W innym przypadku wywoływana jes; funkcja main. Czy to na pewno wygląda tak prosto? Otóż sęk tkwi w tym, że nie. W przypadku normalnego zerowania, zanim rozpocznie się wykonywanie funkcji main. wykonywana jest


Szczegóły techniczne Wady tworzenia bootloadera przez umieszczanie funkcji w specjalnej sekcji

Trudności w zapanowaniu nad kodem:

Umieszczając kilka funkcji w sekcji bootloadera, nie mamy pewności, która zostanie

umieszczona na jej początku.

Marnowanie zasobów: Bootloader tworzony razem z aplikacją jest razem z nią kompilowany. Oznacza to, że wykorzystywane przez niego zasoby dodają się do zasobów wykorzystywanych przez aplikację.

Problemy z symulacją: Aktualna wersja AYRStudio nie chce wczytywać kodu maszynowego z sekcji innej niż ,text. W takim przypadku instrukcje C pojawiają się, jednak nie ma możliwości ich przesymulowania.

konieczność niskopoziomowego panowania nad aplikacją: Rozwiązan e wymaga samodzielnej inicjacji stosu oraz zmiennych albo pisania całego kodu w asemblerze.

Elektronika dla Wszystkich Październik2006 41


Wyszukiwarka

Podobne podstrony:
71295 Image134 (2) Top WWWwww.alarmy-gerard.pl Listing 2 ?E7LA G: ;
31 (259) Top wwwwww.alarmy-gerard.pl sklep internetowy: www.gerard.pl prądy się znoszą i ze źródła s
54491 Image232 (2) Top wwwwww.alarmy-gerard.pl wzmacniacza mikrofonowego, to można w układzie wymusi
Image41 (8) Top wwwwww.alarmy-gerard.pl nie jest. oznacza to. że inny master rozpoczął wysyłanie dan
Image195 (3) Top www rwww.alarmy-gerard.pl jest to generator liczb pseudolosowych - liczby zawsze tw
57 (119) Top wwwwww.kradex.com.pl PRODUCENT OBUDÓW DLA ELEKTRONIKI Naddnieprzańska 32 04-205 Warszaw

więcej podobnych podstron