UC_OS_于MCS_51单片机的移植分析与研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开 发 应 用
UC/OS-II于MCS-51单片机的移植分析与研究
葛建新
(河源职业技术学院,广东 河源 517000) 摘 要:本文对嵌入式实时操作系统UC/OS-II于MCS-51单片机的移植做了详细分析,并针对在Keil C51编译器环境下对 移植所面临的一些特殊问题进行了说明。 关键词:MCS-51;嵌入式实时操作系统;UC/OS-II Analysis and Research of uc/os-II to MCS-51 GE Jian-xin (He Yuan polytechnic college,heyuan 517000 China) Abstract:This essay researches the transplant of uc/os-II on MCS-51,and details some peculiar transplant problems in the keil c51 environment. Key words: MCS-51;Embedded real time operating system;UC/os-II
随着电子产品应用软件的系统化以及系统实时性要求的 提高,在16位/32位单片机中广泛使用了嵌入式实时操作系 统。MCS-51作为8位系列单片机,与16位/32位单片机相比, 具有结构简单、应用灵活、成本低廉等特点,从经济性考 虑,对某些应用场合,MCS-51内嵌实时操作系统是可行的。 同时,UC/OS-II for MCS-51即简单又全面,有意义推广。 1 UC/OS-II介绍 UC/OS-II是一款源码公开的嵌入式实时操作系统,其具 有如下特点:①可移植:绝大部分UC/OS-II代码用移植性很 强的ANSI C语言实现,因此UC/OS-II可以在绝大多数8、16、 32位微处理器、微控制器及数字信号处理器上运行。②可裁 剪:用户可以在应用程序中通过#define constants来定义所 需的UC/OS-II功能模块,以减少不必要的存储器空间开支。 ③占先式:UC/OS-II属完全占先式的实时内核,总是运行就 绪状态下优先级最高的任务。④多任务:可管理64个任务, 支持56个用户任务,赋予每个任务不同的优先级。⑤中断管 理:中断可使正在执行的任务暂时被挂起,如果优先级更高 的任务被唤醒,则高优先级的任务在中断嵌套全部退出后立 即执行。中断嵌套可达255层。⑥其他特点:可固化、可确 定性,稳定性、可靠性强。 2 UC/OS-II的移植 UC/OS-II的移植必须具备的条件:①处理器的C编译器 能产生可重入型代码;②处理器支持中断,并能产生定时中 断;③用C语言就可以开/关中断;④处理器能支持一定数量 的数据存储硬件堆栈;⑤处理器有将堆栈指针以及其他 CPU寄存器的内容读出、并存储到堆栈或内存中去的指令。 对于MCS-51单片机及其编译器来说,上面这些条件都 是可以满足的。 UC/OS-II内核分为与处理器无关部分和与处理器相关部
收稿日期:2009-02-16 修回日期:2009-03-15
分,其中与处理器相关的文件有三个:C语言文件OS_CPU.H、 OS_CPU_C.C和汇编文件OS_CPU_A.ASM。主要移植工作就是针 对这三个文件做一些改写,使之与处理器相适合。 OS_CPU.H中定义了与处理器相关的常量、宏和类型及其 他一些与处理器有关的函数。在UC/OS-II中进出代码的临界 区时要开关中断,在MCS-51中用EA=0关中断;EA=1开中断来 实现。这样定义既减少了程序行数,又避免了退出临界区后 关中断造成的死机;OS_STK_GROWTH定义为0,因MCS-51堆栈 从 下 往 上 增 长 ; UC/OS-II中 进 行 任 务 切 换 时 通 过 执 行 OS_TASK_SW()来产生中断,要求处理器提供软中断或是陷阱 指令来完成这个功能,因为MCS-51没有软中断指令,所以用 程序调用代替,#define OS_TASK_SW() OSCtxSw(),两者的 堆栈格式相同,而用RETI指令复位中断系统。 OS_CPU_C.C文 件 中 需 要 用 户 定 义 10个 C 语 言 函 数 : OSTaskStkInit(), OSTaskCreatHook(), OSTaskDelHook(), OSTaskSwHook(), OSTaskStatHook(), OSTaskIdleHook(), OSTCBInitHook(),OSTimeTickHook(),OSInitHookBegin(), OSInitHookEnd()。实际必须定义的只有OSTaskStklnit()函 数,其它9个函数需要声明,但不一定要有实际内容,它们 是由系统函数调用的钩挂函数,让用户能在操作系统中加入 自己需要的一些功能,如果不需要使用也可以不定义,但要 将OS_CFG.H中的OS_CPU_HOOKS_EN设为0。OSTaskStklnit()函 数由任务创建函数OSTaskCreate ()或OSTaskCreateExt()调 用,功能是初始化任务堆栈。初始状态的堆栈模拟发生一 次中断后的堆栈结构,按照中断后的进栈次序预留各个寄 存器的存储空间。它需要的参数是:任务代码起始地址 (task)、参数指针(pdata)、任务堆栈顶端的地址(ptos)。 堆栈初始化工作结束后,OSTaskStkInit()返回新的堆栈指 针 , OSraskCreate()将 指 针 保 存 在 任 务 的 OS_TCB中 。 在
作者简介:葛建新(1982-),男,助教,研究方向为单片机技术研究。
33
中国西部科技
2009年3月(下旬)第08卷第09期总 第170期
几个变量在汇编程序中用到了,为了使用Ri访问而不用 DPTR,应该用Keil C51扩展关键字IDATA将它们定义在内部 RAM中。另外,在Keil C51中尽量使用指定存储类型的指针 (memory-specific pointer)而 不 使 用 一 般 指 针 (generic pointer),外部变量都申明为xdata类型,指向外部变量的 指 针 改 为 xdata数 据 类 型 的 指 针 , 指 向 函 数 的 指 针 改 为 code数据类型的指针,这样效率高。 4 结束语 UC/OS-II以源码公开,小内核,多任务,实时性、移 植性强,可靠性、稳定性高等特点越来越受到青睐,应用 越来越广泛。MCS-51作为结构简单、成本低廉的8位系列单 片机,内嵌实时操作系统,易于掌握,同时应用于某些项 目领域,在保证产品性能与质量的基础上,易于减少开发 成本。
参考文献: [1] Jean J.Labrosse著,邵贝贝等译.嵌入式实时操作系统uC/OS II(第二版)[M].北京:北京航空航天大学出版社,2003. [2] 房小翠著.单片微型计算机与机电接口技术[M].北京:国防工业 出版社,2002. [3] 马忠梅著.单片机的C语言应用程序设计.北京:北京航空航天 出版社,2OO3.
8051中要保存的内容有任务地址、PSW、ACC、B、DPL、DPH、 R0-R7,还有由于函数重入引入的仿真栈指针?C_XBP。 OS_CPU_A.ASM文 件 中 需 要 改 写 4 个 汇 编 语 言 函 数 : OSStartHighRdy(), OSCtxSw(), OSlntCtxSw(), OSTickISR()。OSStartHighRdy()主要功能是获取当前就绪 的最高优先级任务的堆栈指针,然后将其寄存器内容恢 复,并用RETI返回;OSCtxSw()主要功能是进行任务切换, 保存相应寄存器内容;OSIntCtxSw()主要功能是进行中断 任务切换,与OSCtxSw()不同的是在中断任务切换中要根据 不同处理器进行堆栈指针调整,以忽略由于中断而压入的 多余内容,在MCS-51中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、OSPrioHishRdy这
(上接第19页) 满1m时振捣一次,添满砼与拱圈模平齐振捣 后,然后迅速安装第二圈圆拱模,依次类推直到连续拼装 和砼浇筑完毕。一般从拼装到浇筑完毕用时24小时,夏秋 季节一般养护36小时可拆模,一个循环用时60小时。拆模 时,自上而下一层一层进行,配合脚手架,注意保护没完 全硬化的砼。每层先抽连接钢筋,拆掉四个连接板,再拆 四个木楔板,拿掉四件拱圈模。拆模后,对窖壁的砼缺 陷,及时用高标号水泥砂浆补强。接下来,配合脚手架, 制作水窖盖木模,在靠近砼壁的位置,预留下人检修孔位 置,浇筑水窖盖砼。再把水窖的底部和砼窖壁用水泥砂浆 抹面防渗。待水窖盖砼硬化后,用砖砌筑下人检修孔。检 修孔内控尺寸为80cm×80cm,高为30cm。为了保证窖内水 质,控制水温,水窖盖覆土20cm厚,覆土面与场院土面齐 平,盖上提前预制的检修孔盖。检修孔盖厚15cm,尺寸与 检修孔外墙面平齐,顶面高于土面25cm,做到美观大方。 有条件的地方,安装手压泵;且在选择水窖位置时,考虑 水窖的排污,用排水管接至较低位置。没有条件的地方, 可从检修孔中取水;定期选在初汛期,人工清洗窖底。使 用水窖,一定要做好窖前的过滤池。水源可以采用屋顶接 水,或场院、路边、沟、季节性溪水 、坡面集雨等。一定 要做好消毒处理,在陕南土石山区严重缺水的地方,要做 饮水安全工程,采用砼圆筒式水窖的工程措施,和消毒等 非工程措施,比有水源的地方,群众同样可以喝上干净卫 生的健康水。另外根据水源的大小,也可以适度发展节水
灌溉,对抗旱保苗、丰富群众菜蓝子工程的发展,提供水 源。 5 该木模施工法优缺点 (1)操作简单 :使用砼圆筒式水窖木模施工法,可组 织10户农户,分摊木料,制成木模,组成农民施工专业 队,轮流为受益农户打窖。 (2)农民专业队施工,人工费低 :受益农户负责备料 和专业队伙食,专业队向受益农户收取200元左右服务费, 群众乐于接受。 (3)木模运输方便,周转次数多达400次甚至更多。 相对于其它窖型,容积大,保温性好,水质易管理。 (4)材料省: 每眼水窖砼量约8m,需细沙3m ,石子 6m ,工程量较小。 (5)就地取材:对于半山的群众,可采用人工碎石, 比到几十里路外拉运河卵石经济的多。 缺点是,每户一眼窖,相对于农民收入来说,投资较 大,但与 我国山区农村经济日益增长的速度相比, 从缺水 地区用水的困难程度来说,再大的投入也是值得的。 6 结论 水窖砼园筒形施工法,木模制作和安装简单,群众轮 流协助,可操作性强,节省组织管理费,省工 省料,适用 性强,政府正确引导,群众可自行施工。可操作性强,具 有大面积推广和应用价值。
参考文献:(略)
3 3 3
34