TI 工程师:现在有个比较急的问题,用PC连接TI CC2540的USBdongle,连接我们公司自己的板子(上面是CC2541的串口透传模块),UART方式的连续得收发数据,
软件方面用C语言写的串口通信的方式;比如如果发送数据 的话会把命令头 01,12 ,FD,13...等写在数据之前发出去,每次最多发20个数据(不含命令头)
现在的话功能可以实现,问题是在发出一组数据后需要Sleep一段时间(比如100ms)才可以发下一组,否则的话很多数据会丢失,
这样带来的问题就是传输的效率非常低,9600波特率,1.5KBytes数据要发10几秒钟才能发完;
就想问下这个Sleep时间是怎么造成的?是不是我的Dongle的硬件有问题呢,还是其他方面(比如程序写法)的问题?谢谢!
------------------------------------------------------------------------------------------------
附上程序部分:
函数定义,串口发部分:
BOOL jeff_class::CMySerialPort::WriteCommByte ( unsigned char ucByte )
{
BOOL bWriteStat;
DWORD dwBytesWritten;
bWriteStat = WriteFile ( m_hIDComDev, ( LPSTR ) &ucByte, 1, &dwBytesWritten, &m_OverlappedWrite );
// 查询异步写入是否完成,未完成则挂起等待
if ( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) ) {
if ( WaitForSingleObject ( m_OverlappedWrite.hEvent, TIMEOUT_WRITECOMM_EVENT ) )
dwBytesWritten = 0;
else {
GetOverlappedResult ( m_hIDComDev, &m_OverlappedWrite, &dwBytesWritten, FALSE );
m_OverlappedWrite.Offset += dwBytesWritten;
}
}
return ( TRUE );
}
// 向串口发送数据
int jeff_class::CMySerialPort::SendData ( const char *buffer, int size )
{
if ( !m_bOpened || m_hIDComDev == NULL ) return ( 0 );
DWORD dwBytesWritten = 0;
int i;
for ( i=0; i<size; i++ ) {
WriteCommByte ( buffer[i] );
dwBytesWritten++;
}
return ( ( int ) dwBytesWritten );
}
然后调用函数连续发数据的循环语句:
char send_continue_data[]= {'\x01','\x12','\xFD','\x13','\x00','\x00','\x00','\x00','\x12','\x00',data1,
data2.....,data13};
my_class.SendData(send_continue_data,sizeof (send_continue_data));
Sleep(100);//需要sleep 一段时间..
