Politechnika Wrocławska Jarosław Emilianowicz Wrocław 2011
2 Strona SPIS TREŚCI ASEMBLER... 3 Etykiety, rozkazy i komentarze... 3 Stałe i zmienne... 4 Pierwszy program... 4 Formatka... 5 ST VISUAL DEVELOP... 7 Przestrzeń robocza... 7 Projekt... 8 Kompilacja... 10 Debugowanie... 12 J. Emilianowicz
Strona 3 ASEMBLER Etykiety, rozkazy i komentarze Język mnemoniczny jest łącznikiem pomiędzy maszynami, których język jest wyłącznie numeryczny, a ludźmi, którym wygodniej jest używać znaków i słów. Język mnemoniczny jest łatwo tłumaczony na język maszynowy, bo charakteryzuje go zależność słowo-na-słowo, pomiędzy językiem numerycznym a językiem słownym, mnemonicznym. Język mnemoniczny jest także nazywany asemblerem, a program tłumaczący na język maszynowy Asemblerem. Linia programu źródłowego składa się z czterech elementów: - etykiety, - mnemonika rozkazu lub dyrektywy asemblera oraz linkera - operanda (liczby, rejestru), gdzie liczba operandów zależy od użytego rozkazu - komentarza (zawsze rozpoczynającego się od średnika) dzielenie sub A,#$22 ; dzielenie akumulatora przez wartość $22 Etykiety powinny rozpoczynać się od samego boku dokumentu, natomiast rozkazy wraz z operandami powinny być odsunięte przynajmniej o jedną spację. dzielenie sub A,#$30 ; dzielenie akumulatora przez wartość $30 sub A,#$22 ; dzielenie akumulatora przez wartość $22 Etykiety są symbolicznymi adresami i wskazują miejsca w programie, do którego mogą następować skoki. Oznaczają też wyraźnie wybrany blok rozkazów, przez co zwiększa się czytelność pliku. Muszą zaczynać się od kropki i od lewego marginesu oraz nie mogą zawierać znaków spacji. Lista mnemoników jest definiowana przez producenta mikrokontrolera. Zawiera ona listę kodów specyficznych dla danego modelu mikrokontrolera. Rozkazy są powiązane z funkcją instrukcji. Część z nich jest dokładną nazwą instrukcji, np. ADD (add), część skrótem, jak SUB (substract), a inne akronimen, jak TNZ (Test for Negative or Zero). Liczby mogą być zapisane w jednym z powszechnie stosowanych formatów. Format Intela przewiduje zakończenie liczby literą oznaczającą format zapisu (b, o, d lub h). W przypadku wartości szesnastkowych przed literą należy dołożyć cyfrę 0. Format Motoroli natomiast wymaga poprzedzenie liczby znakiem oznaczającym format zapisu (%, ~ lub $). Wartość dziesiętna pozostaje bez zmian. W środowisku ST Visual Develop domyślnym formatem jest format Motoroli. Zapis Intel Motorola Dwójkowo 01010000b %01010000 Ósemkowo 7o ~7 Dziesiętnie 10 lub 10d 10 Szesnastkowo 0FFh $FF J. Emilianowicz
4 Strona Komentarze są poprzedzone średnikiem i mogą znajdować się w dowolnej kolumnie. Nie są one przetwarzane przez asembler, a pozwalają utrzymać czytelność pliku źródłowego i zrozumiałość, przy próbie jego analizy w przyszłości. Stałe i zmienne Pamięć RAM może być rezerwowana dla zmiennych. Służą do tego instrucje asemblera ds.b (rezerwacja bajtów) oraz ds.w (rezerwacja słów). Pamięć ROM może być rezerwowana dla stałych, używając instrukcji dc.b (lub BYTE) oraz dc.w (WORD). segment ram0.count ds.w 1 segment rom.rate dc.w 9600.tab dc.b $A0,$A1 ; rezerwacja na stronie 0 jednego slowa ; rezerwacja w pamieci ROM stalej (jednego slowa) ; rezerwacja w pamieci ROM stalej (dwoch bajtow) Pierwszy program Wszystkie pliki przetwarzane przez asembler muszą rozpoczynać się instrukcją ST7/, umieszczoną w pierwszej kolumnie pierwszego wiersza, co wskazuje asemblerowi, że asemblujemy plik dla procesorów rodziny ST7, a kończyć instrukcją END. Pominięcie instrukcji END będzie sygnalizowane jako błąd. Dla pewności, że ostatnia instrukcja nie zostanie pominięta podczas asemblacji, należy potwierdzić koniec linii znakiem ENTER by kursor przeszedł do następnej linii. ST7/... END Właściwy program powinien zostać umieszczony we właściwym segmencie ROM, zacząć się od etykiety (np. MAIN) i posiadać rozkaz resetujący wskaźnik stosu RST. Ponadto powinien być zakończony ponownym skokiem na początek programu lub niekończącą się pętlą, by uniemożliwić wykonywanie niechcianego kodu, który może znajdować się w dalszej części pamięci programu.... segment rom main rsp ; reset wskaźnika stosu infinite_loop jp infinite_loop ; niekończąca się pętla J. Emilianowicz
Strona 5... Kompilacja tak opracowanego programu przebiegnie poprawnie, jednakże próba symulacji zakończy się niepowodzeniem, ponieważ procesor nie będzie potrafił odnaleźć początek programu w pamięci. W tym celu należy dołożyć wektor przerwań i w przerwaniu o najwyższy priorytecie wskazać etykietę MAIN.... NonHandledInterrupt iret ; powrót z przerwań nieobsługiwanych segment 'vectit' dc.w main ; irq13 ; irq12 ; irq11_eeprom ; irq10_sci ; irq9_timb ; irq8_tima ; irq7_spi ; irq6 ; irq5_ext3 ; irq4_ext2 ; irq3_ext1 ; irq2_ext0 ; irq1_mcc ; irq0 ; trap ; reset END Formatka Żeby pierwszy program był w całości gotowy, potrzebne są także dodatkowe odwołania do plików z definicjami, charakterystycznymi dla całej rodziny mikrokontrolerów ST7 oraz dla ST72334N2 wykorzystywanego w makiecie uruchomieniowej. ST7/ #include "mapping.inc" #include "ST72334N2.inc" segment rom main rsp ; reset wskaźnika stosu ; tutaj właściwy program infinite_loop jp infinite_loop ; niekończąca się pętla NonHandledInterrupt iret ; powrót z przerwań nieobsługiwanych J. Emilianowicz
6 Strona segment 'vectit' dc.w main ; irq13 ; irq12 ; irq11_eeprom ; irq10_sci ; irq9_timb ; irq8_tima ; irq7_spi ; irq6 ; irq5_ext3 ; irq4_ext2 ; irq3_ext1 ; irq2_ext0 ; irq1_mcc ; irq0 ; trap ; reset END J. Emilianowicz
Strona 7 ST VISUAL DEVELOP Oprogramowanie ST Visual Develop umożliwia symulowanie pracy mikrokontrolerów rodziny ST7, ale także ich sprzętowe emulowanie przy współpracy z emulatorem DVP2, dostępnym w laboratorium C5 705. Oprogramowanie jest dostępne do pobrania na stronie producenta (www.st.com) pod nazwą ST Toolset. Program instalacyjny instaluje oprócz ST Visual Develop także ST Visual Programmer. W lewej części aplikacji jest okno z przestrzenią roboczą, gdzie będą widoczne w postaci rozwijanego drzewa wszystkie projekty. W prawej części aplikacji będzie wyświetlana zawartość plików. Natomiast u dołu będą wyświetlane komunikaty kompilacji i debugowania. Przestrzeń robocza Prace z oprogramowaniem ST Visual Develop rozpoczyna sie od utworzenia przestrzeni roboczej (Workspace), a następnie poprzez dodanie kolejnych projektów, które będą widoczne w postaci drzewa. Do katalogu, w którym będą przechowywane pliki przestrzeni roboczej warto przekopiować z katalogu aplikacji pliki st72334n2.asm oraz st72334n2.inc. J. Emilianowicz
8 Strona Nową przestrzeń roboczą tworzy sie wybierając w menu File - New Workspace, następnie Create an empty workspace. W okienku (patrz:) należy wypełnić obydwa dostępne pola. 1. W pierwszym polu Workspace filename wprowadzić nazwę przestrzeni roboczej, np. st7. 2. W drugim polu Workspace location podać ścieżkę dostępu do katalogu przestrzeni roboczej, np. C:/ST7/. Po poprawnym skonfigurowaniu po lewej stronie aplikacji pojawi sie nazwa przestrzeni roboczej wraz z rozszerzeniem stw. Projekt Nowy projekt do istniejącej juz przestrzeni roboczej dodamy poprzez Project - Add New Project to Workspace... Pojawi sie okienko, w którym wypełniamy trzy pierwsze pola z czterech dostępnych. 1. W pierwszym polu Project filename wprowadzamy nazwę projektu. Nazwa powinna być krótka, maksymalnie 8 znaków, bez znaków specjalnych. 2. W drugim polu Project location klikając na symbol żółtej teczki zakładamy podkatalog dla projektu. Działanie takie zabezpieczy przed nadpisywaniem się plików różnych projektów. 3. W trzecim polu Toolchain należy wybrać ST Assembler Linker. J. Emilianowicz
Strona 9 Po zatwierdzeniu konfiguracji pojawi się okienko wyboru procesora MCU Selection. W okienku tym należy wybrać procesor ST72334N2. Następnie należy dodać do projektu pliki st72334n2.asm oraz st72334n2.inc klikając prawym klawiszem myszki odpowiednio na Source Files oraz Include Files. Pliki te można odnaleźć w jednym z podkatalogów aplikacji ST Toolset. J. Emilianowicz
10 Strona Kompilacja Kompilację realizuje się poprzez menu Build > Buld (skrót klawiszowy F7). Podczas kompilacji powtarza się często grupa błędów. Brak pliku wykonywalnego Podczas kompilacji może zdarzyć się błąd, wynikający z braku pliku wykonywalnego, a dokładniej niepoprawnej ścieżki do niego. Należy wtedy pozwolić na wyświetlenie ustawień projektu, wybrać zakładkę STM ASM, a następnie wcisnąć klawisz Defaults. J. Emilianowicz
Strona 11 Błąd krótkiej kompilacji Podczas prawidłowo przeprowadzanej kompilacji w oknie wyjściowym przewija się zwykle około 30 linijek. Jeżeli jednak kompilacja zakończy się wyświetleniem jedynie jednej linijki 0 error(s), 0 warning(s), to świadczy i nieprawidłowym jej przebiegu i należy przeprowadzić kompilację całego projektu od nowa poprzez menu Buld > Rebuild All. Błąd EOF Skrót EOF oznacza End of File. Błąd ten jest wynikiem braku znaku ENTER za dyrektywą END. Oznacza to, że powinna być przynajmniej jedna pusta linia pod ostatnią dyrektywą. J. Emilianowicz
12 Strona Debugowanie Przed rozpoczęciem debugowania należy wybrać tryb pracy poprzez ustawienie w menu Debug instrument > Target settings W praktyce mogą być wykorzystane trzy z wielu opcji: - Simulator nie wymagający posiadania zestawu uruchomieniowego, - Swim ST-Link w przypadku posiadania zestawu STM8 Discovery, - DVP2 w przypadku emulatorów sprzętowych, będących na wyposażeniu laboratorium. Debugowanie realizuje się poprzez menu Debug > Start debuging (skrót klawiszowy F7). Prawidłowe zdebagowanie powinno zakończyć się wyświetleniem kodu programu wraz z żółtym paskiem podświetlającym pierwszy rozkaz. J. Emilianowicz
Strona 13 Błąd wektora przerwań Jeżeli po zdebugowaniu żółty pasek nie wyświetla się, to oznacza że w programie nie ma wektora przerwań lub jest niepoprawny, więc procesor/symulator nie potrafi odnaleźć pierwszego rozkazu w pamięci. J. Emilianowicz