世界足球俱乐部杯

登录 免费注册 世界足球俱乐部杯 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

我在51上移植ucosii的心得,希望能给朋友起到点点作用

作者:01dxwlm 栏目:嵌入式系统
我在51上移植ucosii的心得,希望能给朋友起到点点作用
    我相信很多学习RTOS的朋友也和我一样,能够掌握一个外面比较流行的RTOS;拥有一个属于自己的RTOS。我没有学习过操作系统的课程,我对计算机操作系统一点也不熟悉,所以我开始学习rtos没有选择linux而是选择了比较简单的ucosii.我上班的时候学习时间还是比较多的,我在网上下载了邵贝贝翻译的译本介绍ucosii的电子书,看了好几片吧,把ucosii的原理弄清楚了,就想能在51上移植一下,一是加深对ucosii的理解,二是学习移植ucosii的方法。下面就详细介绍我在51下的移植方法。
一.确定编译模式
    由于mcs-51芯片RAM太小,不可能不扩展外部RAM,反正是要扩展外部RAM所以我选择在大模式下编译,这样做有2个好处:1).不要修改原内核中ucosii.h这个文件。2.不要管数据的存取类型。
二.选择ucosii的版本
    ucosii的版本现在有很多了,在我手里的就有2.00,2.52,2.76这三个版本,选择合适的版本很重要,我是选择了2.52这个版本,因为2.00比较老了,我就不说了,2.76我看了下文件结构好象和外面的资料讲的不一样,而2.52的资料到处都是,更重要的是网上有很多移植的资料。
三.处理OS_CFG.h文件
   在开始移植时尽量把这个文件中多设置几个0,因为编译的代码越少出错的机会就少,当然要足够了解这个文件中的每个宏的意义。
四.编写OS_CPU.h和includes.h文件
   这个我就不多说了,随便找个这样的文件改两下就可以了。
五.编写OS_CPU.C和OS_CPU_A.asm文件
   我是这么来做的,我首先在OS_CPU.C和OS_CPU_A.asm文件中写上需要的几个函数,但全部是空函数,这样在编译的时候就不会报错了。
六.把整个项目统一管理起来
   在做好上面的准备工作后,把文件按照书上的说明和其他的例子统一管理起来,然后就编译了,也许在这个时候还会有错误,不要紧,根据你对ucosii的理解一个一个到把他排除,我在做的时候在这个地方也出了错,我后来没有用ucosii.c这个文件了,我直接在工程中把ucosii.c中列出的文件加上去。
在这个时候可以写两个简单的任务去测试程序,并软件反真一下,看程序是否会跑到你想要的地方去。
七.编写需要的函数
   如果上面在第6步编译的时候再也没有错误和警告了,那么说恭喜你了,你已经成功一半了,你只要写少量的代码和修改一点点原内核就大功告成了。
总结:
   移植ucosii到51上也不是一件容易的事情,如何使你的程序跑的快和占用资源少是关键,我在51上的移植我只是我学习ucosii而已,给大家也只是想起个抛砖引玉的作用,希望能给想学ucosii的和正在想移植ucosii的朋友提供一点点参考的作用。我在移植完ucosii后自己也开始写一个小的rtos,我的目标是能在小的RAM的单片机上运行,现在已经完成了,我习惯模组化程序设计,虽然我这个小的RTOS只能管理8个模块,每个模块16个事件,但对我来说基本够了,我认为更重要的一点是,我的rtos能自动调整每个模块运行时间,换句话说哪个模块任务更重,则这个模块的运行时间就会更多。现在我也把我做的这个rtos成功地移植到了MOTOROLA MCU MC68HC908GP32上,感觉效果还不错的。
   我愿意把我移植的ucosii和我自己的rtos共享给大家,我是给大家交流的,请大家也不要把他用到商业上,因为这有很多潜在的bug和危险,对你的一切使用后果我概不负责。
EMAL:smalf@sina.com.    
QQ:   11830067 (请表明是 rtos)
    

2楼: >>参与讨论
saint_bxg
谢谢!
正学ucosii呢,也想自己买块板子做一下移植。
有了楼主的心得。呵呵~~

3楼: >>参与讨论
01dxwlm
我扩展我的rots功能了.
现在我这个小的RTOS能管理36个任务,其中4个保留,1个空闲任务,还剩下31个可用,每个任务能管理16个事件,现在我也把我做的这个rtos成功地移植到了一个16位cpu上,其中这个项目上程序代码超过3万行,产品以经卖到了美国,在下一个产品将卖到德国和日本了。从开始量产到现在还没有出现过由于是rtos而引起bug,感觉效果很不错的了。
其中任务程序形式为
void Task(void)
{
    INT16U wEvent;
    for(; ;)
    {
     wEvent = OSEventPend();  // 如果有事件则执行下面的程序,没有则任务切换.
  if(wEvent &(1<<TASKTM))        // 对应发生的时间事件
     {
      // do something
   }
  if(wEvent &(1<<X))            //对应其他事件
  {
   // do something
    }
}我的这个rtos非常适合控制类程序.

4楼: >>参与讨论
Sureal
羡慕ing
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
ucos-ii学习笔记(连载)
RockOS的文件系统设计文档
求助一个UC/OS-II源代码的问题
高手帮我看看 关于函数怎么声明
atmel9200芯片要接LCD模块,请大家给些方案


Copyright © 1998-2006 domainnameq.cn 浙ICP证030469号