RTV forum PL | NewsGroups PL

Jak wyłączyć zapisywanie zmiennych do stosu w funkcjach C na AVR bez przerwań?

C, AVR - funkcja - wyłączenie zapisywania/p rzywracania zmie

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wyłączyć zapisywanie zmiennych do stosu w funkcjach C na AVR bez przerwań?

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 Smile
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 Smile
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

elektroda NewsGroups Forum Index - Elektronika Polska - Jak wyłączyć zapisywanie zmiennych do stosu w funkcjach C na AVR bez przerwań?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map