AVR-GCC i =?ISO-8859-2?Q?obs=B3uga_przerwa=F1?=



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kurczyk <grzegorz.haha_at_nospam_haha.control.slupsk.pl>
Subject: AVR-GCC i =?ISO-8859-2?Q?obs=B3uga_przerwa=F1?=
Date: Thu, 15 Jul 2004 14:14:59 +0200


Witam
Jak w gcc pozbyć się prologu i epilogu w obsłudze przerwania ?

***********
73:koderrc.c ** SIGNAL(SIG_OUTPUT_COMPARE1A)
170 .LM19:
171 /* prologue: frame size=0 */
172 0064 1F92 push _zero_reg_
173 0066 0F92 push _tmp_reg_
174 0068 0FB6 in _tmp_reg_, _SREG_
175 006a 0F92 push _tmp_reg_
176 006c 1124 clr _zero_reg_
177 /* prologue end (size=5) */
74:koderrc.c ** cbi(PORTB, PB3);
179 .LM20:
180 006e C398 cbi 56-0x20,3
75:koderrc.c ** }
182 .LM21:
183 /* epilogue: frame size=0 */
184 0070 0F90 pop _tmp_reg_
185 0072 0FBE out _SREG_, _tmp_reg_
186 0074 0F90 pop _tmp_reg_
187 0076 1F90 pop _zero_reg_
188 0078 1895 reti
*****************

w sumie wystarczyłoby
180 006e C398 cbi 56-0x20,3
188 0078 1895 reti

a zależy mi na jak najszybszym wykasowaniu tego bitu po przyjściu
przerwania. Możeby jakąś wstawkę assemblerową zrobić, tylko nie wiem jak
to wkleić w obsugę przerwania.

Pozdrawiam
Grzegorz Kurczyk

========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Wojtek Kaniewski <wojtekka_at_nospam_SPAM.SPAM.SPAM>
Subject: Re: AVR-GCC i =?ISO-8859-2?Q?obs=B3uga_przerwa=F1?=
Date: Thu, 15 Jul 2004 14:45:23 +0200


Grzegorz Kurczyk wrote:
a zależy mi na jak najszybszym wykasowaniu tego bitu po przyjściu
przerwania. Możeby jakąś wstawkę assemblerową zrobić, tylko nie wiem jak
to wkleić w obsugę przerwania.

void SIG_OUTPUT_COMPARE1A(void) _attribute_ ((naked));

void SIG_OUTPUT_COMPARE1A(void)
{
_asm_ _volatile_ ("cbi 56-0x20,3\n"
"reti\n" ::);
}

w.


========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Jurek Szczesiul <jerzy.szczesiul_at_nospam_wycin.ep.com.pl>
Subject: Re: AVR-GCC i =?ISO-8859-2?Q?obs=B3uga_przerwa=F1?=
Date: Thu, 15 Jul 2004 19:33:46 +0200


Thu, 15 Jul 2004 14:45:23 +0200, na pl.misc.elektronika, Wojtek Kaniewski
napisał(a):

Grzegorz Kurczyk wrote:
a zależy mi na jak najszybszym wykasowaniu tego bitu po przyjściu
przerwania. Możeby jakąś wstawkę assemblerową zrobić, tylko nie wiem jak
to wkleić w obsugę przerwania.

void SIG_OUTPUT_COMPARE1A(void) _attribute_ ((naked));

Dzięki za przypomnienie o naked - zupełnie mi wypadło z głowy.

BTW - obie metody działają dobrze - można sobie wybrać wg preferencji.
Wersja z naked jest szybka i zgrabna, natomiast oddzielny asm pozwala
uniknąć barokowej składni inline-asm i korzystać z preprocesora :

<>
// plik przerwań asemblerowych
#define __SFR_OFFSET 0
#include <avr\io.h>
.section .text
.global SIG_OUTPUT_COMPARE1A
SIG_OUTPUT_COMPARE1A:
cbi PORTB,3
reti
</>

--
Pozdrowienia
Jurek Szczesiul

========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.atman.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Grzegorz Kurczyk <grzegorz.haha_at_nospam_haha.control.slupsk.pl>
Subject: Re: AVR-GCC i =?ISO-8859-2?Q?obs=B3uga_przerwa=F1?=
Date: Fri, 16 Jul 2004 11:15:24 +0200


Użytkownik Wojtek Kaniewski napisał:
void SIG_OUTPUT_COMPARE1A(void) _attribute_ ((naked));
void SIG_OUTPUT_COMPARE1A(void)

Działa !!! Dzięki serdeczne !!!

Pozdrawiam
Grzegorz Kurczyk

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Jurek Szczesiul <jerzy.szczesiul_at_nospam_wycin.ep.com.pl>
Subject: Re: AVR-GCC i =?ISO-8859-2?Q?obs=B3uga_przerwa=F1?=
Date: Thu, 15 Jul 2004 14:47:08 +0200


Thu, 15 Jul 2004 14:14:59 +0200, na pl.misc.elektronika, Grzegorz Kurczyk
napisał(a):
Jak w gcc pozbyć się prologu i epilogu w obsłudze przerwania ?

AFAIK tylko pisząc obsługę w asemblerze w oddzielnych modułach .S
( ale nie próbowałem )

--
Pozdrowienia
Jurek Szczesiul

========
Path: news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.media.kyoto-u.ac.jp!newsfeed-east.nntpserver.com!nntpserver.com!border1.nntp.dca.giganews.com!nntp.giganews.com!pd7cy2so!shaw.ca!pd7tw3no.POSTED!53ab2750!not-for-mail
X-Trace-PostClient-IP: 24.69.9.8