基于实时多任务操作系统_COS_的C8051F系列单片机应用系统开发_图文

基于实时多任务操作系统 μCOS2Ⅱ的 C8051F系列单片机应用系统开发

·39·

基于实时多任务操作系统 μCOS2Ⅱ的 C8051F系列 单片机应用系统开发

黄亮亮 , 朱欣华
(东南大学 仪器科学与工程系 ,江苏 南京  210096)
摘要 :介绍了 μCOS2Ⅱ的工作原理及 C8051F系列单片机的特点 ,讨论了将 μCOS2Ⅱ移植到 C8051F040 单片机应用系统中的方法 。应用系统实现了串口通信及 CAN 通信等任务 。 关键词 :实时多任务操作系统 ;μCOS2Ⅱ; C8051F040; CAN;移植 中图分类号 : TP316; TP368  文献标识码 : A   文章编号 : 1000 - 8829 (2005) 09 - 0039 - 04

Applica tion and D evelopm en t of C8051F M icrocon troller Fam ily Ba sed on RTO SμCO S2Ⅱ
HUAN G L iang2liang, ZHU X in2hua
(Department of Instrument Science and Technology, Southeast University, Nanjing 210096, China)

Abstract: The p rincip le ofμCOS2Ⅱ and the speciality of the C8051F m icrocontroller fam ily are introduced. The m ethod of porting the μCOS2Ⅱ to the app lication system using C8051F040 is also discussed. Several
tasks, such as serial communication and CAN communication, are realized in this system. Key words: RTOS;μCOS2Ⅱ; C8051F040; CAN; porting

  随着微机系统的进一步复杂化和系统实时性需求 的不断提高 ,以及应用软件向系统化方向的快速发展 , 应用实时多任务操作系统 ( RTOS)作为嵌入式设计的 基础和开发平台已逐步成为嵌入式应用设计的主流 。 μCOS2Ⅱ是一个源码公开 、免费的嵌入式操作系统 ,能 成功地移植到各种 16位 、32位单片机上 ,也能移植到 8位单片机应用系统中 。本研究讨论将 μCOS2Ⅱ移植 到以 Cygnal公司的高性能 8 位单片机 C8051F040 组 成的应用系统中的方法及过程 。在移植成功的基础 上 ,编写了包括串口通信和 CAN 通信功能的应用测试 软件 。从结果上看 , CAN 通信 在 μCOS2Ⅱ内 核环 境 中 ,实时性得到了保证 。
1  μCO S2Ⅱ及其工作原理
1. 1 μCOS2Ⅱ简介 μCOS2Ⅱ是由 Jean J Labrosse编写的一种源码公
开的嵌入式实时操作系统 。程序大部分用 C 语言编 写 ,带有少量的汇编 ,适合小型控制系统 ,具有执行效 率高 、占用空间小 、实时性能优良 、可扩展性强等特点 。
收稿日期 : 2004 - 12 - 10 作者简介 :黄亮亮 (1981—) ,女 ,张家港人 ,硕士研究生 ,主要研 究方向为导航制导与控制及嵌入式系统应用 。

最小内核可编译至 2 KB[ 1 ] 。 μCO S2Ⅱ是基于优先级的抢占式实时多任务操作
系统 ,其内核提供了任务管理 、时间管理 、资源和内存 管理 4部分功能 ,没有文件系统 、网络接口 、输入输出 界面 。μCOS2Ⅱ共有 64 个优先级 ,系统占用 8 个 ,用 户可创建 56个任务 。任务的堆栈要占用较大的 RAM 空间 ,空间的大小取决于任务的局部变量 、缓冲区大小 及可能的中断嵌套层数 。应用程序的时间精度由系统
时钟节 拍 决 定 , 一 般 时 钟 节 拍 应 在 10 ~ 100 Hz 之 间 [2]。 1. 2 μCOS2Ⅱ工作原理
μCO S2Ⅱ的工作核心原理是近似地让最高优先级 的就绪任务处于运行状态 。为了保证这个核心 ,它在 调用系统 AP I函数 、中断结束 、定时中断结束时总是执 行调度算法 ,原作者事先计算好数据 ,简化了运算量 , 设计就绪表结构 ,使得延时可预知 。任务切换是通过 模拟一次中断实现的 。
任务切换的整个过程就是 ,用户任务程序调用系 统 AP I函数 , AP I调用 OSSched ( ) , OSSched ( )调用软 中断 OS_TASK_SW ( ) ,即 OSCtxSw ( ) ,返回地址 ( PC 值 )压栈 ,进入 OSCtxSw中断处理子程序内部 。反之 , 切换程序调用 RETI返回紧邻 OS_TASK_SW ( )的下一 条汇编指令的 PC地址 ,进而返回 OSSched ( )下一句 ,

·40·

《测控技术 》2005年第 24卷第 9期

再返回 AP I下一句 ,即用户程序断点 。因此 ,如果任务 从运行到就绪再到运行 ,它是从调度前的断点处运行 。
当产生中断时 ,先关中断进行中断处理 ,在退出前 必须进行任务调度 ,此时调用 OSIntC txSw ( ) ,它与 OS2 CtxSw ( )类似 ,只是对堆栈指针做了简单调整 ,以保证 所有挂起任务的栈结构看起来是相同的 。μCOS2Ⅱ要 求中断的堆栈结构符合规范 ,以便正确协调中断退出 和任务切换 。当任务切换发生在中断退出前 ,此时还 没有返回中断断点 ,先保存现场到 TCB ,等到恢复现场 时再从切换函数返回原来的中断断点 (由于中断和切 换函数遵循共同的堆栈结构 ,所以退出操作相同 ,效果 也相同 ) 。用户编写的中断子程序必须按照 μCOS2Ⅱ 规范书写 。因此 ,任务调度发生在中断退出前是非常 及时的 ,不会等到下一时间片才处理 。
2 C8051F系列单片机的特点
2. 1 C8051F系列单片机的特点 Cygnal公司推出的 C8051F系列单片机将 80C51
系列单片机从 MCU 推向了 SOC (片上系统 )时代 ,其 主要特点是 [ 3 ] :
(1)指令运行速度大大提高 。 C8051F 系列采用 C IP251的 CPU 模式 ,指令以时钟周期为运行单位 。与 8051相比 ,相同的时钟下 ,单周期指令运行速度为原 来的 12倍 ;全指令集平均运行速度为原来的 9. 5倍 。
(2) I/O 从固定方式到交叉开关配置 。C8051F系 列采用开关网络以硬件方式实现 I/O 端口的灵活配 置 。在这种通过交叉开关配置的 I/O 端口系统中 ,单 片机外部为通用 I/O 口 ,内部有输入 /输出的电路单 元 ,通过相应的配置寄存器控制的交叉开关配置到所 选择的端口上 。
(3)为单片机提供了一个完善的时钟系统 。当程 序运行时 ,可实现内外时钟的动态切换 。
(4)从传统的仿真调试到基于 JTAG接口的在系 统调试 。C8051F的 JTAG接口不仅支持 FLASH ROM 的读 /写操作及非侵入式在系统调试 ,而且它的 JTAG 逻辑还为在系统测试提供了边界扫描功能 。
(5)从引脚复位到多源复位 。 C8051F 的多复位 源提供了上电复位 、掉电复位 、外部引脚复位 、软件复 位 、时钟检测复位 、比较器 0复位 、WDT复位和引脚配 置复位 。众多的复位源为保障系统的安全 、操作的灵 活性以及零功耗系统设计带来极大的好处 。
欢迎订阅 2005年《测控技术 》月刊
●订阅代号 : 82 - 533 ●定价 : 10100元 /期

2. 2 C8051F040性能概述 C8051F040在一个芯片内集成了构成单片机数据
采集或控制系统所需要的几乎所有的模拟和数字外设 及其他功能部件 。它的供电电压为 2. 7~3. 6 V ,带有 内部可编程振荡器 。
C8051F040 的 A /D 转 换 部 分 包 括 : 一 个 12 位 ADC0子系统 ,可以测量 12路外部输入和 1路内部温 度传感器输出 ,最高转换速度为 100 kS / s; 一个 8 位 ADC1子系统 ,可以测量 8路外部输入 ,最高转换速度 为 500 kS / s。 C8051F040 的 ADC 有单端输入和差分 输入两种测量方式 ,另外它还集成了跟踪保持电路和 可编程窗口检测器 。同时 , C8051F040有两个 12位电 压方式 DAC。每个 DAC 的输出摆幅均为 0V ~VREF (对应的输入码范围是 0x000~0xFFF) 。
C8051F040的内核采用流水线指令结构 , 70%的 指令的执行时间为 1 个或 2 个系统时钟周期 ,它的最 高时 钟 频 率 可 达 25 MHz。同 时 , 它 具 有 64 KB 的 FLASH ,可以进行在系统编程 ,扇区大小为 512 B ,另 外 ,它还有 64 KB 的外部数据存储器接口 ,可以编程为 复用和非复用方式 。
C8051F040有 8 B 宽的端口 I/O ,所有口线均耐 5 V电 压 。它 可 以 同 时 使 用 SMB us, SP I以 及 2 个 UART串口 。另外 ,它还有可编程的 16 位计数器 /定 时器阵列 , 5个捕捉 /比较模块 , 5个通用 16位计数器 / 定时器以及专用的看门狗定时器 。
除上 述 功 能 外 , C8051F040 还 集 成 了 BOTSH 2 CAN ,它兼容 CAN 技术规范 2. 0A 和 2. 0B , 主要由 CAN 内核 、消息 RAM (独立于 C IP251 的 RAM ) 、消息 处理单元和控制寄存器组成 。CAN 内核由 CAN 协议 控制器和负责消息收发的串行 /并行转换 RX / TX移位 寄存器组成 。消息 RAM 用于存储消息目标和每个目 标的仲裁掩码 。这种 CAN 处理器有 32个随意配置为 发送和接收的消息目标 ,并且每一个消息目标都有它 自己的识别掩码 ,所有的数据传输和接收滤波都是由 CAN 控制器完成的 ,而不是由 C IP251 来完成 。通常 CAN 内核不能直接访问消息 RAM ,而必须通过接口寄 存器 IF1或 IF2来访问 。另外 , C IP251 的 SFR 并不能 直接访问 CAN 内部寄存器的所有单元 ,其配置 CAN、 消息目标 、读取 CAN 状态以及获取接收数据 、传递发 送数据都由 SFR 中的 6 个特殊寄存器来完成 ,其中 CAN0CN、CAN0TST和 CAN0STA 3个寄存器可直接获 取 或 修 改 CAN 控 制 器 中 对 应 的 寄 存 器 , 而 CAN0DATH、CAN0DAL、CAN0ADR 3个寄存器主要用 来访问修改其他不能直接访问的 CAN 内部寄存器 ,消 息处理单元则用于根据寄存器中的信息来控制 CAN 内核中移位寄存器和消息 RAM 之间的数据传递 ,同 时 ,它还可用来管理中断的产生 。

基于实时多任务操作系统 μCOS2Ⅱ的 C8051F系列单片机应用系统开发

·41·

3 移植及应用
由 2. 2中所述的 C8051F040 的性能可知 ,该系列 单片机是一个性能强大的 SOC,因此 ,特别适用于任务 繁重的小型化测控系统 。当芯片具有的功能被较多地
使用时 ,系统要处理的任务就较多 ,编程头绪也多 。为 了简化应用程序的编写思路 ,实现程序模块化 ,提高应 用 程 序 的 实 时 性 和 可 靠 性 , 将 μCOS2Ⅱ移 植 到 C8051F040中就成为一件很有意义的事 。 3. 1 μCOS2Ⅱ的移植
要使 μCOS2Ⅱ正常运行 ,处理器必须满足以下要 求:
①处理器的 C编译器能产生可重入代码 ; ②用 C语言就可以打开和关闭中断 ; ③处理器支持中断 ,并且能产生定时中断 (通常 在 10~100 Hz之间 ) ; ④处理器支持能够容纳一定量数据 (可能是几千 字节 )的硬件堆栈 ; ⑤处理器有将堆栈指针和其他 CPU 寄存器读出 和存储到堆栈或内存中的指令 。
C8051F040微控制器有 64 KB 的程序空间 , 4 KB 的数据空间 (满足 μCOS2Ⅱ对硬件堆栈的要求 )和 256 B 的片内 RAM 区和 5个定时器 /计数器 , 20个中断矢 量 。程序的堆栈可以位于 256 B 内部数据存储器中的 任何位置 ,堆栈深度最大为 256 B ,由于部分变量要存 放在内部存储器 ,因此 ,每个任务占用的空间要小于 256 B ,本研究设置每个任务的空间为 100 B。另外 ,可 以使 用 PUSH 和 POP 指 令 入 栈 和 出 栈 。因 此 , C8051F040满足 μCOS2Ⅱ移植的处理器要求 。
μCOS2Ⅱ的移植只与 4个文件相关 :汇编文件 (OS _CPU _A. ASM ) 、处理器相关 C文件 (OS_CPU. H , OS_ CPU _C. C ) 和 配 置 文 件 ( OS _ CFG. H ) 。其 中 , OS _ CPU. H声明了各种数据类型和宏 ; OS_CPU _A. ASM 则主要是 4 个函数 : OSStartH ighRdy ( ) 、OSCtxSw ( ) 、 OSIntC txSw ( ) 、OSTick ISR ( ) ,完成时间中断 、用户堆栈 和系统堆栈之间的数据交换 , 中断程序一般在 OS_ CPU _A. ASM 中 ,也可以在 C中嵌汇编 ,为了提高系统 的实时性 ,一般在中断程序中只是发送信号量 ,具体操 作在任务中执行 ; OS_CPU _C. C包含 6个简单的 C函 数 : OSTaskStk Init ( ) 、OSTaskC reateHook ( ) 、OSTaskDel2 Hook ( ) 、OSTaskSwHook ( ) 、OSTaskStatHook ( ) 、OSTim 2 eTickHook ( ) ,惟一必要的函数是 OSTaskStk Init ( ) ,其 他 5个函数必须声明但没必要包含代码 。OSTaskCre2 ate ( )和 OSTaskC reateExt ( )通过调用 OSTaskStk Int ( ) 来初始化任务的堆栈结构 ,因此 ,堆栈看起来就像刚发 生过中断并将所有的寄存器保存到堆栈中的情形一
样。

由于 C8051F040 有 4 KB 的 数 据 存 储 器 , 通 过 MOVX指令访问 ,所以将系统源文件中的大部分指针 和变量放到该存储器 。值得注意的是 , C8051F040 的 外部数据存储器也是通过 MOVX访问 ,所以必须确定 EM I0CF寄存器中的模式选择 。
系统的时钟节拍通过定时器 0来控制 ,设置每 20 m s产生一次定时中断 ,因此时钟节拍是 50 Hz,必须注 意的是 ,定时器 0的中断必须在调用 OSStart ( )之后才 能打开 ,否则系统容易崩溃 ,因此中断必须在第一个任 务中打开 。
由于 μCOS2Ⅱ的源文件中有许多函数是在临界区 处理的 ,函数内部先关中断 ,处理完之后再开中断 。如 果在调用之前 ,中断已经关闭 ,则调用函数后有可能使 中断打开 ,引起内部混乱 。因此 ,在调用某些临界区函 数时要确定中断 。
另外 ,多个任务同时调用的函数必须具有可重入 性 ,因此 ,自己编写的函数一般都需带有可重入性 ,在 函数定义后面加 reentrant关键字即可 。有些 C 语言 通用函数也不支持重入 ,例如 ,本研究用的 KE IL 51编 译器 ,它的 p rintf库代码就不支持重入 ,因此 ,在任务 中发送串口数据不能用 p rintf ( )函数 ,只能自己编写 发送函数 。 3. 2 基于 μCOS2Ⅱ的 C8051F040应用系统开发
移植了 μCOS2Ⅱ 的 C8051F040 的每个功能都可 以作为一个独立的任务在系统中运行 ,每个任务都有 自己的堆栈空间 ,可以被其他任务和中断服务程序挂 起。
测试应用程序实现了 4个任务 : Task1是每 1 s发 送 CAN 数 据 包 , Task2 是 每 4 s发 送 CAN 数 据 包 , Task3是处理 CAN 接收到的数据 , Task4是每 2 s发送 串口数据 ,波特率为 9 600 kb / s。程序中设置了两个 不同 ID 的 m essage object用来发送 CAN 数据包 , CAN 总线接收采用中断方式 ,其优先级高于其他任务 ,为了 保证系统的实时性 ,在中断程序中不处理数据 ,只是发 送一个信号量 ,在 Task3中处理 CAN 数据 。发送串口 数据采用的是查询方式 ,按字节发送 。程序中设置 4 个任务的优先级依次为 10, 11, 8, 12,因此 , Task3的优 先级最高 ; Task1 发送的 CAN 数据包的 ID 为 0X001, Task2 发送的 CAN 数据 包的 ID 为 0X002, 因 此 , 在 CAN 传输中 Task1发送的数据包的优先级高 。
整个应用程序的结构如图 1所示 。 在主程序中 ,首先初始化 C8051F040 和 CAN ,并 进行系统初始化 ,调用 O sInit( )函数 ,此函数中创建了 一个空闲任务 ;然后调用 AP I函数 ,创建 4个任务 (不 包括空闲任务 ) ;之后创建一个信号量 CAN _EVENT, 为中断与 Task3 通信所用 ,最后调用 OSStart ( )函数 , OS系统开始运行优先级最高的任务 。 Task3的优先级

·42·

《测控技术 》2005年第 24卷第 9期

最高 ,但是在没收到 CAN _EVENT之前 ,任务一直处于 休眠状态 ,当 CAN 接收器收到数据包后 , Task3进入就 绪态 ,在中断返回时 ,进行任务切换 ,执行优先级最高 的 Task3。在 Task3 还 未 收 到 信 号 量 之 前 , Task1、 Task2和 Task4根据时间延时和优先级的不同各自独 立运行 。从测试结果可以看出 ,当执行 2次 Task1后 , Task4执行 1 次 ,当执行 4 次 Task1 后 , Task2 执行 1 次 ,这说明程序的任务调度和实时性都得到了很好的 保证 。

图 1 各任务在 μCOS2Ⅱ中运行的结构图
另外 ,为了提高代码效率 , CAN 中断服务程序是 用汇编语言编写的 :
CSEG AT 009BH; CAN 中断

LJM P Can ISR

RSEG ? PR ? _? Can ISR ? OS_CPU _A

Can ISR:

U S IN G

0

CLR PU SHALL MOV INC MOV MOV INC MOV MOV INC MOV MOV LCALL LCALL PO PALL RETI

EA;关中断
R0, #LOW (OSIntNesting) @R0;置标志位 ,表明在执行中断程序 R0, #LOW (CAN _EVENT) AR3, @R0 R0 A, @R0 R2, A R0 A, @R0 R1, A _?OSSemPost;发送 CANEVENT信号量 _?O S In tExit;中断结束前进行任务切换

4 结束语

将编写的测试程序下载到 C8051F040 应用系统 中进行了实际的运行测试 ,测试表明 ,基于 μCOS2Ⅱ的

C8051F040应用系统中的各任务工作正常 。这些工作 为正在开发的基于 μCOS2Ⅱ的 C8051F040 应用系统

用于各测控模块小型化的基于 CAN 总线的军用车辆

底盘综合电子系统的开发打下了坚实的基础 。

参考文献 :

[ 1 ]  邵贝贝. μCOS2Ⅱ源码公开的实时嵌入式操作系统 [M ].

北京 :中国电力出版社 , 2001. [ 2 ]  王劲松 ,等. 嵌入式操作系统 μCOS2Ⅱ的内核实现 [ J ]. 现

代电子技术 , 2003, (8) : 48 - 50.

[ 3 ]  潘琢金 ,等. C8051FXXX 高速 SOC 单 片 机 原 理 及 应 用

[M ]. 北京 :航空航天大学出版社 , 2002.



(上接第 35页 )
图 8 E ICAS综合显示面板图

参考文献 :
[ 1 ]  杜建勋. 发动机指示和机组警告原理及应用 [M ]. 北京 : 国防工业出版社 , 1994.
[ 2 ]  盛乐山. 航空电器 [M ]. 北京 :科学出版社 , 1994 [ 3 ]  孙宝元 ,杨宝清. 传感器及其应用手册 [M ]. 北京 : 机械
工业出版社 , 2004. [ 4 ]  何希才. 传感器及其应用 [M ]. 北京 : 国防工业出版社 ,
2001. [ 5 ]  赵继文. 传感器与应用电路设计 [M ]. 北京 :科学出版社 ,
2002. [ 6 ]  孙江宏 ,李良玉. Protel 99电路设计与应用 [M ]. 北京 :机
械工业出版社 , 2002. [ 7 ]  余家春. Protel 99 SE原理图与 PCB设计 [M ]. 北京 :中国
铁道出版社 , 2003. [ 8 ]  赵负图. 传感器集成电路手册 [M ]. 北京 :化学工业出版
社 , 2002.



相关文档

cos嵌入式实时操作系统在c8051f060单片机上的应用
实时多任务操作系统的开发与应用
实时操作系统μCOSⅡ的多任务改进方法
基于实时操作系统的单片机应用系统设计
基于实时操作系统μCOS-II的应用程序开发
_C_OS_嵌入式实时操作系统在C8051F060单片机上的应用
嵌入式实时操作系统μCOSⅡ在C8051F020上的移植
M68HC08单片机实时多任务操作系统及其在航标灯控制中的应用
嵌入式实时操作系统_C_OS_在C8051F020上的移植
嵌入式实时操作系统μCOS Ⅱ原理及应用 第一章
电脑版