Packetova komunikace pro MCU (AVR)

Jiri Bezstarosti jiri@bezstarosti.cz
Sobota Srpen 5 13:18:20 CEST 2006


No ale kdyz Vam na tohle nekdo odpovi, pak uz zbytek je jen prazdny MCU. 
Takze co vlastne budete delat Vy, az Vam vsechno vymyslime :))) ?

Ale abych byl trosku vazny.

Pokud si muzete komunikovat jak chcete, da se to udelat opravdu mnoha 
zpusoby. Napriklad prenasite jen citelne ASCII znaky, muzete na zacatek 
pred kazdy takovy paket dat znak STX (2) a na konec ETX(3). Tim poznate 
zacatek a konec paketu. Pokud chcete kontrolni soucet, proste si 
spocitate kontrolni soucet (soucet vsech znaku v paketu bez ETX a STX) a 
soupnete ho pred ETX. Muzete to jeste vylepsit tim, ze pokud je 
kontrolni soucet roven 2 nebo 3, posilate jeho bitovou inverzi atp. 
Pokud chcete zachovat format cele zpravy jako ASCII citelne znaky, 
muzete posilat ASCII vyjadreni kontrolniho souctu v hexadecimalnim 
vypisu. A mate cely protokol. Co je v nem kde uz je Vase vec, jak si to 
rozclenite. Take muzete nekde posilat pro kontrolu kolik je dat v paketu 
atd. atp.

Pokud chcete posilat jakekoli znaky a i tak chcete poznat zacatek a 
konec nejakeho paketu, pak si muzete zvolit jeden znak, ktery se posila 
jinak. To jinak znamena, ze si zvolite treba znak 0xA5. Tento znak 
vysilam jako dva znaky, treba 0xA5,0x5A a pokud je to znak ridici, pak 
poslu treba 0xA5,0x00 pro start, pro konec 0xA5,0xFF a mam spoustu mista 
i pro dalsi mozne ridici znaky. Ostatni znaky pak posilam normalne.

Kolik dat bufferovat a jak, tak to uz je opravdu otazka konkretni 
aplikace. Nektere aplikace ihned vedi co se kterym bajtem udelat a 
nektere to vi az po prijeti x bajtu. Pokud chcete komunikovat paketove, 
pak je pravdepodobne, ze alespon jeden uz cely prijaty paket budete 
nejak zpracovavat, zatim co se muze prijimat nejaky dalsi.

Co se tyce konstrukce programu, muze to byt treba kruhovy buffer, ktery 
uklada co se prijme v preruseni do pameti a ma ukazatele do tohoto 
bufferu. V preruseni se posouva jeden ukazatel, ktery ukazuje, kam 
ulozil posledni prijaty bajt. Program ktery zpracovava (uz nemusi bezet 
v preruseni od seriaku) si ta data "louska" a posunuje ukazatel zacatku 
platnych, nebo chcete-li nezpracovanych dat. No a pokud chcete nejake 
timeouty, tak si muzete treba po kazdem prijmu natahnout timer a kdyz se 
do jeho tiknuti (nebo x-teho jeho tiknuti) vyvola preruseni, osetrujete 
neprijeti dat do nejakeho casu. Nebo muzete natahnout timer na pocatku 
paketu a treba osetrovat neprijeti celeho paketu do nejakeho casu, kdyz 
konec paketu ten timer zase nevypne.

Ale jak pisu, moznosti jsou tuny a pro ruzne aplikace se mohou hodit 
ruzne zpusoby prace s daty.

--
Jiri Bezstarosti

GT5 napsal(a):

>Zdravim,
>potreboval bych poradit jak strukturovat program mikroprocesoru pro 
>packetovou komunikaci. (PC - MCU). Je celkem jedno jaky jednocip, spis 
>mne zajima princip a rad bych to psal v C. Tech protokolu je hodne moc, 
>ale stejne je to na jedno brdo. Mam predstavu...nejaka hlavicka, ridici 
>kod, data, crc, popripade konec packetu.
>Je to uz docela slozite , kdyz to ma komunikovat ve vyssich rychlostech 
>a musi se osetrovat vse od prijmu packetu az po vyssi vrstvy prenosu.
>Idealni by bylo kdyby se povedlo i implementovat timeouty. Jeste jsem 
>zapomnel dodat ze PC bude master, slave spis bude plnit rozkazy a odpovidat.
>
>Konkretne me zajima jak a kam ukladat data z uartu, v jakem mnozstvi asi 
>tak. Pak dale odkud volat nejakou proceduru na rozeznani a testovani 
>spravnosti packetu. A v posledni rade nejakou vykonavaci proceduru ktera 
>podle ridicich kodu pouzije data a vykona danou funkci. Pak posle 
>odpoved zpet,taktez v packetu.
>
>LPR
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list@list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list
>
>
>  
>





Další informace o konferenci Hw-list