int32_t 用于 32 微控制器中的堆栈

int32_t for stack in 32 microcontroller

在下面的例子中,为什么我们应该使用 int32_t 而不是 uint32_t ? (平台为ARM 32位微控制器)

struct tcb{
  int32_t *stackPt;       
  struct tcb *nextPt;  
};

这是 RTOS 教程的一部分。 tcb 用于线程控制块。 为什么我们应该使用 int32_t* 作为堆栈?

您应该使用指向有符号指针而不是无符号指针没有特别的原因。

您可能永远不会直接取消引用此指针来访问堆栈上的单词。如果您确实想访问堆栈上的数据,其中一些将被签名,一些将被签名,而一些则两者都不是(字符串等),因此指针类型将无法帮助您。

当您想传递一个指针但从不取消引用它时,一种约定是使用指向 void 的指针,但该约定在嵌入式系统代码中并不流行。

使用指向 32 位整数的指针的一个原因是建议该指针至少是字对齐的。如果您打算遵守 ARM EABI(您应该这样做),那么堆栈在每个符合 EABI 的函数的入口处应该是双字(64 位)对齐的。为了暗示这种情况,您甚至可能想要使用 (u)int64_t 指针。这可能会产生误导,因为并非堆栈上的所有内容都是 64 位或 32 位对齐的,只是整个帧。