- UID
- 86179
- 性别
- 男
|
我在网上看到一片文章《uCOS51移植心得》可能很多人也都看过,文中写用户堆栈初始化时依次保存下列参数:用户堆栈长度(15),PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。他在移植程序的OS_CPU_C.C中的0STaskStkInit(void (*task)(void *pd),void *ppdata,void *ptos,INT16U opt) reentrant
程序中是这样写的:
{
OS_STK *stk;
ppdata = ppdata;
opt = opt;
stk = (OS_STK *)ptos;
*stk++ = 15;
*stk++ = (INT16U)task & 0xFF;
*stk++ = (INT16U)task >> 8;
*stk++ = 0x00; (1)
*stk++ = 0x0A; (2)
*stk++ = 0x0B; (3)
*stk++ = 0x00;
*stk++ = 0x00;
*stk++ = 0x00;
*stk++ = 0x01;
*stk++ = 0x02;
*stk++ = 0x03;
*stk++ = 0x04;
*stk++ = 0x05;
*stk++ = 0x06;
*stk++ = 0x07;
从这几条语句可以看出,最后七条是保存了工作寄存器0区的R0-R7,为什么只保存0区的呢?
而且按照前面他的文章中所说,语句(1)应该保存PSW,但是PSW在51内的地址不是0X00,而是0XD0,语句(2)应该是保存ACC,同样ACC所在的地址也不在0X0A。后面几条也有这样问题?这是怎么回事? |
|