日韩中文在线观看-欧美性综合-伊人视频在线观看-亚洲免费在线视频观看-国产偷人视频-人妻丰满熟妇岳av无码区hd-国产一级淫片a视频免费观看-国产精品交换-国产精品1区2区3区4区-美女日批视频在线观看-欧美日韩一区二区三区自拍

【ARM】解決MDK中開啟MPU后RTX的線程無法正常啟動的問題

1、 文檔目標

在嵌入式開發領域,尤其是在使用ARM Cortex-M系列微控制器時,MDK(Keil Microcontroller Development Kit)是開發者最常用的集成開發環境之一。而RTX(Real-Time eXecutive)作為一款輕量級實時操作系統內核,廣泛應用于需要高效任務調度和資源管理的場景中。然而,在某些復雜的應用環境中,例如啟用了MPU(Memory Protection Unit)后,可能會遇到RTX線程無法正常啟動的問題。這種問題不僅會影響系統的功能實現,還可能對項目的開發進度造成顯著影響。因此,深入分析該問題的成因并提出有效的解決方案,具有重要的實踐意義。


2、 問題場景

在Keil MDK中,用RTOS2后,在Main函數中開啟MPU初始化后,RTX5的線程無法正常啟動,如圖2-1所示:



圖2-1

3、軟硬件環境

1)、軟件版本:Keil MDK5.41

2)、電腦環境:Windows 11

3)、外設硬件:無


4、解決方法

方法1:

打開工程的main函數中的MPU的初始化代碼,把“MPU_InitStruct.Size“設置為”MPU_REGION_SIZE_4GB”,如圖4-1所示:


圖4-1

注:當MPU的區域大小設置為MPU_REGION_SIZE_4GB時,它覆蓋了一個非常大的內存區域,這通常包括了整個地址空間,因此不太可能限制到RTX線程所需的特定內存區域。而當設置為MPU_REGION_SIZE_512KB時,覆蓋的內存區域較小,如果這個區域沒有正確覆蓋RTX線程的棧空間或需要訪問的內存區域,就可能導致線程無法正常啟動。


方法2:

如果不修改“MPU_InitStruct.Size”的值,打開RTX的配置文件把默認線程的模式修改為特權模式,如圖4-2所示:



圖4-2

注:在非特權模式下運行線程時,系統定時器(SysTick)和其他中斷仍需要特權模式的權限。如果中斷服務程序試圖訪問受限區域,可能導致線程無法運行。


主站蜘蛛池模板: 桂阳县| 安泽县| 蒙城县| 仁怀市| 兰坪| 施甸县| 芮城县| 田林县| 昌宁县| 慈溪市| 彭泽县| 白水县| 德阳市| 观塘区| 梧州市| 交城县| 屏东县| 浦城县| 托里县| 那坡县| 阜康市| 临城县| 清流县| 桐柏县| 资溪县| 永定县| 平乐县| 枝江市| 嘉荫县| 乐东| 盈江县| 阜城县| 宁陕县| 泗洪县| 四川省| 石柱| 海南省| 青岛市| 吉林市| 大洼县| 城口县|