This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于BLE UART方式连续发数据的Sleep Time 问题?

Other Parts Discussed in Thread: CC2541, CC2540

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 一段时间..