Suhtlemine mitme serial-seadmega korraga
#2
Kas FIFO-ga (First In, First Out) oled tuttav? Seda võib nimetada ka ringpuhvriks, sest softis tehtud FIFO on sisult ringpuhver. Nimi reedab olemuse - välja võetakse andmed samas järjekorras, mis nad sinna sisse pandi, ehk ingliskeelne otsetõlge - esimesena sisse ja esimesena välja.

Seda võib teha näiteks kolme muutuja:
Kood:
    head: byte            //  järgmine positsioon kirjutamiseks cbuffer-is.
    tail: byte            // järgmine positsioon lugemiseks cbuffer-is
    cbuffer: array of 256 bytes    // puhvri sisu
ja järgmiste definitsioonide abil (pseudokood):
Kood:
    // Kas FIFO on tyhi?
    is_empty:
        head = tail
    // Kas FIFO on täis?
    is_full:
        tail + 1 = head

    // Lisada täht FIFO-sse. NB! FIFO ei tohi olla täis!
    push char:
        cbuffer[head] <- char
        head <- (head + 1) % sizeof(cbuffer)

    // Eemaldada täht FIFO-st. NB! FIFO ei tohi olla tühi!
    pop:
        return_value <- cbuffer[tail]
        tail <- tail + 1
        return-value

Olgu näiteks kontrolleriplokile vaja saata baite 3ms vahedega. Kas poleks katkestuses
mugav kasutada alamfunktsiooni "slow_send (char)", mis char'i paneb kuskile nurka
oma aega ootama ja pöördub kiiresti tagasi, et katkestus saaks oma asjadega edasi tegelda?
Milal see "oma aeg" tuleb, seda saab aga määrata 3ms perioodiga taimeri katkestusega.
Selline alamfunktsioon, mis selle nurgana kasutab FIFO-t ja saatmiseks taimerit,
näeks pseudokoodis välja järgmine:
Kood:
    slow_send char:
        push char
    
    timer_at_3ms_interval:
        if not is_empty then
            char <- pop
            write_uart_data_register char
            // NB! kirjutamise lõppu ei pea ootama (3ms on niigi varu).
        end if

Peakontrolleri kaudu toimetamiseks on sarnane nipp, ainult et taimeri katkestamise asemel kasutatakse kahte UART-i enda geneeeritud "andmete puhver tühi" ja/või "kõik bitid saadetud" katkestust. See on veidi keerulisem, aga mitte liiga.
Vasta


Sõnumeid selles teemas
Suhtlemine mitme serial-seadmega korraga - Autor: felch - 07-12-2012, 09:46 PM
RE: Suhtlemine mitme serial-seadmega korraga - Autor: andrei - 09-12-2012, 01:16 AM
RE: Suhtlemine mitme serial-seadmega korraga - Autor: felch - 10-12-2012, 08:56 PM
RE: Suhtlemine mitme serial-seadmega korraga - Autor: felch - 10-12-2012, 11:08 PM
RE: Suhtlemine mitme serial-seadmega korraga - Autor: madis - 11-12-2012, 02:26 AM
RE: Suhtlemine mitme serial-seadmega korraga - Autor: felch - 12-12-2012, 08:47 AM
RE: Suhtlemine mitme serial-seadmega korraga - Autor: felch - 19-12-2012, 07:44 PM

Alamfoorumi hüpe:


Kasutaja, kes vaatavad seda teemat: 2 külali(st)ne