je to hned při přijetí volacího znaku # nebo az po prijeti # na zacatku stringu a jeho ukonceni CRLF? Co se stane když se přeplni buffer.
V programu je oblast, ve které musím vypínat přerušení na dobu 150 až 380ms. Celková smyčka je pak kolem 300-500ms. Co se stane s obsahem který dorazí zrovna v tuto dobu?
Data mi chodí, ale někdy jsou neúplná.
Děkuji za odpověď
1. Program skočí na Serial0charmatch hned jak znak dorazí na uart.
2. Buffered serialin používá přerušení RX. Po dobu jeho vypnutí jsou přijaté znaky ztracené.
PS
citace:
V programu je oblast, ve které musím vypínat přerušení na dobu 150 až 380ms. Celková smyčka je pak kolem 300-500ms.
Obávám se, že to asi nebude možne, je to oblast kde zrovna komunikuje pres 1wire (11 čidel DS18B20 ve 12b rozliseni) a I2C (RTC) a ty odskoky na serial0charmatch mu nedelají dobre Myslel jsem, že bych vyprázdnil buffer každou smyčkou. Ta je bohužel dost dlouhá a pres uart by mohlo najednou prijít víc bytů než je schopny pojmout do vyprazdneni. Stejne by to ale asi nepomohlo. Je nejaká možnost jak by to šlo pořešit?
Jo a pres uart komunikuje s minimálně jedním externím zařízením přes obousměrný RF modul od Hope... aby jste byli v obraze...
K té první části odpovědi.. to znamená, že když bude pod serial0charmatch: hned prikaz input nejaky_string tak se do toho stringu nakopirujou jen data která mezi tím stihla dorazit nebo čeká až na crlf na konci stringu tak jak je to v config input? je v pohodě hned za prikaz Input nejaky_ string napsat clear serialin? co presne udelá clear serialin?
to znamená, že když bude pod serial0charmatch: hned prikaz input nejaky_string tak se do toho stringu nakopirujou jen data která mezi tím stihla dorazit nebo čeká až na crlf na konci stringu tak jak je to v config input?
Příkaz Input string ukládá bajty do "string" dokud nepřijde crlf. Mazat serial buffer je zbytečné, je to kruhový buffer, který nemůže přetéct.
Otázka se teď už netýká konkrétně Bascomu, ale spíš problému jak přijímat z uart během komunikace 1wire, která zřejmě nesmí být přerušovaná.
Můžeme třeba zavést do uart nějaký "handshaking".
Např vysilač když má zprávu, vyšle '#'.
Pak čeká na povolení vysílat, třeba '$'.
Povolení mu pošleme až bude hlavní program volný.
(Může to být i mezi jednotlivými příkazy 1wire. To vše samozřejmě bez přerušení.)
Pro nějakou konkrétní radu známe málo podrobností.
jj tohle mne taky napadlo, zatim jsem nerealizoval. Pravdepodobne by to mohlo fungovat i s docela slušnou odezvou. Vyzkousim to nacpat mezi prikazy pro ty cidla. Díky za dobrou radu.
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.