ATtiny ja stackin koko

Miten saisin AVR:n stacking kokoa kasvatettua kun tuntuu että attiny13A menee sekaisin kun lisään muuttujia?

Stackin alku alustetaan defaulttina ram-endiin ja se kasvaa siitä alaspäin. Heapista varatut muuttujat menevät taas rammin alkuun. AVR:ssä ei ole mitään stackin valvontaa (eikä myöskään erillistä maksimikokoa), joten stack voi kasvaa heapista varattujen muuttujien päälle “ongelmitta”. Onglmat tulevat siitä kun heapissa olevat muuttujat korruptoituvat tai korruptoivat stackissa olevaa dataa.

Onglmana taitaa olla kyseisessä olevan kontrollerin rammin määrä eli 64 tavua. Tämän täyttämiseen ei tarvita kovinkaan moniportaisia funktiokutsuja.

Suosittelen assembleriin tutustumista. Vaikka tuonne on mahdollista tunkea C:tä, käytä assemblyä. Silloin voit laittaa tosiaan muuttujat muistin alkuun ja turhuuksilta vältytään. Jokaisessa funktion kutsussa konteksti tallennetaan pinoon ja se kasvaa silloin. Myös keskeytyksessä näin tapahtuu. Asmilla pystyy ohentamaan pinon paisumista, kun vain tarvittavat rekisterit laitetaan pinoon.

Tosikätsy kirjoittaa koko ohjelman rekistereihin asmilla :slight_smile:

Siirtelin muuttuja globaaleiksi niin sain stackin käyttöä pienemmäksi. Se ratkaisi ongelman :slight_smile: