打印

转:uCOS-II移植的一点心得

[复制链接]
1470|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
6019赵文|  楼主 | 2010-12-5 16:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uCOS-II是一种十分优秀实时操作系统,其在NASA的认证通过直接说明了其优秀及稳健的性能,同时由于其完全open,所以受到广大开源爱好者的喜爱。uCOS-II简单明了,同时绝大部分代码都采用ANSI C编写(除了与CPU相关代码外),所以学习起来十分容易,是嵌入式学习乃至操作系统学习最好的入门OS之一。

我主要想讲一下自己最近移植uCOS-II的心得,因为最近也在学习操作系统,所以这段日子对于uCOS-II的学习的确也让我对于操作系统有了一个实际深刻的认识。

uCOS-II移植其实十分简单。对于一个处理器,需要做的工作只有:修改三个文件――os_cpu_c.c、os_cpu.h、os_cpu_a.asm(ASM文件根据编译器不同而又有一些不同)。

用另一种方式说,需要做的工作就是修改五个函数:

1、os_cpu_c.c:OSTaskStkInit;

2、os_cpu_a.asm:OSStartHighRdy、OSCtxSw、OSIntCtxSw、OSTickISR;

OSTaskStkInit函数是针对CPU压栈的函数,需要模仿出CPU初始化后的寄存器状况。也使需要修改的唯一一个C语言函数。其他的都是汇编函数。

如果我们可以从uCOS-II官方网站上找到相同CPU或是相似的同一家族的CPU移植代码,那么我们的移植工作将会简单得多。因为至少我们可以只用了解这个处理器的内部结构,而不用细致的了解其汇编指令等很多繁琐而没有意义的事情(有的处理器你可能一辈子不再用它,了解得太细致只是在浪费时间)。

本文来自: (www.91linux.com) 详细出处参考:http://www.91linux.com/html/arti ... 20081213/14654.html

相关帖子

沙发
6019赵文|  楼主 | 2010-12-5 16:06 | 只看该作者
譬如,此次我要做的是将uCOS-II移植到瑞萨M16C/62A上,而官方网站上只有其62P的移植代码,于是乎我就将二者的datasheet在CPU的寄存器、中断部分仔细比对,发现二者区别很小。最大的区别恐怕就在CPU内部寄存器中的INTBL和PC寄存器二者顺序相反吧,这只要在相关部分注意就可以了,所以很容易就搞定了CPU相关代码部分。

总结一下移植中浪费我时间的几个小错误吧,这完全是个人粗心导致的失误:

1、在os_cpu.h文件中需要用宏定义将OS_TASK_SW指向OSCtxSw函数,而我开始像以前一样直接将OSCtxSw函数与0号软终端链接起来,结果发现函数调用不成功。后来直接用宏定义将OS_TASK_SW define为OSCtxSw函数,初步调试通过,即验证OSCtxSw函数正确,但是到后来调用任务的时候却发现任务切换不正常,不得不重新将函数与中断结合起来,当然就不能还是0号中断了,而是改为一个比较保险的软终端,这个问题纠结了很长时间。

2、在看书的时候不仔细直接导致我犯了一个大错误。起初以为task只要是能够达到功能的死循环即可。所以每个task函数都是while(1)或者for(;;;),但是我没有注意到一点就是每个task里面都应该有OSTimeDly()函数,否则将导致任务之间不能跳转。所以最初的实验现象是永远只有一个任务在运行,但是任务不能切换……

3、未注意到版本之间的区别。我们知道在新版本的uCOS-II中,添加了一个文件os_tmr.c,主要是在timer上面做了很大的调整,但是我没有注意到这一点,仍旧按照老版本的方法调试,导致函数调用让我完全不知所措。最后注意到os的源代码的不同,仔细阅读源代码之后知道了其用法,其实如果不需要timer太强大的功能,只要在os_cfg.h文件中将OS_TMR_EN设置为0即可。这在习惯老版本调试方法的同学而言是很好的方法
本文来自: (www.91linux.com) 详细出处参考:http://www.91linux.com/html/arti ... 081213/14654_2.html

使用特权

评论回复
板凳
3B1105| | 2010-12-5 16:31 | 只看该作者
有具体点的一直步骤吗?

使用特权

评论回复
地板
huzixian| | 2010-12-5 17:32 | 只看该作者
修改汇编部分是不是需要掌握很多汇编指令才可以,关键是找不到在哪修改啊!

使用特权

评论回复
5
爱在2012| | 2010-12-6 10:29 | 只看该作者
如果有更详细的就好了。

使用特权

评论回复
6
areshan| | 2010-12-6 11:20 | 只看该作者
我刚看UCOS的移植,看周立功的移植的任务切换没有弄明白,不就是入栈,出栈吗?不过他的代码把R12,R0--R3分开保存,也没哟什么顺序,让我很不解!!!!!!

使用特权

评论回复
7
我爸是李刚| | 2010-12-11 23:17 | 只看该作者
貌似还要写一个头文件的

使用特权

评论回复
8
yoyowodeai| | 2010-12-12 00:12 | 只看该作者
楼主QQ啊,请教一下啊!

使用特权

评论回复
9
linas| | 2010-12-12 18:57 | 只看该作者
真长啊,慢慢看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

1515

帖子

1

粉丝