我是靠谱客的博主 可靠板栗,最近开发中收集的这篇文章主要介绍实现完全 MCU 分区隔离:MPU 管理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这是关于为基于 MCU 的系统实现高安全性的系列文章中的第二篇。在这篇文章中涉及的安全基础,划分MCU软件,父/子任务,utasks和ptasks的优势。在本文中,我们将详细介绍 MPU 管理。如第一篇文章所述,这不是教程。为此,建议参考文章末尾的参考资料。

图 1 显示了任务控制块 (TCB)内存保护阵列 (MPA)MPA 模板之间的关系


图 1:模板、MPA 和 TCB 关系。(来源:作者) 

请注意,MPA 模板可能适用于单个 MPA 和任务,也可能在任务及其 MPA 之间共享。通常,在后一种情况下,任务将在同一分区中。还有一个不需要模板的默认 MPA。当没有为任务创建 MPA 时使用它。在接下来的部分中,我们将讨论如何定义模板。

定义区域

正如本系列的第一篇文章中所讨论的,定义分区的第一步是定义分区需要的代码、数据和 IO 区域以及某些标准区域,这些区域将在下面讨论。为此,第一步是定义部分

部分

为了定义部分,没有必要重新组织包含来自其他分区的代码或数据的模块。为此,可以使用编译指示,如下(注意:所有代码和说明均针对 IAR EWARM 工具套件)

#pragma default_function_attributes = @ ".t2a_text"
无效 ttCD18_t2a(无效)
{
…
}
#pragma default_function_attributes =

同样,对于数据:

#pragma default_variable_attributes = @ ".t2a_data"
u32 irq;
TCB_PTR 父级;
u32 tskctr;
#pragma default_variable_attributes =

分散在许多模块中的同一节 pragma 定义由链接器合并为一个节。如果模块在各处的编译指示变得过于混乱,那么可以将一个分区的代码和数据分组到相同的分区模块中。然后,可以使用命令行选项,而不是编译指示。例如,在一个分区模块的项目文件中的 Options / C/C++ Compiler / Extra Options 中,如下:

--section.bss=.t2a_bss
--section.data=.t2a_data
--section.text=.t2a_text
--section.rodata=.t2a_rodata
--section.noinit=.t2a_noinit

只需重命名编译器分配的节名称。(一定要覆盖Inherited settings。)如果一个分区的几个模块被分组到一个项目文件节点中,那么上面的内容只需要放在那个节点的选项中。或者,代替上述内容,将以下内容放入额外选项中:

-f $PRO

最后

以上就是可靠板栗为你收集整理的实现完全 MCU 分区隔离:MPU 管理的全部内容,希望文章能够帮你解决实现完全 MCU 分区隔离:MPU 管理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部