CH32V307 FreeRTOS 多中斷相互干擾無法控制。

板子: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ū)。

image.png



嘗試2:在嘗試1的基礎(chǔ)上,我把freertos去掉。沒有干擾了。下圖就是正確的結(jié)果。

image.png


感覺是FreeRTOS跟中斷的關(guān)系問題。網(wǎng)上查了查(關(guān)鍵詞"stm32 freertos 中斷嵌套"),F(xiàn)reeRTOS是有一些配置的宏(如configMAX_SYSCALL_INTERRUPT_PRIORITY),但CH32V307的例程中沒有這個配置。不知道是不是這個原因。


我還是想用freertos的,想問下該咋解決。

能給個郵箱嗎?我發(fā)您帶freertos的程序。

我還試了不同的壓棧方式?jīng)]有區(qū)別。

image.png


串口中斷部分。

image.png


個人建議,既然用了RTOS了定時器肯定用OS的定時器了,串口通訊肯定用DMA+查詢狀態(tài)了,這樣就沒有中斷了不會存在中斷優(yōu)先的問題了。如果DMA不夠就換更多DMA的片子了。1ms定時器中斷還死循環(huán)還執(zhí)行很多代碼分分鐘讓OS死得不能再死了。


您好,郵箱為lzs@wch.cn,可發(fā)我具體看一下


程序已發(fā)送至您的郵箱。1ms的定時器里執(zhí)行的是我設(shè)計的控制邏輯,控制邏輯執(zhí)行總時間應(yīng)該在200us以內(nèi)。不在freertos的任務(wù)中執(zhí)行這個控制是因為frertos的任務(wù)切換大概在2ms左右,很難保證我的控制1ms執(zhí)行一次。目前的設(shè)計是,我的控制邏輯在每1ms一次的中斷中執(zhí)行,只接受被"串口接收中斷"打斷,在freertos的任務(wù)中執(zhí)行 一些不重要的附加功能。


另外,不用DMA是我不太會DMA。。。


您好,已郵件回復(fù)你,后續(xù)問題溝通可繼續(xù)通過郵箱溝通。


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

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