DM642 на evalution board
При передаче данных от target-устройства (evalution board) на host-устройство (PC) с помощью программы приведённой ниже происходит потеря блоков (пакетов) данных. Например в данном случае, от target-а передаются 1000 блоков (один блок данных передаётся за один вызов функции RTDX_write) по 512 байт каждый. Но на host-е принимаются только порядка 100 блоков данных, а остальные 900 блоков где-то теряются по дороге. Есть подозрение, что это происходит из-за того, что процессор работает гораздо быстрее, чем блоки данных успевают передаваться по каналу, из-за этого некоторые пакеты накладываются друг на друга, что и привожит к их потере. По идее строка
while ( RTDX_writing != NULL );
должна предотвращать это, но, видимо, она работает некорректно. В чём здесь дело и как этого избежать? Может быть кто-то сталкивался с подобной ситуацией?
#include "rtdx.h"
#include "stdlib.h"// declare a output RTDX channel
RTDX_CreateOutputChannel( ochanData );
//Packet size and rtdx data bufer
#define RTDX_PACKET_SIZE 512
static char vBuf[RTDX_PACKET_SIZE];
int main()
{
//Set rtdx bufer data
for (int i=0; i // enable the output channel
RTDX_enableOutput( &ochanData ); //infinite loop send data
int BlockCount=1000;
while((BlockCount--)>=0)
{
// check if RTDX channel is ready
while ( RTDX_writing != NULL );
// make sure writes go through
while(!RTDX_write( &ochanData, vBuf, RTDX_PACKET_SIZE ));
}
return 1;
}