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

LPC21XX移植UCOS-II小结 05

LPC21XX移植UCOS-II小结 05

并且要修改OSIntCtxSw函数,原始的OSIntCtxSw函数的写法是:
    1、调整栈指针来去掉在调用:OSIntExit,OSIntCtxSw过程中入栈的多余内容
    2、将当前任务栈指针保存到OSTCBCur中(OSTCBCur->OSTCBStkPtr = __SP__)
    3、如果需要则调用OSTaskSwHook
    4、OSTCBCur = OSTCBHighRdy
    5、OSPrio = OSPrioHighRdy
    6、从OSTCBCur中恢复栈指针(__SP__ = OSTCBCur->OSTCBStkPtr)
    7、恢复保存了的CPU寄存器
    8、执行中断返回指令
    新的写法只需将原写法中的1,2去掉即可,因为1,2步只是保存旧任务的栈指针,而新的写
    法中,这些步被移到了“中断服务程序”中的2.2.
    5.注意arm Image for uCOSII for lpc213x 模板中的TargetInit()
    对于很多使用ZLG arm Image for uCOSII for lpc213x 模板的初学者,常常会置疑使用该模板
    后自动生成的target.c文件,和在程序中调用的TargetInit()函数,我和 Zgpswh都是如此,这
    个问题当初困扰了很久:当用户程序中不调用TargetInit()时,发现内核能运行,但是等待机制
    失灵,调用 TargetInit(),很多硬件中断打不开,后来,在很多热心人的指点下解决了,现重新
    总结如下:
    请仔细察看ZLG模板里的target.c文件,这里的TargetInit()如下:
    void TargetInit(void)
    {
    OS_ENTER_CRITICAL();
    srand((uint32)TargetInit);
    VICInit();
    Timer0Init();
    OS_EXIT_CRITICAL();
}
返回列表