logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega][C] bufor na wskaźnikach

stanboleyn 09 Paź 2008 13:29 1854 4
REKLAMA
  • #1 5614797
    stanboleyn
    Poziom 10  
    Witam,

    mam być może banalne pytanie :

    jak zrobić w winavr bufor o długości powiedzmy 5 bajtów z wykorzystaniem 2 wskaźników?

    pozdrawiam,

    stanboleyn
  • REKLAMA
  • REKLAMA
  • #3 5614875
    stanboleyn
    Poziom 10  
    Hmm dostałem taką odp na jednym z forów :

    "Set up a buffer of length 5 bytes using two pointers. One indicates where the buffer starts, the other indicates the next vacant slot."

    Więc w wolnym tłumaczeniu opisałem to w 1 poście :)

    Ponieważ też jestem lekko zdziwiony postanowiłem zapytać tutaj.

    Ogólnie ma to być bufor dla danych przychodzących z portu RS-232...
  • REKLAMA
  • #4 5614896
    Freddie Chopin
    Specjalista - Mikrokontrolery
    tak czy siak musisz zadeklarowac miejsce dla tego bufora - statycznie tablica, lub dynamicznie - malloc().

    zalozmy ze statycznie:

    na poczatku deklaracja:

    char bufor[5];
    char *buf_in,*buf_out;


    potem setup:

    buf_in=bufor;
    buf_out=bufor;


    teraz sprawe mozna rozwiazac dwojako, zwykle tworzy sie dedykowane funkcje zapisu i odczytu do bufora:

    void FIFO_write(char data)
    {
    *buf_in++=data;
    if((int)buf_in>(int)&bufor[4])
    buf_in=bufor;
    }


    char FIFO_read(void)
    {
    char data;
    
    data=*buf_out++;
    if((int)buf_out>(int)&bufor[4])
    buf_out=bufor;
    
    return data;
    }


    to jest super prosta wersja. mozna ja rozbudowac o kontrole stanu zapelnienia i wyczerpania bufora. zasadniczo, nalezy sprawdzac czy przypadkiem po powiekszeniu (i ewentualnym przewinieciu na poczatek) wskaznika nie bedzie on rowny drugiemu wskaznikowi, co oznaczaloby, ze bufor jest calkowicie zapelniony. sprawe calkowitego wyczerpania bufora realizuje sie podobnie - jesli obydwa wskazniki sa sobie rowne, oznacza to, ze bufor jest calkowicie pusty.

    4\/3!!
  • #5 5614918
    stanboleyn
    Poziom 10  
    bardzo dziękuję Freddie Chopin :) wersja z kontrolą stanu zapełnienia brzmi ciekawie ... zastanowie się nad tym :)

    Regulamin p.10.2 - zamykam.
    [zumek]
REKLAMA