43680 Image37 (6)

43680 Image37 (6)



Mikroprocesorowa Ośla łączka


Ml


191


ZmiennaTypuInteger = Funkcyjka (JakasZaiByte, JakasZmWord)


^ DECLARE SUB Zrobcos (BYREF Zmiennax AS Byte, BYREF Zmiennay AS Integer)

7, SUB Zrobcos (BYREF Zmiennax AS Byte, BYREF Zmiennay AS Integer)

X    ---------------------------- ------------

Cj Jeśli trzeba, można też wykorzystać jedno- wymagać dodatkowych zmiennych, konieczne U cześnie obie możliwości, na przykład:    byłoby zarezerwowanie dużej części pamięci

DECLARE SUB Zrobcos (BYVAL Zmienna* AS Byte, BYREF Zmiennay AS Integer)

SUB Zrobcos (BYVAL Zmienna* AS Byte, BYREF Zmiennay AS Integer)


^ co jest równoznaczne z:    RAM na zmienne, które będą wykorzystywa

ne

m DECLARE SUB Zrobcos (BYVAL Zmiennax AS Byte, Zmiennay AS Integer)

Z ...

X SUB Zrobcos {BYVAL Zmiennax AS Byte, Zmiennay AS Integer)

U -----------:-


DECLARE FUNCTION Funkcyjka (BYVAL ZmWewnl AS Byte, BYVAL ZmWewn2 AS Word) AS Integer FUNCTION Funkcyjka (BYVAL ZmWewnl AS Byte, BYVAL ZmWewn2 AS Word) AS Integer .    .    . tu instrukcje funkcji .    .    .

END FUNCTION


;i potem

ęj Argument UWAL naprawdę spowoduje u: więc utworzenie „zmiennej wewnętrznej” H i skopiowanie do niej zawartości zmiennej programu głównego.

Brak argumentu spowoduje przeniesienie przez referencję (adres), ale można Leż użyć j jawnie argumentu BYREF:

W Może wydaje Ci się, zc to nicz.nacz.4cy H szczegół, jednak jeśli będziesz używać procedur (SUB) i funkcji (FUNCTION), musisz . dobrze rozumieć te kwestie.

MB    ....

Na przykład możliwe jest też przekazanie j do funkcji (procedury) nic zmiennej (VAR),

<    tylko stałej (CONSTi. Zgodnie z podanymi informacjami, konieczne jest wtedy wyko-

— rzystanie argumentu BYVAL, bo przecież ^ stała to liczba z pamięci programu (FLASH) ® i do operacji na niej potrzebna jest jakaś real-^ na zmienna. Nie można wykorzystać (do-w myślnego) argumentu BYREF. czyli przeka-^ zania przez adres, bo nie można wykonać operacji na zawartości stałej pamięci FLASII.

<    Dalszych informacji o SUB i FUNCTION M należy szukać w pliku pomocy i w przykładnej wych programach (samples).

<

us Zmienne globalne i lokalne

“ Jeśli omawiamy procedury SUB i funkcje ^ FUNCTION, musimy wspomnieć o zmien-= nych lokalnych. Dotychczas wy korzy stywa-^ liśmy zmienne programu głównego, dla któ-W rych rezerwowane są na stałe pewne komórki pamięci RAM. Korzystając z argumentu BY-VAL. nakazujemy kompilatorowi stworzyć w pamięci RAM dodatkowe ..zmienne wewnętrzne”. do których zostanie skopiowana zawartość przekazywanych zmiennych pro-gra mu głównego.

Może się jednak zdarzyć, żc procedury i funkcje będą skomplikow ane i do ich działania potrzebne będą kolejne dodatkowe zmienne. Oczywiście możemy zadeklarować odpowiednie zmienne w programie głównym -będą to imieniu: globalne. Gdy ptocedui i funkcji będzie wiele i gdy każda będzie

nc tylko podczas realizacji tych procedur i funkcji. Jest to nieekonomiczne.

Wykonując rozmaite funkcje i procedury, możemy zrobić inaczej: wykorzystać tzw. zmienne lokalne. które będą „pojawiać się” tylko na czas realizacji tych funkcji i procedur. Dla takich lokalnych zmiennych też trzeba zarezerwować komórki RAM-u. ale nic na stałe, dlatego zmienne lokalne umieszcza się... na stosie. Pomysł może wydać się dziwny, ale właśnie stos pozwala wygodnie nimi gospodarować. Co prawda wykorzystanie zmiennej lokalnej zużywa więcej pamięci RAM. bo oprócz samej zmiennej trzeba określić jej tymczasowy adres, jednak w bardziej złożonych programach w sumie daje to znaczącą oszczędność.

Zmienne lokalne deklaruje się poleceniem LOCAL, które jest podobne do używanego od dawna DIM.

Składnia jest następująca:

LOCAL Zmienna AS TypZraiennej

Występują tu pewne ograniczenia dotyczące m.in. określania adresów, pamięci CEPROM - szczegółów trzeba szukać w pliku pomocy BASCOM-a.

Asembler

Darmowy pakiet BASCOM AVR DEMO posłużył jako znakomite, przyjazne narzędzie.

W lamach kursu mikroprocesorowej Oślej

łączki poznałeś dokładnie budowę procesora. Celowo przedstawiałem Ci pewne szczegóły, które zupełnie nie są potrzebne przy korzystaniu z BASCOM-a. Tc szczegóły mają poszerzyć Twoją wiedzę i umożliwić dalszy rozwój. Dopiero znajomość szczegółów budowy mikroprocesora umożliwia jego pełne wykorzystanie. Trzeba także mieć świadomość, iż BASCOM, choć łatwy w użyciu, ma liczne ograniczenia, a co najważniejsze, daje obszerne programy wynikowe. Wynika to głównie zc sposobu działania kompilatora, który poszczególne rozkazy BASCOM-a ..rozpisuje” na elementarne rozkazy maszynowe procesora. Niejednokrotnie przekonałeś się, żc skompilowanego programu nie da się załadować do dwóch kilobajtów pamięci naszego S2313.

Okazuje się jednak, żc dokładnie takie same zadania można byłoby zrealizować za pomocą znacznie krótszego (i szybciej pracującego) programu. BASCOM. bazujący na popularnym od lat programie BASIC jest znacznie gorszy od innych pakietów, wykorzystujących język C. Kompilatory języka C dla mikroprocesorów dają z reguły znacznie lepszy kod wynikowy, ale wymagają opanowania przynajmniej podstaw języka C. którego składnia jest odmienna i nieco trudniejsza do opanowania, niż składnia prostego BASIC-a. Osoby zaintęresowane dalszym rozwojem z przyjemnością zapoznają się z praktycznym kursem języka C dla mikrokontrolerów AVR autorstwa Radosława Koppla. Cykl taki wkrótce pojawi się na lamach EdW, tuż po zakończeniu niniejszego cyklu dotyczącego BASCOM-a.

Jeszcze krótszy i szybszy program można napisać w asemblerze. Asembler to język programowania ściśle zw iązany z danym procesorem. gdzie rozkaz w pisanym programie odpowiada jednemu rozkazowi maszynowemu. Asembler z jednej strony daje stuprocentową kontrolę nad programem i zachowaniem procesora, a z drugiej strony wymaga większej wiedzy i uwagi podczas pisania programów. Co bardzo ważne, kompilator BASCOM-a doskonale radzi sobie z tłumaczeniem rozkazów' asemblera na kod maszynowy (co zresztą jest zadaniem łatwiejszym niż tłumaczenie złożonych poleceń BASCOM-at. Oznacza to. że w programach B ASCOM-a można śmiało umieszczać fragmenty napisane w asemblerze, a w zasadzie nawet można byłoby napisać cały program w asemblerze.

46 Kwiecień 2005 Elektronika dla Wszystkich


Wyszukiwarka

Podobne podstrony:
Image33 (6) Mikroprocesorowa Ośla łączka Ml 187 SHIFTOUT Pdane , Pzegar Zmienna ,
Image35 (6) Mikroprocesorowa Ośla łączka Ml 189 < 14 Z X H < Z X hi H SUB Podprogramik
91 (142) Mikroprocesorowa Ośla łączka Ml Reset Watchdog I to sq wszystkie kluczowe informacje, umożl
edw6 str40 Mikroprocesorowa Ośla łączka Ml zostanie wykonana tylko raz). Natomiast przy reakcji na
Image36 (5) 190M1Mikroprocesorowa Ośla łączka ■ i definiowania:    nych zmiennych”? F
51061 Image34 (6) 188 Ml Mikroprocesorowa Ośla łączka ■ GETRC Polecenie GETRC pozwala oszacować wart
99 (115) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 ’C023e Wszystkie typy zmi
89 (141) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 programowe zerowanie liczni
90 (145) Mikroprocesorowa Ośla łączka R14 R13

więcej podobnych podstron