仓库严格来说应该叫做栈,栈(Stack)是限制仅在一端进行刺进或删去操作的线性表。因此,对栈来说,能够进行刺进或删去操作的一端端称为栈顶(top),相应地,另一端称为栈底(bottom)。不含元素的空表称为空栈。我们仓库只允许在一端进行操作,因此依照后进先出(LIFO-Last In First Out)的原理运作。
从栈顶的界说来看,栈顶的方位是可变的。空栈时,栈顶和栈底重合;满栈时,栈顶离栈底最远。ARM为仓库供给了硬件支撑,它运用一个专门的寄存器(仓库指针)指向仓库的栈顶。而且7种形式都有各自独立的仓库指针,也便是有各自独立的仓库空间。但这儿的仓库和uC/OS操作系统的使命仓库又有差异,uC/OS的每个使命都有自己的仓库,要是把uC/OS移植到ARM上,能够凭借ARM的仓库指针来完成。存储器仓库可分为两种:
向上成长:向高地址方向成长,称为递加仓库
向下成长:向低地址方向成长,称为递减仓库
仓库指针指向最终压入的仓库的有用数据项,称为满仓库;仓库指针指向下一个要放入的空方位,称为空仓库。这样就有4中类型的仓库一共递加和递减的满仓库和空仓库的各种组合。
满递加:仓库经过增大存储器的地址向上增加,仓库指针指向内含有用数据项的最高地址。指令如LDMFA,STMFA等。
空递加:仓库经过增大存储器的地址向上增加,仓库指针指向仓库上的第一个空方位。指令如LDMEA,STMEA等。
满递减:仓库经过减小存储器的地址向下增加,仓库指针指向内含有用数据项的最低地址。指令如LDMFD,STMFD等。
空递减:仓库经过减小存储器的地址向下增加,仓库指针指向仓库下的第一个空方位。指令如LDMED,STMED等。
有一点需求留意的是,尽管ARM处理器核关于两种成长方法的仓库均支撑,但ADS的C言语编译器仅支撑一种方法,即从上往下长,而且有必要是满递减仓库。所以STMFD等指令用的最多。