【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://xiahunao.cn/news/3245853.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何将电子书发送到kindle

修改guide Amazon之kindle 修改邮箱 参考: blog 多种方式:如何将电子书发送到kindle

《知识点扫盲 · 学会 WebSocket》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

笔记 5 :linux 0.11 注释,函数 copy_mem() , copy_process () , 中断函数 int 80H 的代码框架

(38)接着介绍一个创建进程时的重要的函数 copy_mem() 函数: (39) 分析另一个关于 fork() 的重要的函数 copy_process(),与李忠老师的操…

大模型的“幻觉”克星!被低估的RAG技术

1 RAG与大模型、Prompt、微调的关系 本文主要带大家深入学习一下最近AI领域的重要技术RAG,本文致力于用大白话给大家说明白RAG,但是还是需要一些大模型和微调有关的领域名词有一些基本的了解,大家选择性阅读哦!在进行正文学习之前我们先用一…

【内网穿透】打洞笔记

文章目录 前言原理阐述公网sshfrp转发服务 实现前提第一步:第二步第三步第四步 补充第五步(希望隧道一直开着)sftp传数据(嫌云服务器上的网太慢) 前言 租了一个云服务器,想用vscode的ssh远程连接&#xff…

数据库中的复合查询

一、基本查询回顾 1、查询工资高于500或岗位为manager的员工,并且名字首字母是J 2、按部门编号升序,工资降序排序 3、用年薪降序排序 4、显示工资最高的员工名字和岗位(使用了子查询) 5、查询工资高于平均工资的员工 6、按部门查…

kubernetes集群部署elasticsearch集群,包含无认证和有认证模式

1、背景: 因公司业务需要,需要在测试、生产kubernetes集群中部署elasticsearch集群,因不同环境要求,需要部署不同模式的elasticsearch集群, 1、测试环境因安全性要求不高,是部署一套默认配置; 2…

orcad导出pdf 缺少title block

在OrCAD中导出PDF时没有Title Block 最后确认问题在这里: 要勾选上Title Block Visible下面的print

《昇思25天学习打卡营第19天|Diffusion扩散模型》

什么是Diffusion Model? 什么是Diffusion Model? 如果将Diffusion与其他生成模型(如Normalizing Flows、GAN或VAE)进行比较,它并没有那么复杂,它们都将噪声从一些简单分布转换为数据样本,Diffusion也是从…

46 mysql 客户端拿不到具体的错误信息

前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…

常见的计算机语言有哪些?

计算机语言用于编写软件和应用程序,各种语言有不同的用途和特点。目前常见的的编程语言有: 1、Java;2、Python;3、JavaScript;4、C;5、C#;6、Swift;7、Go;8、Ruby&#…

Chromium CI/CD 之Jenkins实用指南2024-系统基本配置(二)

1. 引言 在现代软件开发和持续集成/持续部署(CI/CD)过程中,Jenkins已经成为一款不可或缺的工具。作为一个开源的自动化服务器,Jenkins能够帮助开发团队自动化各种任务,包括构建、测试和部署应用程序。特别是当与Ubunt…

高职综合布线实训室

一、高职综合布线实训室建设背景 随着《国民经济和社会发展第十四个五年规划和2035年远景目标纲要》的深入实施,数字化转型已成为国家发展的核心战略之一,计算机网络技术作为数字化建设的基石,其重要性日益凸显。然而,面对数字时代…

数据可视化在智慧医疗中的重要应用

在现代智慧医疗的推动下,数据可视化技术正日益成为医疗领域的重要工具。通过将复杂的医疗数据转换为直观的图表和图形,数据可视化不仅提升了医疗服务的效率,还极大地改善了患者的就医体验。 在智慧医疗中,数据可视化首先在电子病历…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 7月17日,星期三

每天一分钟,知晓天下事! 2024年7月17日 星期三 农历六月十二 1、 三部门:紧急调拨1万件救灾物资支持河南、山东两省做好受灾群众基本生活保障工作。 2、 多部门联合公布无人驾驶试点名单:北京、上海等20个城市(联合体…

Cesium能做啥,加载哪些数据源,开源免费用商用吗?这里告诉你。

很多小伙伴对Cesium是什么,一知半解,本文是基础知识的扫盲,为大家分享cesium是什么、能做什么、默认数据是什么,为什么首先要进行数据加载,要加载哪些数据,希望通过这些带你入个门,欢迎点赞评论…

所有权与生命周期:Rust 内存管理的哲学

所有权与生命周期:Rust内存管理的哲学 博主寄语引言:编程语言的内存管理困境与 Rust 的解决方案。所有权基本概念:资源的绝对主权生命周期的理解与应用:编译时的守护神借用与引用的精妙设计:安全与效率的和谐共舞Rust …

服务器基础1

服务器基础复习01 1.环境部署 系统:华为欧拉系统 网络简单配置nmtui 因为华为欧拉系统密码需要复杂度 所以我们可以进入后更改密码 echo 123 | passwd --stdin root也可以 echo "root:123" | chpasswd2.关闭防火墙,禁用SElinux 首先先关…

C++:链表插入排序/删除重复节点题解

插入排序 插入排序的思路很简单,基本都知道。 关键是放在链表中, 1.要建立一个哨兵位,这个哨兵位的下一个节点,始终指向val最小的节点。 2.prev指针作为cur的前一个节点,始终指向val最大的节点。它的下一个节点始终…

C++ ─── vector的模拟实现

知识点: ① 因为vector是模版,所以声明和定义都放在.h中,防止出现编译错误。 .h不会被编译,在预处理中.h在.cpp中展开,所以在编译时只有.cpp 而 .cpp顺序编译,只会进行向上查找,因此至少有函数的…