Goto page 1, 2 Next
pp
Guest
Tue Aug 05, 2014 1:04 am
Witam
Jak w C (avr-gcc, AVR) wyłączyć zapisywanie zmiennych do stosu (czy
gdzie to tam jest zapisywane) przy wchodzeniu do funkcji i przywracanie
tych zmiennych przy powrocie z funkcji ?
Program nie używa przerwań, więc chyba nie jest to konieczne.
Paweł
Guest
Tue Aug 05, 2014 6:40 am
Użytkownik "pp" <32142134@32213231.pl> napisał w wiadomości
news:lrpaj3$ti1$1@speranza.aioe.org...
Quote:
Witam
Jak w C (avr-gcc, AVR) wyłączyć zapisywanie zmiennych do stosu (czy gdzie to
tam jest zapisywane) przy wchodzeniu do funkcji i przywracanie tych zmiennych
przy powrocie z funkcji ?
Program nie używa przerwań, więc chyba nie jest to konieczne.
Uzyć asemblera zamiast C lub nie stosować funkcji.
Zbych
Guest
Tue Aug 05, 2014 6:48 am
W dniu 2014-08-05 03:04, pp pisze:
Quote:
Witam
Jak w C (avr-gcc, AVR) wyłączyć zapisywanie zmiennych do stosu (czy
gdzie to tam jest zapisywane) przy wchodzeniu do funkcji i przywracanie
tych zmiennych przy powrocie z funkcji ?
Nie da się. Takie jest ABI.
http://gcc.gnu.org/wiki/avr-gcc
Quote:
Program nie używa przerwań, więc chyba nie jest to konieczne.
To nie ma nic do rzeczy.
JDX
Guest
Tue Aug 05, 2014 6:52 am
On 2014-08-05 08:48, Zbych wrote:
Quote:
W dniu 2014-08-05 03:04, pp pisze:
Witam
Jak w C (avr-gcc, AVR) wyłączyć zapisywanie zmiennych do stosu (czy
gdzie to tam jest zapisywane) przy wchodzeniu do funkcji i przywracanie
tych zmiennych przy powrocie z funkcji ?
Nie da się. Takie jest ABI.
http://gcc.gnu.org/wiki/avr-gcc
Nie jest dla mnie do końca jasne o co chodzi OP, ale może pomoże atrybut
"naked".
Zbych
Guest
Tue Aug 05, 2014 7:32 am
W dniu 2014-08-05 08:52, JDX pisze:
Quote:
On 2014-08-05 08:48, Zbych wrote:
W dniu 2014-08-05 03:04, pp pisze:
Witam
Jak w C (avr-gcc, AVR) wyłączyć zapisywanie zmiennych do stosu (czy
gdzie to tam jest zapisywane) przy wchodzeniu do funkcji i przywracanie
tych zmiennych przy powrocie z funkcji ?
Nie da się. Takie jest ABI.
http://gcc.gnu.org/wiki/avr-gcc
Nie jest dla mnie do końca jasne o co chodzi OP, ale może pomoże atrybut
"naked".
Przy "naked" trzeba ręcznie tworzyć ramkę na stosie (jeśli jest
potrzebna), zadbać o odtworzenie oryginalnego stanu rejestrów R18
janusz_k
Guest
Tue Aug 05, 2014 8:50 am
W dniu 05.08.2014 o 03:04 pp <32142134@32213231.pl> pisze:
Quote:
Witam
Jak w C (avr-gcc, AVR) wyłączyć zapisywanie zmiennych do stosu (czy
gdzie to tam jest zapisywane) przy wchodzeniu do funkcji i przywracanie
tych zmiennych przy powrocie z funkcji ?
Po 1 nie zapisuje zmiennych na stosie, tylko przekazuje je w rejestrach
od R25 do R8, dopiero jak jest ich wicej to na stosie.
To co odkłada na stosie to prolog i epilog funkcji, można to wyłączyć
przez atrybut naked np:
ISR(TIMER0_OVF_vect, ISR_NAKED)
ale wtedy o rejestr stanu i inne rejestry musisz zadbać sam, jAKIE TO JUŻ
Zbych napisał.
--
Pozdr
Janusz
John Smith
Guest
Tue Aug 05, 2014 8:53 am
On 05-08-2014 08:40, konsul41@wp.pl wrote:
Quote:
Użytkownik "pp" <32142134@32213231.pl> napisał w wiadomości
news:lrpaj3$ti1$1@speranza.aioe.org...
Witam
Jak w C (avr-gcc, AVR) wyłączyć zapisywanie zmiennych do stosu (czy
gdzie to tam jest zapisywane) przy wchodzeniu do funkcji i
przywracanie tych zmiennych przy powrocie z funkcji ?
Program nie używa przerwań, więc chyba nie jest to konieczne.
Uzyć asemblera zamiast C lub nie stosować funkcji.
Użyć zmiennych globalnych (poza funkcjami, także poza main) oraz
wszystkie funkcje muszą być postaci:
void funkcja(void)
i wtedy jedyne co ląduje na stosie to adres powrotu funkcji.
Jeśli nawet to jest za dużo, to nie używaj funkcji w ogóle.
K.
A.L.
Guest
Tue Aug 05, 2014 9:06 am
On Tue, 05 Aug 2014 03:04:33 +0200, pp <32142134@32213231.pl> wrote:
Quote:
Witam
Jak w C (avr-gcc, AVR) wyłączyć zapisywanie zmiennych do stosu (czy
gdzie to tam jest zapisywane) przy wchodzeniu do funkcji i przywracanie
tych zmiennych przy powrocie z funkcji ?
Program nie używa przerwań, więc chyba nie jest to konieczne.
Paweł
A gdzie maja byc zapisywane?..
A.L.
pp
Guest
Tue Aug 05, 2014 1:25 pm
Ok, dziękuje wszystkim za odpowiedzi.
pp
Guest
Tue Aug 05, 2014 1:26 pm
konsul41@wp.pl pisze:
Quote:
Uzyć asemblera zamiast C lub nie stosować funkcji.
Asembler jest nie na moją głowę. Używałem trochę asemblera przy 8051 ale
z tym jest chyba jeszcze 2x więcej roboty.
pp
Guest
Tue Aug 05, 2014 1:48 pm
John Smith pisze:
Quote:
Użyć zmiennych globalnych (poza funkcjami, także poza main) oraz
wszystkie funkcje muszą być postaci:
void funkcja(void)
i wtedy jedyne co ląduje na stosie to adres powrotu funkcji.
Ok, dzięki, chyba trochę to pomogło.
Quote:
Jeśli nawet to jest za dużo, to nie używaj funkcji w ogóle.
K.
pp
Guest
Tue Aug 05, 2014 1:52 pm
Zbych pisze:
Quote:
Jak już pytacz chce eksperymentować to może poczytać sobie o atrybucie
OS_task, który tylko blokuje zapamiętywanie stanu rejestrów.
Chyba mam na to za stare avr-gcc - 3.4.3:
warning: `OS_task' attribute directive ignored
Zbych
Guest
Tue Aug 05, 2014 6:21 pm
On 05.08.2014 15:52, pp wrote:
Quote:
Zbych pisze:
Jak już pytacz chce eksperymentować to może poczytać sobie o atrybucie
OS_task, który tylko blokuje zapamiętywanie stanu rejestrów.
Chyba mam na to za stare avr-gcc - 3.4.3:
O kurczę, ale z ciebie kustosz
Aktualna wersja na stronie atmela to 4.7.
pp
Guest
Tue Aug 05, 2014 9:47 pm
Zbych pisze:
Quote:
Chyba mam na to za stare avr-gcc - 3.4.3:
O kurczę, ale z ciebie kustosz
Aktualna wersja na stronie atmela to 4.7.
Chyba więcej kłopotu niż pożytku przy przechodzeniu na nowsze wersje.
Jak coś dobrze działa - wolę tego nie ruszać.
Oprogramowanie linuksowe to jeden wielki burdel.
W ogóle, odnoszę wrażenie, że programiści linuksowi to ludzie
inteligentni inaczej.
Gof
Guest
Wed Aug 06, 2014 11:42 am
pp <32142134@32213231.pl> wrote:
Quote:
Uzyć asemblera zamiast C lub nie stosować funkcji.
Asembler jest nie na moją głowę. Używałem trochę asemblera przy 8051 ale
z tym jest chyba jeszcze 2x więcej roboty.
Czy ja wiem... mi się wydaje, że assembler AVR jest bardziej logiczny, niż
assembler 51.
--
SELECT finger FROM hand WHERE id = 3;
http://www.chmurka.net/
Goto page 1, 2 Next