SDCC I STRC52
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!