eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaWinAVR, jak zmienić funkcję obsługi przerwania w trakcie wykonywania programu › Re: WinAVR, jak zmienić funkcję obsługi przerwania w trakcie wykonywania programu
  • Data: 2012-10-04 18:49:59
    Temat: Re: WinAVR, jak zmienić funkcję obsługi przerwania w trakcie wykonywania programu
    Od: Marcin <m...@o...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie 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

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: