您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

uCOS51移植心得[社区]

时间:2007-1-20栏目:电子通信论文

sp;              |         |        | |        OSStkStart---->| 不关心 | -1 低地址
*                      |         ---------- -                       ----------
*                      \-------->|  长度  | 低地址                   系统堆栈
*                                ----------
*                                 用户堆栈              长度=SP-OSStkStart
********************************************************************

       TCB结构体中OSTCBStkPtr总是指向用户堆栈最低地址,该地址空间内存放用户堆栈长度,其上空间存放系统堆栈映像,即:用户堆栈空间大小=系统堆栈空间大小+1。

       SP总是先加1再存数据,因此,SP初始时指向系统堆栈起始地址(OSStack)减1处(OSStkSta

rt)。很明显系统堆栈存储空间大小=SP-OSStkStart。

       任务切换时,先保存当前任务堆栈内容。方法是:用SP-OSStkStart得出保存字节数,将其写入用户堆栈最低地址内,以用户堆栈最低地址为起址,以OSStkStart为系统堆栈起址,由系统栈向用户栈拷贝数据,循环SP-OSStkStart次,每次拷贝前先将各自栈指针增1。

       其次,恢复最高优先级任务系统堆栈。方法是:获得最高优先级任务用户堆栈最低地址,从中取出“长度”,以最高优先级任务用户堆栈最低地址为起址,以OSStkStart为系统堆栈起址,由用户栈向系统栈拷贝数据,循环“长度”数值指示的次数,每次拷贝前先将各自栈指针增1。

       用户堆栈初始化时从下向上依次保存:用户堆栈长度(15),PCL,PCH,PSW,ACC,B,DPL,DPH,R0,R1,R2,R3,R4,R5,R6,R7。不保存SP,任务切换时根据用户堆栈长度计算得出。

       OSTaskStkInit函数总是返回用户栈最低地址。

       操作系统tick时钟我使用了51单片机的T0定时器,它的初始化代码用C写在了本文件中。

    &nbs

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

下页更精彩:1 2 3 4 下一页