eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › WinAvr tablica wskaźników funkcji jak?
Ilość wypowiedzi w tym wątku: 5

  • 1. Data: 2009-04-21 19:12:22
    Temat: WinAvr tablica wskaźników funkcji jak?
    Od: "azazel" <k...@o...pl>

    Witam

    Chciałbym umiescic sobie w pamieci flash np atmega128 tablice wskaźników do
    funkcji
    , aby być w stanie uruchamiac procedury mając tylko pozycje w tablicy.

    Ma to być program odbierajacy dane z RS232 i uruchamiajacy procedury bez
    zbednego "switch'owania"

    udało mi sie stworzyc taka tablice i wywoływanie po numerze z pamieci ram
    ale nie wiem jak to umiescic w pamieci flash i uruchamiac procedury majac
    tylko pozycje

    Może ktoś z szanownych grupowiczów wie
    jak to umieścić i jak wywołac?

    Pozdrawiam
    Janusz Brela



  • 2. Data: 2009-04-21 19:16:57
    Temat: Re: WinAvr tablica wskaźników funkcji jak?
    Od: "Nickelodeon" <N...@...b>


    "azazel" <k...@o...pl> wrote in message
    news:gsl6c8$b2$1@nemesis.news.neostrada.pl...

    > Może ktoś z szanownych grupowiczów wie
    > jak to umieścić i jak wywołac?
    >


    .org 0x0200

    nop
    ldi r16,0
    ....

    org 0x0400
    nop
    nop
    nop
    itd

    pamietaj, że adres we flashu jest wyższy o połowę niż zadeklarujesz, bo
    adresujesz 16bitowo



  • 3. Data: 2009-04-21 19:24:20
    Temat: Re: WinAvr tablica wskaźników funkcji jak?
    Od: "azazel" <k...@o...pl>

    dziekuje bardzo za szybką odpowiedź
    ale mi chodziło jak to zrobic w jezyku C

    Pozdrawiam
    Janusz Brela



  • 4. Data: 2009-04-21 19:35:04
    Temat: Re: WinAvr tablica wskaźników funkcji jak?
    Od: Zbych <a...@o...pl>

    azazel pisze:

    > udało mi sie stworzyc taka tablice i wywoływanie po numerze z pamieci ram
    > ale nie wiem jak to umiescic w pamieci flash i uruchamiac procedury majac
    > tylko pozycje
    [...]
    > Może ktoś z szanownych grupowiczów wie
    > jak to umieścić i jak wywołac?

    Tablicę wskaźników do funkcji umieszczasz we flashu tak samo jak każdą
    inną stałą - dodając PROGMEM.
    http://www.nongnu.org/avr-libc/user-manual/group__av
    r__pgmspace.html

    Wywoływanie jest trochę bardziej upierdliwe. Najpierw musisz obliczyć
    adres wskaźnika we flashu, potem podać adres do makra pgm_read_word i
    dopiero mając wskaźnik możesz użyć go do wywołania funkcji.


  • 5. Data: 2009-04-21 20:07:30
    Temat: Re: WinAvr tablica wskaźników funkcji jak?
    Od: Zbych <a...@o...pl>

    Zbych pisze:
    > azazel pisze:
    >
    >> udało mi sie stworzyc taka tablice i wywoływanie po numerze z pamieci ram
    >> ale nie wiem jak to umiescic w pamieci flash i uruchamiac procedury
    >> majac tylko pozycje
    > [...]
    >> Może ktoś z szanownych grupowiczów wie
    >> jak to umieścić i jak wywołac?
    >
    > Tablicę wskaźników do funkcji umieszczasz we flashu tak samo jak każdą
    > inną stałą - dodając PROGMEM.
    > http://www.nongnu.org/avr-libc/user-manual/group__av
    r__pgmspace.html
    >
    > Wywoływanie jest trochę bardziej upierdliwe. Najpierw musisz obliczyć
    > adres wskaźnika we flashu, potem podać adres do makra pgm_read_word i
    > dopiero mając wskaźnik możesz użyć go do wywołania funkcji.
    >

    Tutaj masz przykład:

    #include <avr/io.h>
    #include <avr/pgmspace.h>


    void a( void ){
    PORTC = 0xFF;
    }

    void b( void ){
    PORTC = 0x00;
    }


    typedef void (*fp)(void);

    const PROGMEM fp Tab[]={&a,&b};


    void main( void ){

    ((fp)pgm_read_word(&Tab[0]))();
    ((fp)pgm_read_word(&Tab[1]))();
    }

strony : [ 1 ]


Szukaj w grupach

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: