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