# ATMEL mikrokontrolleri >  Problēma ar ret

## kvaris

Ko iesākt, ja ret instrukcija atgriež programmu uz pašu tās sākumu, nevis uz nākošo rindiņu pēc rcall?

----------


## karloslv

esi nočakarējis steku. vai programmas sākumā SP reģistru korekti inicializēji?

----------


## kvaris

Visas pazīmes, ka arvien vēl sēžu bērna autiņos...   ::   Kā SP reģistrs inicializējams?  ::

----------


## karloslv

asemblerā



```
    
LDI r16, HIGH(RAMEND) 
OUT SPH,r16 
LDI r16, LOW(RAMEND) 
OUT SPL,r16
```

 inicializācija jāveic pašā programmas sākumā (t.i. Reset vektorā).

----------


## kvaris

Ir OK, paldies!  ::

----------


## karloslv

ja rakstīsi C, nebūs jāuztraucas par steku  :: 

tagad tikai neuzkāp uz citiem grābekļiem - steks šobrīd atrodas RAM beigās un aug uz RAM sākuma pusi. atkarībā, cik dziļi sauksi rcall, RAM tiks brutāli aizpildīts ar steku. ja programmas darbam vajag rezervēt noteiktu x baitu skaitu, kurā steks nekad neiebrauks, tad SP jāinicializē uz RAMEND-x. bet parasti jau cilvēki paši kontrolē, cik dziļi iet apakšprogrammu izsaukumi.

----------

