使用FreeRTOS遇到死等異常的解決
問題場景:
在使用apollo3時(shí),調(diào)試時(shí)發(fā)現(xiàn)在ADC中斷中一發(fā)送信號(hào)量就卡住。
追溯代碼:
追溯代碼發(fā)現(xiàn)其實(shí)是在ADC中斷中調(diào)用xQueueGenericSendFromISR
就卡住,卡住位置如下
這個(gè)宏定義如下
繼續(xù)往里看,發(fā)現(xiàn)卡在下面位置
此斷言如下
所以打印看到的條件是0>=128
,所以就while(1);
卡在這里了
分析代碼
這是獲得ipsr
寄存器的值,保存在ulCurrentInterrupt
變量,那ipsr
寄存器代表的是什么呢,這里有寫https://blog.csdn.net/weixin_41572450/article/details/105027244
表示中斷編號(hào),而這個(gè)宏
表示用戶中斷編號(hào)是從16開始,1-15就是我們熟悉的內(nèi)核中斷編號(hào),如下
apollo的中斷編號(hào)如下
可以看到內(nèi)核部分也是16個(gè),其中ADC的中斷編號(hào)編到32(注意這里要加上內(nèi)核的16個(gè)編號(hào)),
所以
if( ulCurrentInterrupt >= portFIRST_USER_INTERRUPT_NUMBER )
這個(gè)條件是說當(dāng)產(chǎn)生了外部中斷,就走if條件里面,
歸納下就是
ucCurrentPriority = ( uint8_t * )(0xE000E3F0+ulCurrentInterrupt) 即 ucCurrentPriority = ( uint8_t * )(0xE000E3F0+32) 即 ucCurrentPriority = ( uint8_t * )(0xE000E400+16)
其中,0xE000E400是NVIC->IP寄存器地址
這里存放的外部中斷的中斷優(yōu)先級(jí),如下
所以這里的0>=128的0是IP[ADC]寄存器復(fù)位值,就是把ADC中斷優(yōu)先級(jí)設(shè)置成0了,說明初始化時(shí)沒有設(shè)置ADC優(yōu)先級(jí),檢查下果然漏了,添加下面設(shè)置就沒問題了
那128是怎么來的?如下
所以是128.
最后發(fā)現(xiàn)之前大段英文注釋有說這個(gè)問題,最后還有網(wǎng)址
https://www.freertos.org/FAQHelp.html
如下說明
以上就是使用FreeRTOS遇到死等異常的解決的詳細(xì)內(nèi)容,更多關(guān)于FreeRTOS死等問題的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
FreeRTOS實(shí)時(shí)操作系統(tǒng)特點(diǎn)介紹
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)特點(diǎn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS實(shí)時(shí)操作系統(tǒng)臨界段保護(hù)場合示例
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)臨界段保護(hù)場合示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS實(shí)時(shí)操作系統(tǒng)空閑任務(wù)的阻塞延時(shí)實(shí)現(xiàn)
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)空閑任務(wù)的阻塞延時(shí)實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS實(shí)時(shí)操作系統(tǒng)內(nèi)核配置說明
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)內(nèi)核配置及說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS實(shí)時(shí)操作系統(tǒng)支持時(shí)間片示例詳解
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)支持的時(shí)間片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS實(shí)時(shí)操作系統(tǒng)的列表與列表項(xiàng)操作示例
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)的列表與列表項(xiàng)操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS實(shí)時(shí)操作系統(tǒng)移植操作示例指南
這篇文章主要為大家介紹了FreeRTOS移植操作示例指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS實(shí)時(shí)操作系統(tǒng)在Cortex-M3上的移植過程
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)在Cortex-M3上的移植過程的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS實(shí)時(shí)操作系統(tǒng)的內(nèi)存管理分析
這篇文章主要為大家介紹了FreeRTOS實(shí)時(shí)操作系統(tǒng)的內(nèi)存管理的示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04FreeRTOS進(jìn)階之系統(tǒng)延時(shí)完全解析
這篇文章主要為大家介紹了FreeRTOS進(jìn)階之系統(tǒng)延時(shí)完全解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04