stackBuffer[1024]这个单元的内容会不会被改写?

2018-11-05 11:55:05 +0000 李述铜

感谢 @paomo113355 的提问

Q:这样写不怕定义其他变量后把stackBuffer[1024]地址里的值改了吗,还是因为这个地址存的值没用所以不用管?

A:首先要注意的是,数组stackBuffer有1024个单元。按正常的理解,对数组单元访问,可以使用stackBuffer[0~1023]。

但是假设我们要获取stackBuffer数组的结束地址(最后一个单元的下一地址),那么应该用什么表示方法?可以使用stackBuffer + 1024,与stackBuffer[1024]一个意思。

有同学担心这里越界!其实不必。

所谓的越界,最终要看是不是读写越过数组区域之外的单元,超过并读写才算真正越界。而这里1024只是获取数组的末端地址,并没有读写。所以这并不算越界。

事实上,数组下标可以随意多长的,2048都可以,语法上并没有问题。如果觉得还是难以理解,写成stackBuffer + 1024。

在后面,汇编指令中用的是stmdb,是先递减堆栈地址,-4,再写入寄存器,所以没有用到stackBuffer[1024]单元,而是先写1023单元,再写1022单元,。。。

在后面的《任务定义与切换原理》课时的FAQ:任务创建时堆栈为什么传入1024,会再提及这个问题。

rtos 无标签

推荐课程

  • 自己动手写嵌入式操作系统

    循序渐进,40余次迭代,写出不到2000行代码的嵌入式操作系统

  • 手把手教你学用嵌入式操作系统

    从实用角度出发,教你如何使用嵌入式操作系统

  • 深入理解ARM调试原理

    深入理解Jlink/Ulink等仿真调试工具背后工作的秘密

  • 轻松掌握Git & GitHub

    掌握当今最流行的版本管理工具,帮你找回过去任意时间的文件版本

  • 自己动手学用Keil(MDK)

    轻松掌握最主流的ARM开发工具Keil(MDK)