像這樣連續(xù)發(fā)送字符,中間總會(huì)出現(xiàn)錯(cuò)位的情況,為什么呢?怎么解決?
我這里使用了HID_KBD的例程進(jìn)行了嘗試,沒有出現(xiàn)你說的這個(gè)現(xiàn)象。上述程序你是做了什么修改出現(xiàn)這個(gè)現(xiàn)象的嗎,可以具體描述一下。
? ?多謝 @TECH_Lpc!我是這樣發(fā)送的:
? ? 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);
? ? ? ? ? ? }
? ? }
主要改動(dòng)應(yīng)該是tmos_start_task(hidEmuTaskId, START_REPORT_EVT, 35);的時(shí)間由原來的2000改成35了,原來太慢了,我要求快速發(fā)送
調(diào)用這個(gè)tmos的任務(wù)速度較快,同時(shí)連接間隔的速度沒這么快,兩者無法匹配,所以就導(dǎo)致了丟數(shù)據(jù)。可以試試看連接間隔能不能降低,同時(shí)這里的任務(wù)時(shí)間多嘗試選擇一個(gè)合適不丟包的。
可以在這里加上一個(gè)判斷,是否發(fā)送有問題,如果不為0則丟包了。
同時(shí),我們所提供的只是參考例程。應(yīng)用到項(xiàng)目中時(shí)需要先將鍵值放入ringbuf緩存中,使用任務(wù)去發(fā)送。