陈江网站建设,郑州做系统集成的公司网站,绍兴seo管理,移动互联网应用程序安全认证证书是什么注#xff1a;仅在F7和M7系列上使用介绍 功能#xff1a; 设置不同存储区域的存储器访问权限#xff08;管理员、用户#xff09; 设置存储器#xff08;内存和外设#xff09;属性#xff08;可缓冲、可缓存、可共享#xff09; 优点#xff1a;提高嵌入式系统的健壮…注仅在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策略 只要开启Cacheread 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);