Kompilator SDCC i Pakiet STRC52 Mgr inż. Aleksander Pruszkowski SDCC I STRC52 Kompilator SDCC i Pakiet STRC52 Mgr inż. Aleksander Pruszkowski
SDCC 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
SDCC 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
SDCC Podstawowe opcje kompilatora: -v --model-small --code-loc 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
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)
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++){ ... ... } }
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];
SDCC Weryfikacja poprawności instalacji Pierwszy 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
SDCC Weryfikacja 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
SDCC Weryfikacja 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
STRC51 Przyłączenie do komputera Przyłączenie zasilania Reset 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
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ę
STRC51 Ł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
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)
STRC51 Ładowanie pliku HEX cd. Przełączenie się na TeraTermPro Wklejamy zawartość schowka – posiadający teraz plik main.hex
Dziękuje za uwagę i życzę miłej pracy!