Board logo

标题: 15单片机移植UC0S程序疑问 [打印本页]

作者: key_word    时间: 2004-8-9 16:25     标题: 15单片机移植UC0S程序疑问

我在网上看到一片文章《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。后面几条也有这样问题?这是怎么回事?




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0