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: