-
1. Data: 2014-08-05 03:04:33
Temat: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: pp <3...@3...pl>
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ł
-
2. Data: 2014-08-05 08:40:29
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: <k...@w...pl>
Użytkownik "pp" <3...@3...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.
-
3. Data: 2014-08-05 08:48:05
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: Zbych <z...@o...pl>
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
> Program nie używa przerwań, więc chyba nie jest to konieczne.
To nie ma nic do rzeczy.
-
4. Data: 2014-08-05 08:52:57
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: JDX <j...@o...pl>
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".
-
5. Data: 2014-08-05 09:32:05
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: Zbych <z...@o...pl>
W dniu 2014-08-05 08:52, JDX pisze:
> 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-R27,
R30, R31 jeśli zostały zmienione i na koniec ręcznie wstawić rozkaz
powrotu z funkcji. Raczej nie jest to wygodny przepis na usunięcie
"niepotrzebnych" push/pop.
Jak już pytacz chce eksperymentować to może poczytać sobie o atrybucie
OS_task, który tylko blokuje zapamiętywanie stanu rejestrów.
-
6. Data: 2014-08-05 10:50:04
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: janusz_k <J...@o...pl>
W dniu 05.08.2014 o 03:04 pp <3...@3...pl> 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 ?
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
-
7. Data: 2014-08-05 10:53:14
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: John Smith <d...@b...pl>
On 05-08-2014 08:40, k...@w...pl wrote:
>
> Użytkownik "pp" <3...@3...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.
-
8. Data: 2014-08-05 11:06:20
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: A.L. <a...@a...com>
On Tue, 05 Aug 2014 03:04:33 +0200, pp <3...@3...pl> wrote:
>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.
-
9. Data: 2014-08-05 15:25:15
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: pp <3...@3...pl>
Ok, dziękuje wszystkim za odpowiedzi.
-
10. Data: 2014-08-05 15:26:24
Temat: Re: C, AVR - funkcja - wyłączenie zapisywania/przywracania zmiennych przy we/we
Od: pp <3...@3...pl>
k...@w...pl pisze:
> 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.