
Nä, men har du gott om RAM-minne så är ju en buffert alltid bra att lagra data i under tiden som det läses in. Du läser in data med hjälp av interrupt (förstås?) och då kan det ju ligga där i evighet i princip...
En metod jag har använt är att varje dataström alltid inleds med ett tecken (i mitt fall '$'). Alltså:
$CMD | SIZE | DATA | CHKSUM
Det förutsätter att dollartecknet inte kan finnas med i datan någon annanstans (en stor begränsning, men i mitt fall körde jag ascii och då går det bra).
Jag gjorde så att inläsarrutinen ignorerar alla tecken ända tills ett '$'-tecken kommer in. Då sätts buffertpekaren till noll och den börjar fylla på. Detta fortsätter tills:
a) buffert full -> fel - töm, vänta på nytt '$'
b) nytt '$' -> börja om.
c) alla tecken inlästa. Sätt flagga.
Den här metoden fungerar även med långsamma sändare som har rejäla pasuer mitt i dataflödet.
Timeout-metoden kräver ju att sändaren håller en viss lägsta hastighet.
Om man nu inte vill ha ett unikt starttecken måste dataflödet istället regleras med pauser. Vi antar att en paus på >10ms innebär nystart. Jag har aldrig implemeterat detta, men kan det vara en väg att gå att du nollar en timer varje gång ett tecken kommer in. När nästa tecken kommer kollar du att timern inte nått owerflow. Om den gjort det så anses det vara första byten oavsett hur många som inkommit innan. Verkar det vettigt?
(Ämnet intresserar mig mycket, då det inte är särskilt ovanligt att man vill kommunicera med en massa data)