Elektronika

Edukativni tekstovi iz sveta elektronike

Komponente

Opisi komponenata koje se koriste u elektronici

Novosti

Najnovije vesti iz elektronike i ostalih srodnih oblasti

Projekat

Projekti iz elektronike za samogradnju

Rečnik

Rečnik pojmova iz elektronike i računarstva

Početna » Programiranje

Upravljanje stekom i graf poziva funkcija

Autor | Subota, 27. Jun 2009.Nema komentara

Stek kod PIC mikrokontrolera je ograničene veličine i ne može se njime direktno manipulisati. Na programeru je da proveri da se nije desilo prekoračenje u maksimalnoj dubina steka. Graf poziva funkcija je obezbeđen od strane linkera, pri generisanju MAP fajla, i prikazuje nivo steka, pri svakom pozivu funkcije.

Struktura grafa poziva funkicija

* _function_name size p,a offset o

Zvezdica * ispred naziva nekih funkcija označava da se ova funkcija nalazi na kritičnoj putanji i da je sama kritična. Ukoliko je neophodno smanjiti količinu utrošenog RAM-a potrebno je znati da modifikovanje funkcija koje nisu označene zvezdicom neće se ništa postići, jer one ne utiču na ukupnu količinu zauzetog RAM-a. Modifikovanje funkcija označenih zvezdicom može doprineti smanjenju ukupnog utroška RAM-a, ali to onda može dovesti do toga da neke druge funkcije postanu kritične

Objašnjenje: Termin kritična funkcija označava funkciju koja mora da zauzme neku memorijsku lokaciju za svoje lokalne promenljive i argumente. Ne kritična funkcija deli memorijske lokacije, za lokalne promenljive i argumente, sa nekim drugim kritičnim i/ili nekritičnim funkcijama, jer se korišćenje tih lokacija nikad neće preklopiti pa je tako nešto moguće.

_function_name

Predstavlja naziv funkcije sa dodatom donjom crtom ispred imena.

size p,a

Broj p predstavlja broj bajtova koje zauzimaju lokalne promenljive, dok broj a predstavlja broj bajtova koje zauzimaju argumenti funkcije.

offset o

Broj o predstavlja rastojanje u RAM-u od kojeg počinje alociranje memorije za potrebe funkcije. Rastojanje se posmatra od osnove lokalnog bloka RAM-a, pozicija ovog bloka se može videti u sekciji common MAP fajla odmah posle listinga fajlova.

INDIRECT ####

Predstavlja sve funkcije koje se pozivaju indirektno preko oznake ####. Pošto je ovaj sistem zasnovan na oznakama, ako imate dve grupe funkcija koje se pozivaju indirektno na dva različita mesta, a imaju iste oznake, onda će se funkcije iz obe grupe prikazati da su pozvane sa oba mesta.

->

Simbol “->” se pojavljuje kada u grafu poziva postoji funkcija koja nema lokalnih promenljivih i argumenata, a poziva druge funkcije. To je samo skraćenica za graf poziva, koja sprečava da se jako proširi i postane nepregledan, sa karakterima za dodatno uvlačenje reda. Koristi se na sledeći način:

_func1 -> func2 size p,a offset o

Primer grafa poziva funkcija

Kreirajmo jednostavan projekat u kojem ćemo prikazati neke funkcije i njihove pozive i na osnovu tog koda generisani graf poziva funkcija.

#include <pic.h>
void func01(void);
void func02(char ch);
void func03(char ch,int i);
void func04(char c);
void func05(void);
void main(void) {
  unsigned char t;
  void (* fptr)(char);
  t=17;
  func01();
  func02(5);
  func04(t);
  func05();
  fptr=func02;
  fptr(15);
}  

void func01(void) {
  // add some code here
  // ...
} 

void func02(char ch) {
  func03(ch,18);
  func01();
  // add some code here
  // ...
} 

void func03(char ch,int i) {
  volatile unsigned char temp;
  temp = 1;
  // add some code here
  // ...
} 

void func04(char c) {
  unsigned char t;
  t = c;
  func03(c,t);
} 

void func05() {
  func02(3);
}  

Izgled grafa poziva funkcija za prethodni kod dat je u nastavku:


*_main size 0,3 offset 0
     _func01
*    _func02 size 0,1 offset 3
*        _func03 size 2,1 offset 5
         _func01
*    _func04 size 0,2 offset 3
*        _func03 size 2,1 offset 5
*    _func05->_func02 size 0,1 offset 3
*        _func03 size 2,1 offset 5
         _func01
     string_table
*    INDIRECT 4216
*        INDIRECT 4216
*            _func02 size 0,1 offset 3
*                _func03 size 2,1 offset 5
                 _func01

Leave your response!

You must be logged in to post a comment.