当前位置: 首页 > news >正文

【STM32】MPU内存保护单元

  • 注:仅在F7和M7系列上使用
  • 介绍
    • 功能:
      • 设置不同存储区域的存储器访问权限(管理员、用户)
      • 设置存储器(内存和外设)属性(可缓冲、可缓存、可共享)
    • 优点:提高嵌入式系统的健壮性,使系统更加安全
      • 阻止用户破坏操作系统的数据
      • 阻止一个任务访问其他任务的数据区,从而隔离任务
      • 把关键数据区域设置为只读,从根本上解决被破坏的可能
      • 检测意外的存储访问,如堆栈溢出、数组越界
      • 将SRAM或者RAM空间定义为不可执行,防止代码注释
  • 内核地址映射
    • MPU可配置保护8(针对F7)/16(针对H7)个内存区域,每个区域最小要求256字节,且每个区域还可配置为8个子区域

  • MPU设置内存区域的访问权限
    • MPU_REGION_NO_ACCESS---------无访问(管理员+用户级都不能访问)
    • MPU_REGION_PRIV_RW ---------仅支持特权级读写访问
    • MPU_REGION_PRIV_RW_URO-----禁止用户写访问(管理员可读写访问)
    • MPU_REGION_FULL_ACCESS------全访问(管理员、用户都可以访问)
    • MPU_REGION_PRIV_RO --------仅支持管理员访问
    • MPU_REGION_PRIV_RO_URO------只读(管理员&用户都不可以写)
  • MPU配置内存区域的访问属性
    • 三种内存类型
      • Normal memory(性能最强)
        • -> “ROM” “FLASH” “SRAM”
        • CPU以最高效的方式加载和存储字节,半字和字,CPU对于这种内存区的加载或存储不一定要按照程序代码的顺序执行
      • Device memory(性能中)
        • ->外设
        • 加载和存储要严格按照次序进行,确保寄存器按照正确顺序执行
      • Strongly ordered memory(性能最差)
        • 程序完全按照代码顺序执行,CPU会等待当前加载存储执行完毕后才执行下一条指令,所以导致性能下降
  • Cache
    • F4、M4当中有MPU却不用是因为:没有Cache
    • 分类
      • 数据缓存D-Cache
      • 指令缓存I-Cache
    • 4种基本操作
      • 使能
      • 禁止清空
      • 清空
      • 无效化
    • 读写操作

      • 写操作
        • CPU要写的SRAM区域数据在Cache中已经开辟了对应的区域----------“写命中”(Cache Hit)
        • 若Cache里面没有开辟对应的区域----------(Cache Miss)
      • 写操作
        • CPU要读取的SRAM区域数据在Cache中已经加载好----------“读命中”(Cache Hit)
        • 若Cache里面没有----------(Cache Miss)
      • Core读Cache
        • Cache hit :直接从cache当中读出数据即可
        • Cache miss:两个处理方式
          • read through 直接从内存中读出,不用cache
          • read allocate 把数据从内存加载到cache,再从cache传给core
      • Core写Cache
        • Cache hit
          • write through 直接写到内存中并同时放在cache里面 内存和cache同步更新
          • write back 数据更新时只写入cache,只在数据被替换出cache时,被修改的cache数据才会写入内存
        • Cache miss
          • write allocate 先要把写的数据载入到cache,对cache写后,更新到内存里面
          • no write allocate 直接写入内存,不用cache
      • 数据不一致的解决问题
        • 设置共享属性
          • Cache相当于没有开启
        • 软件进行cache维护
          • clean 清空:cache已经变化,SRAM数据未更新,DMA搬运数据前,将cache相对应数据更新到SRAMSCB_CleanDCache/SCB_CleanInvalidateDCache
          • invalidate无效化:SRAM数据已变化,Cache未更新DMA后
    • TEX用来设置Cache策略
      • 只要开启Cache,read allocate 是开启

      • Non-cacheable 正常读写操作,无cache
      • Write throught 写操作命中 no write allocate 不命中 read allocated 读操作没有命中
      • Write back 写操作命中 no write allocate 不命中 read allocated 读操作没有命中
      • write back 写操作命中 write allocate 不命中 read allocated 读操作没有命中
    • HAL库驱动
      • 结构体 MPU_Region_InitTypeDef

        • 参数

      • MPU基本配置步骤(可查芯片手册)
        • 禁止MPU void HAL_MPU_Disable();
        • 配置某个区域的MPU保护参数 通过调用HAL_ConfigRegion()函数去设置
        • 使能MPU void HAL_MPU_ Enable();
        • 编写MemManage中断服务函数 void MemManage_Handler(void);
http://www.lryc.cn/news/404388.html

相关文章:

  • 用Python爬虫能实现什么?
  • 【QT】label中添加QImage图片并旋转(水平翻转、垂直翻转、顺时针旋转、逆时针旋转)
  • CSP-J模拟赛day1
  • Docker构建LNMP环境并运行Wordpress平台
  • 《峡谷小狐仙-多模态角色扮演游戏助手》复现流程
  • Qt 使用Installer Framework制作安装包
  • Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)
  • linux代填密码切换用户
  • 防火墙的经典体系结构及其具体结构
  • 【BUG】已解决:note: This is an issue with the package mentioned above,not pip.
  • 【ARM】SMMU系统虚拟化整理
  • PYQT按键长按机制
  • SAPUI5基础知识15 - 理解控件的本质
  • 十七、【机器学习】【非监督学习】- K-均值 (K-Means)
  • 算法力扣刷题记录 五十六【501.二叉搜索树中的众数】
  • 分布式搜索引擎ES-Elasticsearch进阶
  • 低代码与传统编程:快速高质量构建系统的比较与方法
  • WebRTC音视频-环境搭建
  • Memcached开发(八):使用PHP进行操作
  • [Spring Boot]Protobuf解析MQTT消息体
  • 什么是Mappers?Mappers的作用是什么?
  • python-多任务编程
  • IDEA创建Java工程、Maven安装与建立工程、Web工程、Tomcat配置
  • 使用工作流产生高质量翻译内容的实战教程
  • 笔记:Few-Shot Learning小样本分类问题 + 孪生网络 + 预训练与微调
  • 初学Mybatis之 CRUD 增删改查
  • Kali Linux APT 设置指南:如何控制软件包更新行为
  • Android 10.0 Settings 加载流程
  • mysql的索引、事务和存储引擎
  • 基于trace_id实现SpringCloudGateway网关的链路追踪