Zephyr内核——用户模式——MPU堆栈对象

MPU堆栈对象

线程堆栈创建

线程堆栈用K_THREAD_STACK_DEFINE()静态声明,或者使用K_THREAD_STACK_MEMBER()嵌入到结构中

对于使用内存保护单元(MPU)硬件的体系结构,堆栈在物理上是连续的分配。这种连续的分配会影响到内存中堆栈的放置,以及诸如堆栈保护和用户空间等其他特性的实现。对放置的影响直接归因于MPU区域的对齐要求。这将在下面的内存放置部分中进行讨论。

堆栈保护

堆栈保护机制需要硬件支持,以限制对内存的访问。内存保护单元可以提供这种支持。MPU提供了固定数量的区域。每个区域都包含有关要在该特定区域上强制执行的开始、结束、大小和访问属性的信息。

堆栈保护是通过使用单个MPU区域并设置该区域的属性以不允许写入访问来实现的。如果出现无效的访问,则会出现故障。堆栈保护层定义在堆栈的底部(最低地址)。

内存放置

在堆栈创建期间,会对内存的分配强制执行一组约束。这些约束条件包括确定堆栈的对齐方式和堆栈的正确大小。在链接二进制文件的过程中,这些约束被用于正确地放置堆栈。

内存约束的主要来源是针对SoC的MPU设计。MPU的设计可能需要对区域定义的特定约束。这些可以包括开始地址和结束地址的对齐,分配的大小,甚至是重叠区域之间的相互作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值