首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

15单片机移植UC0S程序疑问

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。后面几条也有这样问题?这是怎么回事?
返回列表