Witam,
Piszę programik na ATTINY10, gdzie każdy bajt RAMu jest cenny. Program po inicjalizacji odblokowuje przerwania i przechodzi do nieskończonej pętli while, gdzie wywołuję tylko instrukcję sleep_cpu().
Kod asemblera z pliku .lss:
Program nie posiada żadnych funkcji, a jedynie jedno przerwanie. Niestety zauważyłem na początku przerwania pokaźną ilość instrukcji push, jak i na końcu analogicznie pop.
Czy mogę z nich zrezygnować używając atrybutu "naked" w C? Jeśli tak, to czy mam dodać samodzielne instrukcję zapamiętujące licznik programu lub jakieś inne rejestry? Czy dobrze rozumiem że skoro instrukcji pop jest 8, to powinienem pozostawić minimum 8 bajtów wolnej pamięci RAM?
Dodam jeszcze że działam w AS6, a programik na razie testuję i kompiluję pod ATMEGA8, dlatego może się np. nie zgadzać liczba rejestrów z attiny10. Ale jeśli poznam odpowiedzi na powyższe pytania, będę wiedział jak postąpić przy przeportowaniu programu.
Piszę programik na ATTINY10, gdzie każdy bajt RAMu jest cenny. Program po inicjalizacji odblokowuje przerwania i przechodzi do nieskończonej pętli while, gdzie wywołuję tylko instrukcję sleep_cpu().
Kod asemblera z pliku .lss:
Kod: text
Program nie posiada żadnych funkcji, a jedynie jedno przerwanie. Niestety zauważyłem na początku przerwania pokaźną ilość instrukcji push, jak i na końcu analogicznie pop.
Kod: text
Czy mogę z nich zrezygnować używając atrybutu "naked" w C? Jeśli tak, to czy mam dodać samodzielne instrukcję zapamiętujące licznik programu lub jakieś inne rejestry? Czy dobrze rozumiem że skoro instrukcji pop jest 8, to powinienem pozostawić minimum 8 bajtów wolnej pamięci RAM?
Dodam jeszcze że działam w AS6, a programik na razie testuję i kompiluję pod ATMEGA8, dlatego może się np. nie zgadzać liczba rejestrów z attiny10. Ale jeśli poznam odpowiedzi na powyższe pytania, będę wiedział jak postąpić przy przeportowaniu programu.