-
Received: by 10.52.70.173 with SMTP id n13mr1213788vdu.15.1349369400013; Thu, 04 Oct
2012 09:50:00 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.52.70.173 with SMTP id n13mr1213788vdu.15.1349369400013; Thu, 04 Oct
2012 09:50:00 -0700 (PDT)
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!goblin2!goblin.stu.neva.ru!xlned.com!feeder7.xlned.com!news2.euro.net!
209.197.12.246.MISMATCH!nx02.iad01.newshosting.com!newshosting.com!216.196.98.1
42.MISMATCH!border3.nntp.dca.giganews.com!border1.nntp.dca.giganews.com!nntp.gi
ganews.com!l8no24712446qao.0!news-out.google.com!e10ni165558057qan.0!nntp.googl
e.com!l8no25223103qao.0!postnews.google.com!p5g2000vbl.googlegroups.com!not-for
-mail
Newsgroups: pl.misc.elektronika
Date: Thu, 4 Oct 2012 09:49:59 -0700 (PDT)
Complaints-To: g...@g...com
Injection-Info: p5g2000vbl.googlegroups.com; posting-host=80.109.193.38;
posting-account=LtRNCAoAAAACVwjGJC66ygSl50zdeDtv
NNTP-Posting-Host: 80.109.193.38
References: <506d9da7$0$26696$65785112@news.neostrada.pl>
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64;
Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET
CLR 3.0.30729; Media Center PC 6.0; .NET4.0C),gzip(gfe)
Message-ID: <5...@p...googlegroups.com>
Subject: Re: WinAVR, jak zmienić funkcję obsługi przerwania w trakcie wykonywania
programu
From: Marcin <m...@o...pl>
Injection-Date: Thu, 04 Oct 2012 16:50:00 +0000
Content-Type: text/plain; charset=ISO-8859-1
Lines: 92
Xref: news-archive.icm.edu.pl pl.misc.elektronika:636191
[ ukryj nagłówki ]Witam,
do zmiany "w locie" cu wykonuje sie w przerwaniu dobrze sie
wykorzystuje wskaznik do funkcji.
Zadeklaruj sobie zmienna typu wskaznik do funkcji w pliku, gdzie masz
obsluge przerwania . Dodatkowo, w tym samym pliku stworz funkcje
SetIrqHandler(), ktorej parameterm jest wskaznik na funkcje.
W samym przerwaniu wywolujesz funkcje przez jej wskaznik.
na szybko cos podobnego do:
static void(*pIrqHandler)(void);
/** @file main.c */
// zmienna globalna dla tego pliku, niedostpena z innych modulow
static void (*pIrqHandler)(void);
// funkcja do inicjalizacji wskaznika do funkcji, exportowana w irq.h
void SetIrqHandler(void( *pNewHandler)(void))
{
pIrqHandler = pNewHandler;
}
/**
to wlasciwa funkcja przerwania SIGNAL (SIG_OVERFLOW1)
ale nie mam WinAvr zeby calosc kompilowac, testowalam
poprawnosc skladni na Yagarto
*/
//SIGNAL (SIG_OVERFLOW1)
void Doirq(void)
{
pIrqHandler();
}
/****************************/
int EnableIrq()
{
return 0;
}
int DisableIrq()
{
return 0;
}
void f1(void)
{
// zrob cos
}
void f2(void)
{
// zrob co innego
}
void main1 (void)
{
StandardowaInicjalizacja();
SetIrqHandler(f1);
EnableIrq();
while(1)
{
// zrob co trzeba
// a jak dojdziesz ze irq ma robic co innego to:
// to tylko do testow, normalnie funkcja wywolana przez
hardware irq
Doirq();
DisableIrq();
SetIrqHandler(f1);
EnableIrg();
// to tylko do testow, normalnie funkcja wywolana przez
hardware irq
Doirq();
// kontynuuj z main
}
}
mankament jaki widze, to to ze obsluga przerwania wydluzy sie o
wywolanie kolejnej funkcji oraz odlozy troche na stos.
Ogowlnie, wskazniki do funkcji to bardzo uzyteczna rzecz, np. tablica
takich wskaznikow zastepuje swietnie skomplikowane if czy switch no i
mozna zmieniac je podczas dzialania programu
Następne wpisy z tego wątku
Najnowsze wątki z tej grupy
- T-1000 was here
- Ściąganie hasła frezem
- Koszyk okrągły, walec 3x AA, na duże paluszki R6
- Brak bolca ochronnego ładowarki oznacza pożar
- AMS spalony szybkim zasilaczem USB
- stalowe bezpieczniki
- Wyświtlacz ramki cyfrowej
- bateria na żądanie
- pradnica krokowa
- Nieustający podziw...
- Coś dusi.
- akumulator napięcie 12.0v
- Podłączenie DMA 8257 do 8085
- pozew za naprawę sprzętu na youtube
- gasik
Najnowsze wątki
- 2025-02-03 Gliwice => IT Expert (Network Systems area) <=
- 2025-02-03 Lublin => Delphi Programmer <=
- 2025-02-03 Lublin => Programista Delphi <=
- 2025-02-03 Warszawa => QA Engineer <=
- 2025-02-03 Mińsk Mazowiecki => Area Sales Manager OZE <=
- 2025-02-03 Warszawa => Spedytor Międzynarodowy <=
- 2025-02-03 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-02-03 Kraków => iOS Developer (Swift experience) <=
- 2025-02-03 Gdańsk => Specjalista ds. Sprzedaży <=
- 2025-02-03 Warszawa => QA Engineer (Quality Assurance) <=
- 2025-02-03 Katowice => Key Account Manager (ERP) <=
- 2025-02-03 Pies z kulawą nogą nie kupi twojego elektryka
- 2025-02-01 "Nie kupujcie samochodów elektrycznych
- 2025-02-01 jakie małe auto duże w środku :-)
- 2025-02-01 Re: pytanie do oponiarzy lub szybkojeżdzących (opony Hankook Ventus Prime, S1 Evo, alternatywy)