像这样连续发送字符,中间总会出现错位的情况,为什么呢?怎么解决?
我这里使用了HID_KBD的例程进行了尝试,没有出现你说的这个现象。上述程序你是做了什么修改出现这个现象的吗,可以具体描述一下。
? ?多谢 @TECH_Lpc!我是这样发送的:
? ? if(events & START_REPORT_EVT)
? ? {
? ? ? ? ? ? if(send_index != save_index)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? res = hidEmuSendKbdReport(send_buffer[send_index]);
? ? ? ? ? ? ? ? send_index++;
? ? ? ? ? ? ? ? res |= hidEmuSendKbdReport(0);
? ? ? ? ? ? ? ? if(send_index >= MAX_BUFFER_LEN)
? ? ? ? ? ? ? ? ? ? send_index = 0;
? ? ? ? ? ? ? ? if(res == blePending)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? send_failed = 1;
? ? ? ? ? ? ? ? ? ? UART0_SendString("set failed\r\n", 12);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? else
? ? ? ? ? ? ? ? ? ? send_failed = 0;
? ? ? ? ? ? ? ? tmos_start_task(hidEmuTaskId, START_REPORT_EVT, 35);
? ? ? ? ? ? ? ? return (events ^ START_REPORT_EVT);
? ? ? ? ? ? }
? ? }
主要改动应该是tmos_start_task(hidEmuTaskId, START_REPORT_EVT, 35);的时间由原来的2000改成35了,原来太慢了,我要求快速发送
调用这个tmos的任务速度较快,同时连接间隔的速度没这么快,两者无法匹配,所以就导致了丢数据。可以试试看连接间隔能不能降低,同时这里的任务时间多尝试选择一个合适不丢包的。
可以在这里加上一个判断,是否发送有问题,如果不为0则丢包了。
同时,我们所提供的只是参考例程。应用到项目中时需要先将键值放入ringbuf缓存中,使用任务去发送。