线程栈一般为一个rt_uint8_t类型的数组。
但是内核代码中栈会保存寄存器的值,为rt_uint32_t的类型。
问题:为什么类型为uint8_t的数组可以存放uint32_t的数据? 谢谢。
这个是位对齐的概念,32位的单片机就是每个地址单元都是32位。如果用到8位的数据实际就是这个地址的低字节。所以在你的6步有一个对齐操作。所以虽然你定位的是一个8位的变量,但实际该变量地址对应的还是32位。
查看野火《RT-Thread内核实现与应用开发实战-基于STM3》本书,实际计算的sizeof(struct stack_frame)的大小应该是64字节,而不是16字节,应该偏移64字节,即可存放32位CPU寄存器的值。
地址是32位的,但是实际内存都是1个字节一个字节存放的。如果是4字节的变量,所占的内存空间例如0x1000~0x1003.