我們在BLE-UART例程基礎(chǔ)上開發(fā)的,使能看門狗后,發(fā)現(xiàn)當(dāng)設(shè)置1200波特率時候,發(fā)送16字節(jié)內(nèi)容會導(dǎo)致看門狗復(fù)位,每次必現(xiàn)。
調(diào)用的發(fā)送函數(shù)是app_uart_tx_data(data,length);發(fā)送16字節(jié)內(nèi)容,調(diào)整波特率為2400以上后,就不復(fù)位了。這個uart3的發(fā)送函數(shù)我改成了uart1,測量uart1是可以正確發(fā)出來的。
第一個想到是發(fā)送函數(shù)阻塞導(dǎo)致不能及時喂狗導(dǎo)致的,但是研究看看送函數(shù)那里并沒有阻塞,最多阻塞8個字節(jié)的時間,在此處加喂狗指令,故障依舊。
void app_uart_process(void)
{
? ? UINT32 irq_status;
? ? SYS_DisableAllIrq(&irq_status);
? ? if(uart_rx_flag)
? ? {
? ? ? ? tmos_start_task(Peripheral_TaskID, UART_TO_BLE_SEND_EVT, 2);
? ? ? ? uart_rx_flag = false;
? ? }
? ? SYS_RecoverIrq(irq_status);
? ? //tx process
? ? if(R8_UART1_TFC < UART_FIFO_SIZE)
? ? {
//PRINT("R8_UART1_TFC:%d\n",R8_UART1_TFC);
? ? ? ? app_drv_fifo_read_to_same_addr(&app_uart_tx_fifo, (uint8_t *)&R8_UART1_THR, UART_FIFO_SIZE - R8_UART1_TFC);
? ? }
}
繼續(xù)研究,在主循環(huán)里發(fā)現(xiàn)兩個函數(shù),一個是TMOS系統(tǒng)的輪詢,一個是串口發(fā)送處理函數(shù),通過添加復(fù)位、置位io看發(fā)現(xiàn)TMOS_SystemProcess();函數(shù)執(zhí)行時間超過400ms左右,用示波器看低電平時間在400ms左右。因?yàn)門MOS的沒有源碼,我向問官網(wǎng)技術(shù)人員,怎么看TMOS哪個任務(wù)占用CPU時間過長了,有沒有好的方法查這個問題
__attribute__((section(".highcode")))
void Main_Circulation()
{
? ? while(1)
? ? {
? ? GPIOA_ResetBits(GPIO_Pin_12);
? ? ? ? TMOS_SystemProcess();
? ? ? ? *((unsigned char*)0x40001043) = 0;//喂狗
? ? ? ? GPIOA_SetBits(GPIO_Pin_12);
? ? ? ? app_uart_process();
? ? }
}