NewSoftSerial ja pidempi sarjaliikenteen lukeminen

On pieniä ongelmia Arduinon NewSoftSerial -kanssa.

Luen radiomodeemilta tietoa, ja homma menee ihan ok lauseella

while (m32_serial.available())
m32_serial.read();

Niin kauan kunnes luettava laite puskee enempi dataa. Luulen, että sarjaliikenteen
input-bufferi tai vastaava tulee täyteen, sillä luku tyssää parinsadan merkin lukemisen
jälkeen.

Olisiko ideoita tällä oirekuvauksella?

Pikaisesti vilkaisin, että tuolla on rengasbufferi, jonka ei pitäisi särkyä. Bufferin voi resetoida .flush()illa. Jos tuo kuitenkin särkyy, onko mahdollista, että reppana ei jaksa potkia tarpeeksi vauhdikkaasti itseään eteenpäin ja bufferi täyttyy. Tiputa yhteysvauhti johonkin hitaaseen ja yritä sitten jos datan parsiminen ei aiheuta hikkaa.

Vika voi olla myös siinä, että funktio, joka lukee puskuria, ei ole loopin sisällä eli ohjelman runko on suunnilleen näin

loop()

if valinta=1
tarkista_operaattori();
if valinta=2
lue_saapuneet_viestit();
it valinta=3
tee_jotainmuuta;

end loop

Pääluuppi siis pyörii koko ajan, ja ongelmani voi hyvin liittyä tähän pyöritykseen. Jos laitan lue_saapuneet suoraan pääluuppiin ilman mitään muuta, niin homma toimii.

Yksi vaihtoehto olisi tutkia, miten tähän tehdään köyhän miehen multitasking, jolla jaetaan aikaa eri funktioden suoritukseen.