学习ARM寻址方法的时分,里边有种寻址为仓库寻址。
ARM7中的寄存器R13便是作为仓库指针SP的。仓库内容的增减,就会影响仓库指针的移动。这个移动方向与仓库的成长方向有关。
ARM7的有两种仓库成长方向。
1.向上成长 在像仓库写入数据后,仓库指针的值变大,也便是向高地址方向成长,这种是递加仓库。
2.向下成长 在像仓库写入数据后,仓库指针的值变小,也便是向低地址方向成长,这种是递减仓库。
要注意的问题不仅仅是仓库增加方向。还要考虑到仓库指针指向的存储单元是否现已保存有仓库数据,或者说入栈时是否能够直接向仓库指针指向的存储单元写入数据。这便是“满仓库”与“空仓库”。
1.满仓库 仓库指针指向最终压入栈的有用数据项,称为满仓库。此刻仓库入栈操作要先调整指针再写入数据;
2.空仓库 仓库指针指向下一个待压入数据的空方位,称为空仓库。此刻仓库的入栈操作的入栈操作要先先写入数据再调整指针。
归纳以上叙说,就能够得到四种仓库类型,分别为满递加,空递加,满递减,空递减。
然后我想到了uc/OS-II中就有与仓库类型密切相关的东西,移植ucOS-II到相应平台上,就要考虑到仓库类型。我看书上提到ADS1.2仓库类型只支撑满递减。此刻我的问题就出来了,仓库类型详细应该是跟MCU有关,而不同的编译器又支撑不同的类型,是不是这样呢,最终我在ADS1.2文件的一个讲ATPCS的PDF中找到了答案,本来便是这样,ADS1.2只能满递减。一下便是PDF中的截图。