最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

FreeRTOS移植,國產(chǎn)stm32BASEPRI寄存器中斷優(yōu)先級屏蔽問題

2023-07-10 13:58 作者:我有錢途  | 我要投稿

FreeRTOS移植比較簡單(比LVGL簡單多了,lvgl移植總是報錯各種東西)使用Demo里的f103Keil工程中的FreeRTOSconfig.h,不再贅述。移植后創(chuàng)建任務,在打開調(diào)度器,xPortStartScheduler()中調(diào)用prvStartFirstTask()后進入HardFault。結合網(wǎng)上資料經(jīng)過排查,默認的config.h中的優(yōu)先級設置(就f103keilDemo里的那個)沒有問題,剛創(chuàng)建了一個任務也不會出現(xiàn)棧溢出(經(jīng)測試config里的全局數(shù)組大小也不會超過c8t6的ram,不是內(nèi)存溢出問題),最后看別人視頻發(fā)現(xiàn)還要在config.h中添加兩句話:

#define ????xPortPendSVHandler ????????PendSV_Handler

#define ????vPortSVCHandler ???????????? SVC_Handler

然后把stm32f10x_it.c中的void SVC_Handler(void)和void PendSV_Handler(void)去掉,即可正常使用。原因是FreeROTS實現(xiàn)了這兩個Handler,但是名字是xPortPendSVHandler和vPortSVCHandler,和startup.s中的DCD?PendSV_Handler、DCD?SVC_Handler名字對不上,所以用宏定義對它們改名,使其和start.s中的名字一致,才能對接。下圖為沒有對接PendSV中斷和SVC中斷導致進入HardFault的函數(shù)。

prvStartFirstTask

第二個問題,F(xiàn)reeRTOS為了實現(xiàn)對數(shù)據(jù)的獨立訪問,會關閉調(diào)度器和中斷(或者只關閉調(diào)度器),關中斷使用portDISABLE_INTERRUPTS()宏,即vPortRaiseBASEPRI()函數(shù)。原理是向BASEPRI寄存器寫入一個數(shù),大于等于這個數(shù)的優(yōu)先級(更低優(yōu)先級)都會被屏蔽??梢詤⒖颊c原子講解FreeRTOS中斷的視頻。正點原子f103例程中有一個實驗:設定屏蔽優(yōu)先級為5,將兩個定時器的中斷優(yōu)先級設置為4和5,調(diào)用函數(shù)寫B(tài)asePri寄存器關中斷后,定時器5的中斷被關閉了,定時器4的中斷不受影響,驗證了這個機制。

FreeRTOS關中斷的方法

然而在使用國產(chǎn)32驗證時遇到了極其逆天的問題,調(diào)用函數(shù)屏蔽優(yōu)先級為5和以上的中斷后,優(yōu)先級為4的中斷居然也被屏蔽了,效果和屏蔽等級為4相同。經(jīng)過驗證,發(fā)現(xiàn)國產(chǎn)32對于寫入BASEPRI寄存器的高四位,會將最后一位按照0處理。比如優(yōu)先級為5,寫入0X50,即01010000,等同于01000000,0X40!優(yōu)先級為9,寫入0x90,即10010000,等同于10000000,0X80!非常奇怪!

我是直接改了一下正點原子的定時器初始化里的幾句話(因為c8t6沒有TIM5,用TIM4代替),如果正點原子代碼沒問題,那這個現(xiàn)象就和預料中不一樣,只能是國產(chǎn)32的問題了。國產(chǎn)32之前還遇到過個別定時器個別引腳無法輸出PWM波的問題。

調(diào)用函數(shù)寫basepri寄存器屏蔽中斷,屏蔽等級為5,卻把優(yōu)先級為4、5兩個定時中斷都屏蔽了!
這是正確的現(xiàn)象

幫大伙踩踩坑,又是國產(chǎn)32的坑

FreeRTOS移植,國產(chǎn)stm32BASEPRI寄存器中斷優(yōu)先級屏蔽問題的評論 (共 條)

分享到微博請遵守國家法律
岗巴县| 霍山县| 诸城市| 稷山县| 长垣县| 岐山县| 正蓝旗| 巫溪县| 久治县| 鞍山市| 禹州市| 黑河市| 万年县| 新巴尔虎右旗| 双江| 东方市| 东乡县| 桓台县| 汝城县| 克东县| 顺昌县| 宁明县| 孙吴县| 申扎县| 商水县| 富阳市| 辽宁省| 周至县| 灌南县| 宝鸡市| 双柏县| 张北县| 汝南县| 竹北市| 进贤县| 麻江县| 焉耆| 崇义县| 浪卡子县| 昔阳县| 乐陵市|