MPU堆栈对象
线程堆栈创建
线程堆栈用K_THREAD_STACK_DEFINE()
静态声明,或者使用K_THREAD_STACK_MEMBER()
嵌入到结构中
对于使用内存保护单元(MPU)硬件的体系结构,堆栈在物理上是连续的分配。这种连续的分配会影响到内存中堆栈的放置,以及诸如堆栈保护和用户空间等其他特性的实现。对放置的影响直接归因于MPU区域的对齐要求。这将在下面的内存放置部分中进行讨论。
堆栈保护
堆栈保护机制需要硬件支持,以限制对内存的访问。内存保护单元可以提供这种支持。MPU提供了固定数量的区域。每个区域都包含有关要在该特定区域上强制执行的开始、结束、大小和访问属性的信息。
堆栈保护是通过使用单个MPU区域并设置该区域的属性以不允许写入访问来实现的。如果出现无效的访问,则会出现故障。堆栈保护层定义在堆栈的底部(最低地址)。
内存放置
在堆栈创建期间,会对内存的分配强制执行一组约束。这些约束条件包括确定堆栈的对齐方式和堆栈的正确大小。在链接二进制文件的过程中,这些约束被用于正确地放置堆栈。
内存约束的主要来源是针对SoC的MPU设计。MPU的设计可能需要对区域定义的特定约束。这些可以包括开始地址和结束地址的对齐,分配的大小,甚至是重叠区域之间的相互作用。