1 Kompilator SDCC i Pakiet STRC52 Mgr inż. Aleksander PruszkowskiSDCC I STRC52 Kompilator SDCC i Pakiet STRC52 Mgr inż. Aleksander Pruszkowski
2 SDCC Standardowo praca w linii poleceń Możliwość integracji z IDESDCC 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
3 SDCC Dodatkowe narzędzia wspomagające pracę, z poza pakietu: copyclipKopiowanie 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
4 SDCC Podstawowe opcje kompilatora: -v --model-small --code-locSprawdzenie 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
5 SDCC 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)
6 SDCC 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++){ } }
7 SDCC Niektóre ograniczenia mikrokontrolera C51: Zmienne: Stałe: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];
8 SDCC Weryfikacja poprawności instalacjiPierwszy plik: main.c xdata at 0x8000 unsigned char U12; sbit at 0xB4 T1; #define BUZZER T1 void 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++); Pole deklaracji peryferii sprzętowych Sprawdzenie stanu klawiszy Generacja dźwięku Pętla opóźniająca
9 SDCC Weryfikacja poprawności instalacjiKompilacja (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
10 SDCC Weryfikacja poprawności instalacjiLinkowanie (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
11 STRC51 Przyłączenie do komputera Przyłączenie zasilania ResetWybó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
12 STRC51 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ę
13 STRC51 Ładowanie pliku HEX Uruchomienie z menu (w STRC51) opcjiQ – ładowanie z automatycznym uruchomieniem P – ładowanie bez uruchomienia wymaga ręcznego uruchomienia kodu przez podanie: J 4000
14 STRC51 Ł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)
15 STRC51 Ładowanie pliku HEX cd. Przełączenie się na TeraTermProWklejamy zawartość schowka – posiadający teraz plik main.hex
16 Dziękuje za uwagę i życzę miłej pracy!