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

uCOS II在SkyEye上的移植分析 03

uCOS II在SkyEye上的移植分析 03

OSIntCtxSw() =>OS_EXIT_CRITICAL() => OSIntExit退出后,再根据标志位来判断是否需要进行中断级的任务切换。这种方法的好处是不需要考虑编译器的因素,也不用做计算,但是从实时响应上不是最快,不过刚开始学习这种方法比较容易理解,实现起来也简单。SkyEye 目前的移植就是基于第二种方法的。
 在中断态下进行任务切换,需要特别说明的一个问题是如何获得被中断任务的 lr_svc 。因为进入中断态后,lr 变成了lr_irq ,原来任务的 lr_svc 无法在中断态下获得,这样要得到 lr_svc ,就必须在中断ISR 里面进行一次 cpu mode 强制转换,即对 CPSR 赋值为0x000000d3 ,只有返回到 svc 态之后才能得到 原来任务的 lr ,这个对于任务切换很重要。还有一个需要留意的问题是在强制 CPSR 变成 svc 态之后,SPSR 也会相应地变成 SPSR_irq ,这样就需要在强制转变之前保存 SPSR ,也就是被中断任务中断前的 CPSR 。
 全部移植代码在SkyEye仿真器上调试通过,在SkyEye的主页上可以下载获得。欢迎大家访问我们的主页 【 http://www.skyeye.org 】。 另外在 Linuxfans.org的论坛上 【http://www.linuxfans.org/bbs/forum-58-1.html 】, 有关于 SkyEye 进展的最新讨论, 和另一个嵌入式开源项目【www.lumit.org 】的大量资料下载, 【 http://www.linuxfans.org/bbs/forum-66-1.html 】。希望大家对我们的工作提出建议和批评,更希望有越来越多的人关注和参与进来。
总结
 移植 uC/OS-II到 SkyEye 上,既是对 uC/OS-II 的学习和实验,同时也是对 SkyEye仿真器的验证和实践。uC/OS-II 作为一个优秀的实时操作系统已经被移植到各种体系结构的微处理器上,也是目前较为常用的公开源码的实时内核。从这里入手学习嵌入式系统开发的基本概念,以及在 SkyEye 里构造一个可以运行的RTOS,能够使我们更深入地了解嵌入式开发的流程,在没有硬件的条件下也能对arm的体系结构有个初步的认识。
 在移植 uC/OS-II 到 SkyEye 之后,我得到了一块 Samsung 的arm 评估板,在调通了板子上一些相关硬件(例如串口输出和定时器)的驱动后,仅仅花了不到一天时间就将SkyEye 下的 uC/OS-II 移植到了真实的开发板上,这也说明在 SkyEye 上所做的移植工作是非常有意义和帮助的,完全可以作为嵌入式开发的入门捷径。
 如果大家移植过程中遇到什么问题,欢迎发email和我讨论。

作者简介:李明,清华大学计算机系硕士,北京亚嵌(www.akaedu.org)专职讲师,10年软件开发经验,5年嵌入式行业教学经验。是www.lumit.org开源项目lumit(嵌入式个人学习网)的创办者,《源码开放的嵌入式系统软件分析与实践——基于 SKYEYE 和 arm 开发平台》一书作者, SkyEye 嵌入式开源项目核心开发成员。国内最早将 uC/OS-II 实时操作系统移植到 SkyEye 模拟器上,独立设计并实现CEBus 协议的解释器,并将其移植到 ColdFire 平台;曾负责国家高技术研究发展计划项目-微小型直升机控制系统设计与姿态控制研究项目,并且基于 RTLinux 实时操作系统完成了"国家863计划-虚拟漫游智能机器人平台项目"的控制软件总体设计和实施。 Email: limingth@akaedu.org
返回列表