Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Atmega][C] bufor na wskaźnikach

stanboleyn 09 Oct 2008 13:29 1791 4
  • #1
    stanboleyn
    Level 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
  • #3
    stanboleyn
    Level 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...
  • #4
    Freddie Chopin
    MCUs specialist
    tak czy siak musisz zadeklarowac miejsce dla tego bufora - statycznie tablica, lub dynamicznie - malloc().

    zalozmy ze statycznie:

    na poczatku deklaracja:

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


    potem setup:

    Code:
    buf_in=bufor;
    
    buf_out=bufor;


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

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


    Code:
    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
    stanboleyn
    Level 10  
    bardzo dziękuję Freddie Chopin :) wersja z kontrolą stanu zapełnienia brzmi ciekawie ... zastanowie się nad tym :)

    Regulamin p.10.2 - zamykam.
    [zumek]