[an error occurred while processing this directive]
ну а дальше вот так вот...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено UraGun 20 июля 2006 г. 15:41
В ответ на: приблизительно вот так+ отправлено UraGun 20 июля 2006 г. 15:40


void sendto(byte node, void *p, byte len, byte ses)
{
tHdr h;
byte i, crc = 0, *b;
h.dstAddr = node;
h.srcAddr = M_ADDR;
h.Cmd = cmQuery;
h.Session = ses;
b = (byte *)&h;
for (i = 0; i < sizeof(h); i++)
com_putchar(dowcrc(b[i], crc));
b = (byte *)p;
for (i = 0; i < len; i++)
com_putchar(dowcrc(b[i], crc));
com_putchar(crc);
com_send();
while (!ERX) net_idle();
}

byte ei;

bool recv(byte node, void *p, byte len, byte &ses)
{
byte i = 0, s, ch, crc;
word t0 = GetMsTicks();
extern byte test,test1;

len += sizeof(tHdr);

while (i <= (len+1)) {
while (!com_getchar(ch)) {
if ((GetMsTicks()-t0) > 10) {
ei = i;
test++;
return false;
}
else {
net_idle(); }
}
switch (i)
{
case 0:

if (ch == M_ADDR) {
crc = 0; i++;
dowcrc(ch, crc);
} else i = 0;
break;
case 1:
if (ch == node) {
dowcrc(ch, crc); i++;
} else i = 0;
break;
case 2:
if (ch == cmQuery) {
dowcrc(ch, crc); i++;
} else i = 0;
break;
case 3:
s = dowcrc(ch, crc); i++;
break;
default:
if (i < len) {
((byte *)p)[i-sizeof(tHdr)] = dowcrc(ch, crc);
i++;
} else {
if (ch == crc) {
ses = s;
test1++;
return true;
}
else
i = 0;
}
}
}
return false;
}

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание