




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
时钟节拍 一 时钟节拍 一 2008 11 092008 11 09 21 5321 53 时钟节拍是时钟节拍是 C OS II C OS II 运行的基础 其原理就是利用定时器运行的基础 其原理就是利用定时器 中断 每隔一个时钟节拍中断一次 在发生中断时 内核判断是否进行任务切换或者别的操作中断 每隔一个时钟节拍中断一次 在发生中断时 内核判断是否进行任务切换或者别的操作 如果没有时钟节拍 操作系统就不知道什么时候要任务切换了如果没有时钟节拍 操作系统就不知道什么时候要任务切换了 或者说 操作系统不知道什 或者说 操作系统不知道什 么时候来切换任务 任务的切换时一个很被动的过程 每隔固定的一段时间就检查一次 看有么时候来切换任务 任务的切换时一个很被动的过程 每隔固定的一段时间就检查一次 看有 没有比现在正在运行的任务优先级高的任务处在就绪状态 节拍率一般在没有比现在正在运行的任务优先级高的任务处在就绪状态 节拍率一般在 10 10010 100 次之间 越高次之间 越高 则系统的额外负荷就越重 则系统的额外负荷就越重 C OS C OS 中的时钟节拍服务是通过在中断服务子程序中调用中的时钟节拍服务是通过在中断服务子程序中调用 OSTimeTick OSTimeTick 实现的 时钟节拍实现的 时钟节拍 中断服务子程序中断服务子程序 OSTickISR OSTickISR 的代码必须用汇编语言编写 因为在的代码必须用汇编语言编写 因为在 C C 语言里不能直接处理语言里不能直接处理 CPUCPU 的寄存器 的寄存器 voidvoid TimerInitiate unsignedTimerInitiate unsigned charchar Crystal unsignedCrystal unsigned charchar Frequence Frequence Crystal Crystal 晶振晶振 FrenquenceFrenquence 时钟节拍率时钟节拍率 unsignedunsigned longlong temporary 0 temporary 0 temporary 1000000 12 Frequence temporary 1000000 12 Frequence temporary 65535 Crystal temporary temporary 65535 Crystal temporary TMOD TMODTMOD TMOD 0X01 TimerTimer 0 0 工作在方式工作在方式 1 1 TL0 unsignedTL0 unsigned charchar temporary temporary TH0 unsignedTH0 unsigned charchar temporary 8 temporary 8 TR0 1 TR0 1 ET0 1 ET0 1 初始化定时器中断必须紧跟在多任务系统启动之后 一般放在第一个任务中 初始化定时器中断必须紧跟在多任务系统启动之后 一般放在第一个任务中 用协处理器提高用协处理器提高 C C OS IIOS II 的实时性的实时性 清华大学清华大学 冯泽东冯泽东 邵贝贝邵贝贝 引引 言言 C OS II 最多支持 63 个任务 并支持信号量 邮箱 消息队列等多种 进程间通信机制 同时 用户可以根据需求对内核中的功能模块进行裁剪 将 C OS II 应用到嵌入式系统中 对于提高产品的质量 缩短开发周期和降低 成本都有重要的意义 为了保证系统的实时性 C OS II 采用查表策略 使优先级最高的任务 一旦进入就绪态就立刻可以运行 这种查表算法与应用系统的任务数目无关 执行时间是固定值 从而保证了系统的硬实时性 C OS II 实时内核中唯一 一个执行时间受任务数目影响的函数是时钟节拍 时钟节拍的中断服务子程序 需要遍历所有使用延迟函数的任务 故执行时间与任务数目有关 为非固定值 此外 时钟节拍的频率也不能太高 否则会因为 CPU 频繁加载中断服务子程序 导致加重了 CPU 负荷 影响 C OS II 的实时性 Freescale 公司的 16 位 HCS12X 简称 S12X 系列单片机引入了一个协处 理器 名为 XGATE 与普通意义上的浮点协处理器不同 这个协处理器主要 用来处理中断 如果采用协处理器来处理 C OS II 时钟节拍的中断 那么主 CPU 无需频繁加载中断服务子程序 从而保证 C OS II 内核的所有函数执行 时间都为固定值 这样 C OS II 的实时性就得到了保证 还能以提高时钟 节拍中断频率的方法提高应用系统定时的精度 1 1 单片机中的协处理器单片机中的协处理器 HCS12X 系列单片机中的 XGATE 协处理器是精简指令集 RISC 结构的处理器 它的工作时钟频率是 S12X 主 CPU 的 2 倍 主 CPU 初始化系统时可决定使用或禁 用 XGATE 若使用 则 XGATE 在初始化后就独立地运行 并通过双端口 RAM 与 CPU 交换数据 必要时向主 CPU 发中断请求 XGATE 处理完所有的中断后进入休眠态 停止运行 直到下一次中断发生 XGATE 比较适合响应的中断主要是加载频率高的中断 或不带通信缓冲区的 I O 中断 例如 SCI 发送或接收中断 PWM 输出中断等 而对于本身带发送 接收缓冲区的中断 如 CAN 中断 USB 中断等 采用协处理器处理中断优势不 明显 C OS II 的时钟节拍中断是一个频繁发生的中断 所以很适合采用 XGATE 来响应 以下重点介绍如何用 XGATE 协处理器响应 C 0S II 的时钟 节拍中断 2 2 用用 XGATEXGATE 实现实现 C C OS IIOS II 的时钟节拍的时钟节拍 C 0S 11 的时钟节拍中断可以采用单片机的实时中断 Real Time Interrupt RTI 来实现 当然也可以使用定时器中的计数器来产生时钟节拍 原理相同 方法近似 使用 XGATE 来响应 RTI 中断 实现时钟节拍时 XGATE 协处理器和主 CPU 的分工如表 1 所列 点击看原图 XGATE 负责响应 RTI 中断 实现时钟节拍 并完成任务延时计数 在任务 延时完成后 通知 CPU 进行任务调度 另外 XGATE 还用来响应其他中断 在 需要任务调度时通知 CPU 主 CPU 则只负责运行任务 包括系统任务 和任务调 度 只有在需要任务调度时才会加载中断服务子程序 使用 XGATE 来实现时钟 节拍的具体设置步骤如下所述 2 2 1 1 将将 RTIRTI 中断的控制权交给中断的控制权交给 XGATEXGATE 为了将 RTI 中断交由 XGATE 来处理 系统初始化时需要设置 S12X 单片机中 RTI 中断对应的中断控制寄存器 中断控制寄存器组成如下 点击看原图 在 S12X 单片机中 每一个 I O 中断都有一个中断控制寄存器与之对应 中断控制寄存器控制相应的中断是由 S12X CPU 响应还是由 XGATE 来响应 以及 该中断的优先级 中断控制寄存器中 RQST 位为 1 时 中断由 XGATE 来响应 为 0 时 中断 由 S12X CPU 响应 为了使用 XGATE 来响应 RTI 中断 需要将 RTI 中断对应的中 断控制寄存器的 RQST 位置 1 PRIOLVL 2 0 保存的是对应中断的优先级 值 越大 对应中断的优先级越高 如果这 3 位均为 0 那么对应中断会被禁用 设置中断控制寄存器可以调用编译器提供的一个函数 ROUTE INTERRUPT 这个函数需要的参数是对应中断的中断向量相对中断向量表基址 0 xFF00 的偏 移量 以及中断控制寄存器的值 设置 RTI 中断控制寄存器的代码如下 RUUTE INTERRUPT 0 xF0 0 x81 其中 0 xF0 是 RTI 中断向量相对中断向量表基址的偏移量 0 x81 是要设置 的中断控制寄存器的值 2 2 2 2 XGATEXGATE 与与 S12XS12X CPUCPU 的数据共享的数据共享 XGATE 实现 C OS II 的时钟节拍和 S12X CPU 实现任务调度 都需要访 问与系统的任务控制块链表相关的变量 因此这些变量需要声明为 XGATE 和 S12X CPU 的共享变量 共享变量的声明需要加上 volatile 类型声明 并使 用 pragma 预处理命令将其放在共享内存中 S12 CPU 的程序中声明如下 在 XGATE 的程序中 需要使用 extern 声明这些变量 具体语句如下 点击看原图 2 2 3 3 XGATEXGATE 与与 S12XS12X CPUCPU 的指针变量变换的指针变量变换 因为 XGATE 的内存空间编址与 S12X CPU 的内存空间编址不一样 所以在指 针变量共享时会存在问题 CPU 的内存空间和 XGATE 的内存空间的差别如图 1 所示 点击看原图 从图 1 中可以看出 在 S12X CPU 的寻址空间中 0 x1000 0 x3FFF 为 RAM 空间 而对 XGATE 来说 RAM 空间的地址范围为 Ox8000 0 xFFFF 如果 XGATE 的程序直接使用 CPU 的指针变量 则会导致 XGATE 访问地址空间 0 x1000 0 x3FFF 该区域对于 XGATE 是 Flash 从而出错 为了正确地共享指 针变量 在 XGATE 中使用 S12x CPU 的指针变量时 需要对指针变量进行变换 S12X 系列中不同单片机成员的地址分配可能有所不同 以 MC9S12XDT512 单片 机为例 其内部共有 8 KB 非分页 RAM 可全都设为 S12X CPU 和 XGATE 的共享 内存 这 8 KB RAM 在 S12X CPU 中的地址为 0 x2000 0 x3FFF 而在 XGATE 中的 地址为 0 xE000 0 xFFFF 地址偏差为 0 xC000 因此 在 XGATE 使用 S12X CPU 的指针变量时 将指针变量的值加偏移量 0 xC000 就可以在 XGATE 程序中正常 使用 下面是 XGATE 程序中一个指针变量变换的代码 点击看原图 在 XGATE 协处理器中有 8 个寄存器 编译器使用其中的 R1 来传递参数 上 面程序中的 R2 R3 是 8 个寄存器中的另外 2 个 2 2 4 4 XGATEXGATE 与与 S12XS12X CPUCPU 的通信的通信 XGATE 处理 RTI 中断时先完成指针变换 然后遍历 C OS II 的所有任务 控制块链表 对需要延时的任务进行延时计数器减 1 操作 若无需任务调度 则 XGATE 回到休眠态 直到响应下一次中断 仅当某任务延时计数器递减到零 时 该任务进入就绪态 需要任务调度时才通知 S12X CPU 进行任务切换 在 XGATE 的中断服务子程序中 中断标志指令 SIF 用于向 S12X CPU 发出中 断请求 该指令置位中断标志位 请求 S12X CPU 继续响应本次 RTI 中断 在 XGATE 的中断服务子程序中使用 SIF 指令的代码如下 其中 R5 是协处理器 XGATE 的 8 个寄存器之一 点击看原图 由于遍历任务控制块链表和各任务延时计数器减 1 的操作 以及无需任务 调度的 RTI 中断响应都由 XGATE 完成了 S12X CPU 只需要响应确实需要进行任 务调度的 RTI 中断 使其中断服务子程序大大简化 点击看原图 这样 CPU 的 RTI 中断服务子程序所要执行的代码是固定的 每次的运行 时间也是固定值 因而 C OS II 的实时性得到了确切的保证 S12X CPU 和 XGATE 的程序流程如图 2 所示 点击看原图 2 2 5 5 设置设置 XGATEXGATE 向量表向量表 为了使 XGATE 正常响应中断 需要把 XGATE 的 RTI 中断服务子程序地址写 到 XGATE 的中断向量表中 XGATE 的中断向量表的写法与 CPU 的中断向量写法 类似 只是 XGATE 的中断子程序可代入一个参数 需要将这个参数也写入中断 向量表 在 XGATE 中断向量表的确定位置 写入 RTI 中断服务子程序地址和参数变 量 就可以使 XGATE 在响应 RTI 中断时进入 RTI 中断服务子程序 XGATE 的中断向量表的写法如下 点击看原图 其中 OSTCBList 是 XGATE 响应 RTI 中断时需要带入的参数 这里这个参 数是 C OS II 任务控制块链表的首地址 XGATE TableEntry 是一个编译器 自定义的结构体变量类型 XGATE VectorTable 是 XGATE 的中断向量表 写 好 XGATE 的中断向量表后 使用 XGATE 实现 C OS II 时钟节拍的设置过程就 完成了 3 3 效果测试与分析效果测试与分析 为了验证用协处理器处理时钟节拍中断的效果 进行如下测试 在同 S12x 单片机上 分别使用和不使用 XGATE 处理 C OS II 的时钟节拍中断 在两种 情况下 建立同样的 10 个任务 时钟节拍中断服务子程序中同样只进行任务控 制块链表遍历和延时计数器减 1 不做任务调度 这样 C OS II 中会有一 个任务总处于就绪态并一直运行 这个一直运行的任务会通过循环计数的方法 在一个 I O 端口上输出一个方波 在同样的总线时钟和同样频率的时钟节拍下 比较两种 C OS II 输出的方波周期的差别 测试的目的是 观察 C OS II 的时钟节拍中断服务子程序的加载 对正 在系统中运行的任务的影响 为了与 XGATE 处理任务控制块链表遍历和延时计 数器减 1 进行对比 未使用 XGATE 的 C OS II 中 S12X CPU 的时钟节拍中 断服务子程序只保留与 XGATE 同样的操作 没有任务调度 也方便对系统中正 在运行的任务输出的方波进行观察 在不使用的 XGATE 的 C OS II 中 S12X CPU 的 RTI 中断的中断服务子 程序代码如下 点击看原图 以上 S12X CPU 中断服务子程序共有 220 条指令 需运行 538 个周期 测试 中采用了 16 MHz 的总线时钟和 16 kHz 的 C OS II 时钟节拍 可以估算出 每次中断服务子程序在 S12X CPU 中的运行时间为 33 6 s 约相当于 62 5 s 时钟节拍的 53 即 S12X CPU 需要用一多半的时间响应时钟节拍中 断 这显然是不可取的 在 C OS II 中用 XGATE 处理时钟节拍中断时 当无需做任务调度时 XGATE 遍历 10 个任务的控制块链表 执行延时计数器减 1 操作 共需要 148 条 指令 由于 XGATE 是 RISC 结构的处理器 指令执行时间多为 1 2 个周期 故 执行 148 条指令共需要 218 个周期 在 32MHz 时钟频率下 执行时间大约 7 s 仅相当于 62 5 s 时钟节拍的 11 这说明 即使使用短至 62 5 s 的时钟节拍 对 X
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司技术分红合同标准文本
- 360推广合同样本
- 手绘效果图-课程教案
- 转供电协议书
- 中学生生命教育主题班会《珍爱生命》教案设计
- 入聘合同样本
- 2025中外技术研发合同范文
- 交易合同范例范例
- 文学社规章制度2篇
- 生命教育教案生命教育教案
- 实时数字孪生数据同步技术-深度研究
- Unit 4 History and traditions Project 说课稿 -2024-2025学年高中英语人教版(2019)必修第二册
- 《浅谈A企业消防安全管理中存在的问题及完善对策研究》6300字(论文)
- 秦汉考古Uooc课程答案
- 《电力建设工程施工安全管理导则》(NB∕T 10096-2018)
- 医疗器械考试题及答案
- 画饼充饥儿童故事绘本 课件
- 心理护理的沟通与技巧
- 开关、插座及其它电气设备技术规格书
- 早期阻断性矫治-乳前牙反颌的矫治(口腔正畸科)
- 手术室护士子宫切除手术护理配合常规
评论
0/150
提交评论