160 likes | 258 Views
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:
E N D
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 • 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: • 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];
SDCCWeryfikacja 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
SDCCWeryfikacja 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
SDCCWeryfikacja 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 • 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!