printf重定向到USB

CH582芯片。我嘗試將printf重定向到USB。移植了BLE_USB例程中的app_usb.c,并將CH58x_sys.c中的_write函數(shù)修改為:

int?_write(int?fd,?char?*buf,?int?size)
{
#if?DEBUG?==?Debug_USB
????USBSendData(buf,?size);
????while(!EP2_GetINSta());
#else
????int?i;
????for(i?=?0;?i?<?size;?i++)
????{
#if?DEBUG?==?Debug_UART0
????????while(R8_UART0_TFC?==?UART_FIFO_SIZE);??????????????????/*?等待數(shù)據(jù)發(fā)送?*/
????????R8_UART0_THR?=?*buf++;?/*?發(fā)送數(shù)據(jù)?*/
#elif?DEBUG?==?Debug_UART1
????????while(R8_UART1_TFC?==?UART_FIFO_SIZE);??????????????????/*?等待數(shù)據(jù)發(fā)送?*/
????????R8_UART1_THR?=?*buf++;?/*?發(fā)送數(shù)據(jù)?*/
#elif?DEBUG?==?Debug_UART2
????????while(R8_UART2_TFC?==?UART_FIFO_SIZE);??????????????????/*?等待數(shù)據(jù)發(fā)送?*/
????????R8_UART2_THR?=?*buf++;?/*?發(fā)送數(shù)據(jù)?*/
#elif?DEBUG?==?Debug_UART3???????
????????while(R8_UART3_TFC?==?UART_FIFO_SIZE);??????????????????/*?等待數(shù)據(jù)發(fā)送?*/
????????R8_UART3_THR?=?*buf++;?/*?發(fā)送數(shù)據(jù)?*/
#endif
????}
#endif?//DEBUG?==?Debug_USB
????return?size;
}
#endif

當(dāng)printf函數(shù)調(diào)用頻率較低時(shí),能夠正常運(yùn)行。但調(diào)用頻率較高或和藍(lán)牙協(xié)議棧同時(shí)運(yùn)行時(shí),會(huì)在運(yùn)行一段時(shí)間(數(shù)十秒)后卡死,請(qǐng)問應(yīng)如何修改?

您好,“調(diào)用頻率高”時(shí),指USB_COM打印數(shù)據(jù)量大表現(xiàn)為分包發(fā)送的頻次高;還是指數(shù)據(jù)量不大,單純加快打印頻次?!翱ㄋ馈钡默F(xiàn)象是什么樣的,是所有接口都不工作了,還是只有USB不工作了。

目前能想到的幾個(gè)注意點(diǎn):

①USB模擬COM運(yùn)行時(shí),需要跑主頻;BLE代碼里是否用到了HAL_SLEEP休眠,休眠前需要等待所有數(shù)據(jù)發(fā)送完畢再休眠

②COM代碼中,SendUSBData這個(gè)接口的發(fā)包長(zhǎng)度參數(shù),是直接賦值給R8_UEPn_T_LEN(n為端點(diǎn)編號(hào)),超過64字節(jié)大小的打印數(shù)據(jù)長(zhǎng)度不能直接往里賦值

③由于使用批量傳輸,若發(fā)包長(zhǎng)度正好為64字節(jié)的倍數(shù),需要多發(fā)一個(gè)0字節(jié)長(zhǎng)度包表示批量傳輸?shù)臄?shù)據(jù)發(fā)完

您可以將當(dāng)前現(xiàn)象的相關(guān)信息發(fā)送至郵箱:zhaiyw@wch.cn以幫您定位問題

或者您留個(gè)郵箱,我晚點(diǎn)測(cè)試在BLE從機(jī)代碼中添加COM打印后,給您發(fā)參考代碼。


謝謝,郵箱是個(gè)人信息保護(hù),已隱藏。調(diào)用頻率高指單純加快打印頻次。卡死的現(xiàn)象是程序停止運(yùn)行,感覺像是跑飛了。未使用HAL_SLEEP。


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频