PROCEDURY-WYMIANA INFORMACJI Procedury sÄ… zwykle wywoÅ‚ywane w celu okreÅ›lonej obróbki informacji. Procedury z reguÅ‚y wymagajÄ… danych do swej pracy czyli parametrów i generujÄ… tzw. wyniki. Sposób wymiany informacji pomiÄ™dzy programem wywoÅ‚ujÄ…cym a procedurÄ…, tzn.: a) przekazanie procedurze parametrów; b) odebranie od niej wyników; jest uzależniony od szeregu czynników: " liczby dostÄ™pnych aktualnie rejestrów µP; " dostÄ™pnego obszaru PAO; " wymaganej szybkoÅ›ci dziaÅ‚ania; " typu pamiÄ™ci programu i danych (ROM czy RAM); " prostoty wymiany danych; " uniwersalnoÅ›ci; " wpÅ‚ywu na współużywalność procedury woÅ‚ajÄ…cej i wywoÅ‚ywanej. 1. Przekazywanie parametrów/wyników przez rejestry. Szybki sposób przekazywania niewielkiej iloÅ›ci danych. ; procedura generujÄ…ca programowo zadane opóznienie ; parametry: B - czas opóznienia delay: EX (SP),HL ; 2-krotna zamiana HL [19] EX (SP),HL ; z wierzchoÅ‚kiem stosu [19] DJNZ delay ; dekrement licznika powtórzeÅ„ [13/8] RET ; [10] ; przykÅ‚ad wywoÅ‚ania: LD B,k ; [7] CALL delay ; [17] (RST delay ;[11]) czas trwania opóznienia (Å‚Ä…cznie z wywoÅ‚aniem) [w taktach CLK]: N=(7+17)+(19+19)k+13(k-1)+8+10=51k+29 fosc=2.5MHz k=1 N=80 T=32µs t=400ns k=0 N=13138 T=5.25ms 1 ^L.J.Grodzki ^ 2. Przekazywanie parametrów/wyników przez rejestry poÅ›rednio. W rejestrach przekazuje siÄ™ adresy np. poczÄ…tków obszarów zawierajÄ…cych potrzebnÄ… informacjÄ™. Sposób umożliwiajÄ…cy przekazywanie dużych bloków danych. ; procedura sumujÄ…ca 1-bajtowe elementy tablicy ; paramatry: B - liczba elementów do zsumowania; ; DE - poczÄ…tek tablicy; ; HL - adres 2-bajtowego wyniku operacji. ; zmiany: DE:=DE+B, B:=0. sumy: PUSH AF ; przechowanie AF na stosie XOR A LD (HL),A; zerowanie bajtów wyniku INC HL LD (HL),A DEC HL sumy1: LD A,(DE); A:=element tablicy ADD A,(HL); dodawanie 2-bajtowe LD (HL),A INC HL LD A,(HL) ADC A,0 LD (HL),A DEC HL INC DE ; nastÄ™pny element tablicy DJNZ sumy1 ; dekrement licznika B POP AF ; odtworzenie AF ze stosu RET ; przykÅ‚ad wywoÅ‚ania: LD DE,tabliczb LD HL,sumael LD B,iloscel CALL sumy 2 3. Przekazywanie parametrów/wyników przez wspólny, staÅ‚y obszar w RAM. Sposób umożliwiajÄ…cy przekazywanie dużych iloÅ›ci danych, wpÅ‚ywa negatywnie na współużywalność procedury. PrzykÅ‚adowe zadeklarowanie obszarów wspólnych: ORG 9000h albo: l1: EQU 9000h l1: DEFS 4 l2: EQU 9004h l2: DEFS 4 l3: EQU 9008h lw: DEFS 4 ; procedura realizujÄ…ca dodawanie liczb 4-bajtowych ; parametry: l1,l2 - 4-bajtowe obszary ze skÅ‚adnikami; ; wyniki: lw - 4-bajtowa suma dod4b:EX AF,AF'; wybór alternatywnego AF PUSH BC ; skÅ‚adowanie BC na stosie PUSH IX ; skÅ‚adowanie IX na stosie LD B,4 ; licznik bajtów LD IX,l1 ; IX->obszar wspólny XOR A ; CY:=0 dodb: LD A,(IX) ; A:=bajt z l1 ADC A,(IX+l2-l1) ; dodanie bajtu z l2 LD (IX+lw-l1),A; bajt sumy do lw INC IX ; nastÄ™pne bajty DJNZ dodb POP IX ; odtworzenie rejestrów POP BC EX AF,AF' RET ; przykÅ‚ad wywoÅ‚ania: LD BC,4 ; inicjacja obszarów wspólnych LD HL,liczba1 LD DE,l1 LDIR LD BC,4 LD HL,liczba2 LD DE,l2 LDIR CALL dod4b LD HL,(lw) ; skopiowanie wyniku z obszaru LD (suma),HL ; wspólnego do zmiennej roboczej LD HL,(lw+2) LD (suma+2),HL 3 ^L.J.Grodzki ^ 4. Przekazywanie parametrów przez listÄ™ w treÅ›ci programu. Metoda stosowana do przekazywania parametrów, których wartość jest już znana na etapie asemblacji (np. maks. liczba iteracji, liczba wykonania pÄ™tli opózniajÄ…cej). ; procedura realizujÄ…ca opóznienie ; parametry: k - krotność powtórzenia pÄ™tli, podana za kodem ; rozkazu wywoÅ‚ania ; zmiany: rej.F, B:=0 delayk:EX (SP),HL ; HL:=adres powrotu [19] LD B,(HL); B:=krotność k [7] INC HL ; inkrement adresu powrotu [6] EX (SP),HL ; nowy adres powrotu na stos [19] delay: EX (SP),HL ; rozkazy dajÄ…ce [19] EX (SP),HL ; opóznienie [19] DJNZ delay ; dekrement licznika powtórzeÅ„ [13/8] RET ; [10] ; przykÅ‚ad wywoÅ‚ania: CALL delayk ; [17] DEFB k stan po wejÅ›ciu do 0CDh procedury delayk üÅ‚ (PC = delayk) kod rozkazu CALL delaykL delaykH þÅ‚ adr.pow.=M(SP+1)M(SP) k jednobajtowa staÅ‚a k czas trwania opóznienia [w taktach CLK] (Å‚Ä…cznie z wywoÅ‚aniem): N=51k+73 4 5. Przekazywanie parametrów/wyników przez stos. Dobra metoda, zapewniajÄ…ca dynamiczny przydziaÅ‚ pamiÄ™ci dla zmiennych, ale wymaga nieco uwagi przy programowaniu, ponieważ ingeruje w strukturÄ™ stosu. ; procedura sumujÄ…ca k liczb 2-bajtowych ; parametry: liczby i licznik k - na stosie ; wynik: suma - na stosie, zamiast pierwszej z sumowanych liczb sumujkliczb:PUSH HL PUSH BC ; skÅ‚adowanie rejestrów na stosie PUSH DE PUSH AF LD HL,10 ADD HL,SP ; IX->k na stosie LD B,(HL); B - licznik liczb INC HL EX DE,HL LD HL,0 ; wyzerowanie sumy S sumujliczbe:INC DE ; DE->liczba na stosie LD A,(DE); A:=mÅ‚odszy bajt ADD A,L LD L,A INC DE LD A,(DE); A:=starszy bajt ADC A,H LD H,A DJNZ sumujliczbe ; dekrement licznika powtórzeÅ„ LD (DE),A; zapisanie sumy S na stosie DEC DE ; w miejscu pierwszej z liczb LD A,L LD (DE),A; zapis mÅ‚odszego bajtu POP AF ; odtworzenie rejestrów POP DE POP BC POP HL RET 5 ^L.J.Grodzki ^ ; przykÅ‚adowe wywoÅ‚anie LD HL,(...); zapis k liczb PUSH HL ; na stos LD HL,k PUSH HL ; k na stos CALL sumujkliczb INC SP ; k INC SP ; razy POP HL ; HL:=suma stan stosu na stan stosu stan stosu na poczÄ…tku przed koÅ„cu procedury: sumowaniem: (przed RET): H H H L1 L1 S
DE L L L " " " " " " " " " H H H Lk Lk Lk L L L H H H
DE k k k L L L H H H adr.pow. adr.pow. adr.pow.
SP SP L L L HL BC DE AF
SP 6 WSPÓAUÅ»YWALNOŚĆ PROCEDUR Współużywalność polega na tym, że przerwanie wykonywania procedury i powtórne jej wywoÅ‚anie z innego miejsca programu (np. z wnÄ™trza procedury obsÅ‚ugi przerwania) nie zaburza pracy żadnego z programów wywoÅ‚ujÄ…cych. Podstawowe warunki współużywalnoÅ›ci to: - niestosowanie samomodyfikacji kodu programu/procedury; - stosowanie dynamicznego przydziaÅ‚u RAM na zmienne robocze (np. na stosie), zamiast staÅ‚ych obszarów roboczych, staÅ‚ych obszarów na parametry i wyniki. PrzykÅ‚ad dynamicznego przydziaÅ‚u RAM na stosie dla zmiennych roboczych procedury: procX:PUSH IX ; skÅ‚adowanie na stosie rejestrów ; w tym także IX LD IX,-wor ; wor=wielkość obszaru roboczego w bajtach ADD IX,SP LD SP,IX ; zarezerwowanie obszaru roboczego na stosie ; treść procedury, ; dostÄ™p do elementów obszaru roboczego ; np. adresowaniem indeksowym (IX+dd) LD IX,wor ; zwolnienie obszaru roboczego ADD IX,SP ; ze stosu pod koniec procedury LD SP,IX POP IX ; odtworzenie IX i innych rejestrów RET WSPÓABIEÅ»NOŚĆ PROCESÓW Współbieżność procesów/programów polega na tym, że mikroprocesor realizuje jednoczeÅ›nie 2 lub wiÄ™cej programów - oczywiÅ›cie z tzw. podziaÅ‚em czasu (przeÅ‚Ä…czanie dostÄ™pu do procesora poszczególnych programów regulowane timerem - procesy równorzÄ™dne, albo przerwaniami od asynchronicznych zdarzeÅ„ zewnÄ™trznych - program tÅ‚a i procedury obsÅ‚ugi przerwaÅ„). Aby te zadania byÅ‚y realizowane poprawnie muszÄ… być speÅ‚nione warunki: - rozdzielenie obszarów danych i kodu poszczególnych programów; - stosowanie procedur współużywalnych. 7 ^L.J.Grodzki ^ ZASADY PROGRAMOWANIA Cechy dobrego programu 1. Poprawność i prawidÅ‚owość pracy programu pisanie i kodowanie pogramu zajmuje tylko ok. 20-30% caÅ‚ego czasu, reszta to proces uruchamiania i dokumentowania. 2. Elastyczność w modyfikacji i użytkowaniu - nie można zakÅ‚adać ostatecznoÅ›ci jakiejÅ› wersji programu - zwykle nastÄ™pujÄ…: Ò! zmiany zaÅ‚ożeÅ„ wstÄ™pnych ze strony zleceniodawcy; Ò! modyfikacje sprzÄ™tu, na który jest przeznaczony nasz program; Ò! ujawnienie siÄ™ ukrytych dotychczas bÅ‚Ä™dów programu i sprzÄ™tu; Ò! inne przyczyny (np. chęć udoskonalenia już dziaÅ‚ajÄ…cego programu); 3. WÅ‚aÅ›ciwa organizacja - skÅ‚adajÄ… siÄ™ na niÄ… nastÄ™pujÄ…ce czynniki: Ò! stosowanie zasad programowania strukturalnego; Ò! nieunikanie procedur; Ò! wyodrÄ™bnienie modułów peÅ‚niÄ…cych okreÅ›lone funkcje; Ò! grupowanie deklaracji, np. w nagłówku programu (moduÅ‚u) wraz z odpowiednimi komentarzami; Ò! bardzo ostrożne operowanie wspólnymi obszarami roboczymi w pamiÄ™ci danych; Ò! unikanie programów samomodyfikujÄ…cych siÄ™; Ò! ograniczenie siÄ™ jedynie do zestawu oficjalnych rozkazów procesora; Ò! wÅ‚aÅ›ciwy wybór nazw zmiennych, procedur i etykiet (nazwy powinny siÄ™ kojarzyć z tym co reprezentujÄ…); Ò! nadmiarowość kodu polegajÄ…ca np. na sprawdzaniu: " na wejÅ›ciu do procedury czy parametry odpowiadajÄ… wymaganiom; " czy liczby reprezentujÄ…ce zmierzone wielkoÅ›ci fizyczne sÄ… prawdopodobne/realne; " indeksów tablic przed odwoÅ‚aniem siÄ™ do nich; Ò! niestosowanie przenikania siÄ™ modułów. 4. Dokumentowanie programu: Ò! odpowiednie nazwy obiektów sÄ… już częściÄ… komentarza-dokumentacji; Ò! komentarze w tekÅ›cie programu: opisywanie realizowanych algorytmów, nagłówki modułów i procedur, przykÅ‚adowo każdy taki nagłówek winien zawierać informacje: " nazwa i opis funkcji moduÅ‚u; " opis parametrów i sposobu ich przekazywania; " opis wyników i sposobu ich otrzymywania; " wpÅ‚yw wykonania moduÅ‚u na stan rejestrów `P; " ewentualne zastrzeżenia, ograniczenia w używalnoÅ›ci; " przykÅ‚ad prawidÅ‚owego wywoÅ‚ania; " lista innych, używanych wewnÄ…trz danego, modułów; " autor i data pierwszej wersji, ostatniej poprawki; Ò! dokumentacja "papierowa"; 5. Optymalność pracy Zabiegi optymalizacyjne stosować tylko wtedy gdy jest to konieczne i dopiero po uzyskaniu poprawnie dziaÅ‚ajÄ…cego programu w wersji podstawowej. Z reguÅ‚y nie można pogodzić dużej szybkoÅ›ci pracy z maÅ‚Ä… zajÄ™toÅ›ciÄ… pamiÄ™ci. 8