板子:CH32F&Vx0xV-R1-1v1
描述:從freertos例程中修改的。我加了一個1ms一次的TIM2中斷,UART1的接收中斷。兩個中斷獨(dú)立運(yùn)行沒問題。當(dāng)我在TIM2_IRQHandler()中執(zhí)行較長時間的操作后,UART1的接收中斷丟數(shù)據(jù)。
程序功能:我用串口發(fā)送"MUTE\r\n"到下位機(jī)。下位機(jī)收到后先逐個打印收到的字符,發(fā)現(xiàn)'\n'時解析一幀數(shù)據(jù),并發(fā)送"[REP]:MUTE\r\n",發(fā)現(xiàn)接受到的不是合法數(shù)據(jù)發(fā)送"[ERR]:"
嘗試1:我嘗試設(shè)置UART1接收中斷搶占TIM2中斷。并在TIM2_IRQHandler()加一個死循環(huán),那么一旦觸發(fā),程序就會一直呆在TIM2_IRQHandler()。此時,USART1_IRQHandler(void)正常執(zhí)行.我搶占應(yīng)該是沒問題?設(shè)置完搶占后,我把TIM2_IRQHandler()中的死循環(huán)去掉,還是有干擾。下圖是有干擾時,串口的截圖。其中w:MU是打印的內(nèi)存中的串口數(shù)據(jù)緩沖區(qū)。
嘗試2:在嘗試1的基礎(chǔ)上,我把freertos去掉。沒有干擾了。下圖就是正確的結(jié)果。
感覺是FreeRTOS跟中斷的關(guān)系問題。網(wǎng)上查了查(關(guān)鍵詞"stm32 freertos 中斷嵌套"),F(xiàn)reeRTOS是有一些配置的宏(如configMAX_SYSCALL_INTERRUPT_PRIORITY),但CH32V307的例程中沒有這個配置。不知道是不是這個原因。
我還是想用freertos的,想問下該咋解決。
能給個郵箱嗎?我發(fā)您帶freertos的程序。