SDCC I STRC52
Click here to load reader
description
Transcript of SDCC I STRC52
SDCC I STRC52SDCC I STRC52Kompilator SDCC
i Pakiet STRC52
Mgr inż. Aleksander Pruszkowski
SDCCSDCC
• Standardowo praca w linii poleceń• Możliwość integracji z IDE• SDCC dystybuowane jako open source
• Do pobrania z: sdcc.sourceforge.net
• Możliwość pracy na wielu platformach:• Win32 (Windows 2K, Windows XP, 95, 98,...)• Linux• MacOS
• Istnieje możliwość rekompilacji narzędzi
SDCCSDCC
• Dodatkowe narzędzia wspomagające pracę, z poza pakietu:• copyclip
• Kopiowanie pliku do schowka (pomocne podczas uruchamiania kodu w STRC52)
• make• Automatyzacja tworzenia wynikowych plików na
podstawie najnowszych wersji plików źródłowych• rm
• Usuwanie niepotrzebnych plików, wyników poprzedniej kompilacji
SDCCSDCC• Podstawowe opcje kompilatora:
• -v• Sprawdzenie wersji kompilatora
• --model-small• Precyzacja typu tworzonego kodu (small, large)
• --code-loc• Specyfikacja miejsca w którym będzie znajdował się
kod wynikowy• --xram-loc
• Specyfikacja gdzie znajdzie się obszar używany przez zmienne typu xdata
• --data-loc • Specyfikacja gdzie będą umieszczone zmienne w
wewnętrznej pamięci mikrokontrolera
SDCCSDCC• Typy podstawowe akceptowane przez
pakiet:• char 8 bity (1 bajt)• short 16 bity (2 bajty)• int 16 bity (2 bajty)• long 32 bit y (4 bajty)• float 32 bity (4 bajty, kodowane według IEEE)
SDCCSDCC• Zagadnienia optymalności kodu
• Temat dokładnie opisany na: • sdcc.sourceforge.net/doc/sdccman.html/node139.html
• Unikanie dużych struktur danych • Priorytety podstawowych typów zmiennych:
• char - int/short - long• Złe i dobre dopasowanie typów:long i; char i;for(i=0;i<10;i++){ for(i=0;i<10;i++){ ... ...} }
SDCCSDCC• Niektóre ograniczenia mikrokontrolera C51:
• Zmienne:• bez precyzowania w modelu small - dostępne w sumie
na zmienne i stos procesora to 128B• reszta dostępna w modelu large lub po specyfikacji
jako xdata, np.:• xdata unsigned char tab[1000] ;
• Stałe:• Domyślnie kompilator umieszcza stałe w pamięci
przeznaczonej na zmienne. • Osiągnięcie zamierzonego rezultatu (wykorzsytanie
pamięci kodu) przez deklaracje:• code unsigned char const_tab[1000];
SDCCSDCCWeryfikacja poprawności instalacji
Pole deklaracji peryferii sprzętowych
Pętla opóźniająca
Sprawdzenie stanu klawiszy
• Pierwszy plik: main.cxdata at 0x8000 unsigned char U12; sbit at 0xB4 T1;#define BUZZER T1void main (void){ unsigned char i,r=0; for(;;){ if((U12 & 0x0f)!=0x0f){ if((r & 0x01)==0) BUZZER=1; else BUZZER=0; r++; } for(i=0; i<70; i++); }}
Generacja dźwięku
SDCCSDCCWeryfikacja poprawności instalacji • Kompilacja (tylko z linii poleceń, w miejscu
gdzie znajduje się main.c)• sdcc -c main.c
• Wynik kompilacji • main.asm - wynik kompilacji w asemblerze C51,• main.lst - wynik kompilacji i przypisania kodu
binarnego• main.sym - tablica symboli powstała podczas
kompilacji• main.rel - plik obiektowy – wynik właściwej
kompilacji
SDCCSDCCWeryfikacja poprawności instalacji • Linkowanie (polecenie wydane w jednej linii)
• sdcc --model-small --code-loc 0x4000 • --xram-loc 0x0000 main.rel
• Wynik linkowania • main.mem - tablica wielkości pamięci użytej• main.rst - wynik linkowania i przypisania kodu
binarnego• main.map - mapa symboli i obiektów powstałych
w wyniku kompilacji i linkowania• main.lnk - plik pomocniczy (opcje kompilacji)• main.ihx - plik wynikowy w formacie intel-HEX
do załadowania w STRC51
STRC51STRC51• Przyłączenie do komputera
• Wybór wolnego złącza RS232 (nie zajmowane przez inne działające aplikacje w systemie)
• Przyłączenie zasilania • Zawsze za pomocą zasilacza klasy B• Podłączony do tej samej fazy 220V, co komputer na
którym będzie dalsza praca• Reset
• inicjacja urządzenia – tylko uC 80C51 • Elementy sterujące LED, LCD nie mogą być ta metodą
inicjowane/resetowane
STRC51STRC51• Przygotowanie programu komunikacyjnego
TeraTermPro (Setup->Serial Port)• Wybór portu
• COM1
• Wybór szybkości • 19200 bps
• Parametry transmisji• 8N1
• Opóźnienia transmisji• 0ms/znak, 30ms/linię
STRC51STRC51• Ładowanie pliku HEX
• Uruchomienie z menu (w STRC51) opcji• Q – ładowanie z automatycznym uruchomieniem• P – ładowanie bez uruchomienia
• wymaga ręcznego uruchomienia kodu przez podanie: J 4000
STRC51STRC51• Ładowanie pliku HEX cd. (wyłącznie z linii
pocleceń):• Pakowanie pliku wynikowego:
• packihx main.ihx > main.hex
• Kopiowanie zawartości pliku main.hex do schowka, metodami:
• copyclip main.hex • Automatyzacja procesu, możliwość wywołania z poziomu pliku
makefile• notepad main.hex
• Ręczne zaznaczenie tekstu i wywołanie kopiowania tekstu – zawodne i czasochłonne (zdarzają się pomyłki)
STRC51STRC51• Ładowanie pliku HEX cd.
• Przełączenie się na TeraTermPro• Wklejamy zawartość schowka – posiadający teraz plik
main.hex
Dziękuje za uwagę Dziękuje za uwagę ii
życzę miłej pracy!życzę miłej pracy!