OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1455|回复: 5

请教STM32H7中MPU默认区域配置的问题

[复制链接]

2

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-10-16
在线时间
16 小时
发表于 2023-10-12 19:41:29 | 显示全部楼层 |阅读模式
15金钱
最近移植LWIP的时候用到了MPU,对一些配置有些不解,请大佬们解答!
经过查资料得知如下这个配置的意思是:默认区域(default region)仅允许特权访问,并且在硬故障,NMI和FAULTMASK处理程序期间禁用MPU


  1. HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
复制代码



那么我访问默认区域(访问的0x24000000@512K这一块RAM)的时候为什么没进MemManage_Handler(void)中断呢?

具体MPU配置代码如下:
  1. void MPU_Config(void)
  2. {
  3.         MPU_Region_InitTypeDef MPU_InitStruct = {0};

  4.         /* Disables the MPU */
  5.         HAL_MPU_Disable();

  6.         /** Initializes and configures the Region and the memory to be protected
  7.          */
  8.         MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  9.         MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  10.         MPU_InitStruct.BaseAddress = 0x30040000;
  11.         MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
  12.         MPU_InitStruct.SubRegionDisable = 0x0;
  13.         MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  14.         MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  15.         MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
  16.         MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  17.         MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  18.         MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;

  19.         HAL_MPU_ConfigRegion(&MPU_InitStruct);

  20.         /** Initializes and configures the Region and the memory to be protected
  21.          */
  22.         MPU_InitStruct.Number = MPU_REGION_NUMBER1;
  23.         MPU_InitStruct.BaseAddress = 0x30044000;
  24.         MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;
  25.         MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
  26.         MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

  27.         HAL_MPU_ConfigRegion(&MPU_InitStruct);
  28.         /* Enables the MPU */
  29.         HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
  30. }
复制代码


最佳答案

查看完整内容[请看2#楼]

不上RTOS的话,只要没有代码切换到用户模式,都是在特权模式下运行的吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-10-12 19:41:30 | 显示全部楼层
不上RTOS的话,只要没有代码切换到用户模式,都是在特权模式下运行的吧
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-10-16
在线时间
16 小时
 楼主| 发表于 2023-10-13 09:41:10 | 显示全部楼层
姚先起 发表于 2023-10-13 09:32
不上RTOS的话,只要没有代码切换到用户模式,都是在特权模式下运行的吧

谢谢您的回复,我试试加上RTThread
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-10-16
在线时间
16 小时
 楼主| 发表于 2023-10-17 14:38:38 | 显示全部楼层
姚先起 发表于 2023-10-13 09:32
不上RTOS的话,只要没有代码切换到用户模式,都是在特权模式下运行的吧

我加上RTT试了下,MSP和PSP都是在0x24000000@512K这一块RAM,但是还是未进MemManage_Handler
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-10-17 15:00:43 | 显示全部楼层
yujiahang 发表于 2023-10-17 14:38
我加上RTT试了下,MSP和PSP都是在0x24000000@512K这一块RAM,但是还是未进MemManage_Handler

Freertos是MPU操作都是有单独的创建任务等函数的,RTThread不知道,如果你单纯想测试MPU,也可以直接操作寄存器进入用户模式啊
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-10-16
在线时间
16 小时
 楼主| 发表于 2023-10-18 11:09:14 | 显示全部楼层
姚先起 发表于 2023-10-17 15:00
Freertos是MPU操作都是有单独的创建任务等函数的,RTThread不知道,如果你单纯想测试MPU,也可以直接操作 ...

谢谢你,我明白了,RTT的任务也是特权级别
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 07:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表