为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

uC_OS-Ⅱ在80C51下的移植[1]

2010-12-23 3页 pdf 200KB 16阅读

用户头像

is_922124

暂无简介

举报
uC_OS-Ⅱ在80C51下的移植[1] uC / OS-II在 80C51下的移植 The Migration of uC / OS-II to 80C51 秦绍华* 陈 涤 QIN Shao-hua CHEN Di 摘 要 本文讨论了嵌入式操作系统 uC / OS-II在 80C51系列单片机上的移植,并针对在 KEIL C51编译器环境下 移植的一些特殊问题进行了阐述,最后简要分析了 uC / OS-II嵌入式操作系统的资源和响应时间问题。 关键词 嵌入式实时操作系统 uC / OS-II Abstract This paper researche...
uC_OS-Ⅱ在80C51下的移植[1]
uC / OS-II在 80C51下的移植 The Migration of uC / OS-II to 80C51 秦绍华* 陈 涤 QIN Shao-hua CHEN Di 摘 要 本文讨论了嵌入式操作系统 uC / OS-II在 80C51系列单片机上的移植,并针对在 KEIL C51编译器环境下 移植的一些特殊问进行了阐述,最后简要分析了 uC / OS-II嵌入式操作系统的资源和响应时间问题。 关键词 嵌入式实时操作系统 uC / OS-II Abstract This paper researches the method of porting open source RTOS uC / OS-IIto 80C51,point out the differ- ence about the porting to the compiler of keil c51,and then analyse the resource and the response time of the system. Keywords Real time operating system uC / OS-II * 山东大学信息与工程学院 250100 随着 PC机和因特网的发展,我们已经进入后 PC时代, 尼葛洛庞帝曾经预言嵌入式智能电脑将是 PC和因特网后的 最伟大的发明。正如我们所看到的,嵌入式系统正在通信、 工控、汽车、信息家电、国防等领域得到广泛的应用。嵌入式 实时多任务操作系统(RTOS)可以管理系统中的软硬件资源, 是嵌入式软件的运行平台,在嵌入式系统中应用操作系统可 以使工程师更专注于应用程序的,有利于复杂程序的设 计。而操作系统是一个通用的程序,要在自己的嵌入式系统 中应用操作系统,必须根据所用 CPU的不同来进行移植。本 文将具体论述嵌入式实时多任务操作系统µC / OS-II在 80C51 下的移植,并就在 Keil C51编译器环境下的一些特殊性作了 说明。而且进一步讨论了由于引入操作系统而引起的嵌入 式系统资源的增加和实时性的变化。 1 背景介绍: µC /OS是美国人 Jean J. Labrosse 于 1992年编写的一个 公开源代码的实时多任务操作系统。1998年发布µC / OS-II, 目前的版本为µC / OS-II V2. 7。µC / OS-Ⅱ虽然是一个公开源 代码免费的 RTOS,其性能和安全性却可以与商业产品竞争。 而且已经通过了联邦航空局(FAA)商用航行器认证。可以用 于航空器等与人性命攸关的领域。µC / OS—Ⅱ具有源码公 开,多任务,占先式内核,实时性强,可裁减,便于移植等特 点。 80C51系列单片机具有结构简单,应用灵活等特点,现在 微处理器的性能飞速发展,32 位机的应用逐渐增多,但是 80C51作为 8位机,市场占用率依然很高,现在是 8位机,16 位机,32位机三分天下,特别是在嵌入式 Internet快速发展的 今天,利用廉价的 80C51实现众多传感器、控制器等电子设 备的网络互联,更是具有先天优势,因此在 80C51上移植µC / OS-II是很有意义的。Keil C51是 Keil公司的一款针对 51系 列单片机的编译器,其 uVision2集成开发环境将项目管理、源 代码编辑和程序调试等组合在一起,功能强大,使用方便。 在 Keil C51环境下移植µC / OS-II可以直接进行软件仿真,不 必下载到硬件上运行。 2 µC / OS-II的移植: 移植µC / OS-II必须满足以下条件: a. 处理器的 C 编译器能产生可重入代码; b. 用 C 语言就可以打开和关闭中断(在 C 语言中能嵌 入行汇编也可以); c. 处理器支持中断,并且能产生定时中断; d. 处理器支持能够容纳一定量数据的硬件堆栈; e. 处理器有将堆栈指针和其他 CPU 寄存器读出和存储 到堆栈或内存中的指令。 对于 80C51 及其编译器来说,上面这些条件都是可以满 足的。 µC /OS-II内核分为与处理器无关部分和与处理器相关 部分,其中与处理器相关的文件有三个:C 语言文件 OS- CPU.H,OS- CPU- C. C和汇编文件 OS- CPU- A.ASM。主要移 植工作就是针对这三个文件做一些改写,使之与处理器相适 合。 OS- CPU.H中定义了与处理器相关的常量、宏和类型定 信息技术与信息化 数据采集与嵌入式系统 2005年第 2期 39 义及其他一些与处理器有关的函数。在µC / OS-II中进出代 码的临界区时要开关中断,在 C51中用 EA = 0关中断;EA = 1开中断来实现。这样定义既减少了程序行数,又避免了退 出临界区后关中断造成的死机;C51堆栈从下往上增长,所以 OS- STK- GROWTH定义为 0;µC / OS-II中进行任务切换时通 过执行 OS- TASK- SW()来产生中断,要求处理器提供软中断 或是陷阱指令来完成这个功能,因为 C51没有软中断指令, 所以用程序调用代替,# define OS- TASK- SW()OSCtxSw(), 两者的堆栈相同,而用 RETI指令复位中断系统; OS- CPU- C. C文件中需要用户定义 6 个 C 语言函数: OSTaskStkInit(),OSSTaskCreateHook(),OS2TaskDelHook(),OS- TaskSwHook(),OSTaskStatHook(),OSTimeTickHook()。实际必 须定义的只有 OSTaskStkInit()函数,其它 5 个函数需要声明, 但不一定要有实际内容,它们是由系统函数调用的钩挂函 数,让用户能在操作系统中加入自己需要的一些功能,如果 不需要使用也可以不定义,但要将 OS- CFG. H 中的 OS- CPU- HOOKS- EN设为 0。OSTaskStkInit()函数由任务创建函 数 OSTaskCreate()调用,功能是初始化任务堆栈。初始状态 的堆栈模拟发生一次中断后的堆栈结构,按照中断后的进栈 次序预留各个寄存器的存储空间。它需要的参数是:任务代 码起始地址(task)、参数指针(pdata)、任务堆栈顶端的地址 (ptos)。堆栈初始化工作结束后,OSTaskStkInit()返回新的堆 栈指针,OSTaskCreate()将指针保存在任务的 OS- TCB 中。 在 80C51中要保存的内容有任务地址、PSW、ACC、B、DPL、 DPH、R0-R7,还有由于函数重入引入的仿真栈指针?C- XBP。 OS- CPU- A. ASM 中要改写四个汇编语言函数:OS- StarHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR()。OS- StartHighRdy()主要功能是获取当前就绪的最高优先级任务的 堆栈指针,然后将其寄存器内容恢复,并用 RETI返回;OSCtxSw ()主要功能是进行任务切换,保存相应寄存器内容;OSIntCtxSw ()主要功能是进行中断任务切换,与 OSCtxSw()不同的是在中 断任务切换中要根据不同处理器进行堆栈指针调整,以忽略 由于中断而压入的多余内容,在 80C51中 SP = SP-4;OSTickISR ()主要功能是为系统提供一个时钟资源,在时钟中断到来时 调用系统函数 OSTimeTick()为用户提供延时服务。 3 Keil C51编译器环境下的一些问题: 本来原则上我们不用修改与处理器无关的代码,但是由 于在 Keil C51编译器环境下移植,还要根据编译器的特点进 行一些改写。因为 Keil C51 缺省情况下编译的代码不可重 入,而多任务系统要求并发操作导致重入,所以要在每个 C 函数及其声明后标注 reentrant关键字。pdata、data在 uC / OS-- II中用做一些函数的形参,但它同时又是 Keil C51的关键字, 会导致编译错误,可以把 pdata改成 ppdata,data改成 ddata解 决此问题。OSTCBCur、OSTCBHighRdy、OSRunning、OSPrioCur、 OSPrioHighRdy这几个变量在汇编程序中用到了,为了使用 Ri 访问而不用 DPTR,应该用 Keil C51扩展关键字 IDATA将它 们定义在内部 RAM中。另外,在 Keil C51中尽量使用指定存 储类型的指针(memory-specific pointer)而不使用一般指针 (generic pointer),外部变量都申明为 xdata 类型,指向外部变 量的指针改为 xdata 数据类型的指针,指向函数的指针改为 code 数据类型的指针,这样效率高。 4 资源和响应时间问题: 在嵌入式系统中引入操作系统会增加一些额外的代码 空间,同时操作系统的任务调度和任务间的通信等也会占用 一些内存。这些都会增加系统 ROM和 RAM容量,但随着半 导体技术的发展,CPU的速度和存储器容量不断增长,由于 引入操作系统而增加的消耗,与其带来的便利性和稳定性相 比是可以接受的。uC / OS-II在 80C51中移植后,如果完全应 用,则占用 ROM为 8K左右,占用 RAM为 5K多,如果压缩使 用,即将任务数由 63个减为 16个,不使用统计任务,则占用 ROM为 5K右,占用 RAM为 2K多。另外由于 uC / OS-II中使 用时钟节拍,在 80C51中由定时器 T0提供,因此 T0不能为用 户使用。 嵌入式系统中实时性是一个重要问题,中断响应时间是 实时性的一个重要指标。因为任何系统在进入临界区代码 之前都要关中断,执行完临界区代码之后再开中断,所以 中断延迟 =关中断的最长时间 + 硬件调用中断服务程 序的时间。对于前后台系统, 中断响应时间 =中断延迟 +保存 CPU内部寄存器的时 间。 对于占先式内核, 中断响应时间 = 中断延迟 +保存 CPU内部寄存器的时 间 +内核的进入中断服务函数的执行时间。 对于 uC / OS-II来说,关中断的最长时间发生在消息序列 查询函数 OSQQuery()中,内核的中断服务函数为 OSIntEnter (),以 24MHZ的 AT89C51在 Keil C51环境下进行编译执行为 例,函数 OSQQuery()中关中断的时间为 697us,硬件调用中断 服务程序为 3条指令,6个指令周期,执行时间为 3us,保存 CPU内部寄存器为 21 条指令,34 个指令周期,执行时间为 17us,内核的中断服务函数 OSIntEnter()的执行时间为 5us。 则中断响应时间为 722us。可见应用操作系统增加的一部分 中断响应时间是确定的。而在前后台系统中,中断响应时间 是不确定的,它与后台程序的不同编写有关,(下转第 44页) 数据库与数据仓库 信息技术与信息化 40 2005年第 2期 zgh:= inputbox(‘请输入职工号!’,‘职工号’,’’); clientdataset1 . SetKey; / /职工号在前面已经被设置为 主键 if not clientdataset1 . FindKey([zgh]) then showmessage(‘查无此人’); end; 保存,运行程序。 运行程序结果如图 6所示。 图 6 客户端程序运行结果 本程序经调试运行正常,至此,三层 C / S客户-服务器数 据库应用系统成功实现。 4 小结 三层数据库应用系统开发已经成为目前企业信息开发 的主要趋势。在 Delphi中主要通过 DataSnap等技术来实现, 这是 Delphi的核心技术之一。本文以通俗易懂的方式讲述 三层数据库应用系统开发技术,具有较强的操作性,对于想 要开发此类数据库应用系统的读者一定会有所帮助,作者只 是在这里抛砖引玉,相信读者一定会有更多启示。 参考文献: [1] 张春林,马成勇,刘均 . Delphi7数据库系统设计与开发 [M].北京:清华大学出版社 [2] 陈瑞,叶核亚 . Delphi程序设计实用教程[M].北京:电 子工业出版社 [作者简介] 何定华,男,1972年 9月出生,1995年毕业 于中国地质大学计算机系,1995年至今在武汉职业技术学院 执教,现为武汉职业技术学院讲师。1997 年至 1999 年就读 于华中科技大学研究生班,专业为计算机应用。出版教材 3 本。从事第一线教学与科研,主要方向,程序设计和中小型 软件开发,熟悉《Visual Basic. NET》、《Visual C ++ 》、《ASP. NET》、《Delphi程序设计》、《JAVA》等开发工具。 (收稿日期:2004-12-02 ====================== ) (上接第 40页) 如果系统复杂,为保证多个任务的实时性,前后台系统使用 多个中断,中断嵌套的增多不仅增加了程序的复杂程度,而 且带来了中断时间的不确定性。 所以对于简单的应用,使用前后台系统具有简单,占用 空间小,实时性好等优点,但对于复杂系统,多任务占先式操 作系统的实时性比前后台系统好,中断时间确定,而且将应 用程序分为多个任务后,使应用程序层次化,简化程序的编 写和维护。 5 应用 通过以上改写,在 Keil C51上编译后,uC / OS-II即可下载 到 80C51系列微处理器上运行,也可以在 Keil C51上进行仿 真运行。uC / OS-II移植成功后,即可在此平台上搭建自己的 应用程序,我们已在 Keil C51 环境下仿真运行 uC / OS-II 成 功,并在其上建立多个应用程序进行测试,程序运行稳定。 6 总之,在单片机上应用嵌入式操作系统后,由嵌入式操 作系统来管理硬件和软件资源,大大方便了应用程序的设计 和扩展,也使单片机应用于复杂的场合变得可能。 参考文献: [1] JEAN J. LABROSSE著,邵贝贝译 .嵌入式实时操作系统 uC / OS-II .北京航空航天大学出版社,2003年 [2] 马忠梅编著 .单片机的 C语言应用程序设计 .北京航空 航天出版社,2003年 [作者简介] 秦绍华:山东大学信息与工程学院,研究 生,主要研究方向为嵌入式系统。 陈涤:山东大学信息与工程学院,教授,主要研究方向为 嵌入式系统,计算机自动测试与监控系统,现代通信系统等 (收稿日期:2004-09-29) 数据库与数据仓库 信息技术与信息化 44 2005年第 2期
/
本文档为【uC_OS-Ⅱ在80C51下的移植[1]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索