




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
RTX51 FULL 学习总结 作者 王健 RTX51 FULL 的最新版本是 V7 根据手册可推测它发布于 2002 年 且在其之后就再也 没有更新过了 可能已经很完善了 但至今 Keil 的最新版本 Keil 5 对它依旧还是支持的 但 Keil 本身不自带 RTX51 FULL 只自带 RTX51 Tiny 如果要使用 RTX51 FULL 需要安装 setup exe 安装好后才可以使用 RTX51 FULL 安装后在目录 C Keil C51 Hlp 下有一个 RTX51 pdf 这便是 RTX51 FULL 的用户指南 同时可在下面这个目录里找到源代码和例程 C Keil C51 Rtx51 第一章 概述 使用多任务实时操作系统的好处 使用多任务实时操作系统的好处 1 通过将一个问题分解成几个独立的 简单易理解的任务 程序可被更容易地实现 测 试和维护 2 模块化方法可将独立的任务用在其它的项目中 3 由于解决了实时和多任务问题 创建程序和测试所需的时间就会大大减少 RTX51 有两种类型的任务 快速任务和标准任务 有两种类型的任务 快速任务和标准任务 快速任务快速任务 主要是响应时间短和中断时间短的任务 每个任务都使用独立的寄存器组且都 有自己的堆栈区 RTX51 同一时间只能支持最多 3 个快速任务 标准任务标准任务 任务切换需要一些更多时间的任务 所有标准任务都共享一个寄存器组和堆栈 区 RTX51 同一时间最多只能支持 16 个标准任务 任务通信与同步 信号信号 信号是任务同步的最快形式 它仅仅是发一个信号给一个等待的任务 没有实际信 息交换 消息消息 通过所谓的邮箱交换消息 任务为了等待一个消息 可能会进入一个队列 消息由 邮箱按照先进先出的原则进行管理 如果有几个任务等待同一条消息 则最先等待的任务 将会收到该消息 信号量 信号量 用于共享资源的无冲突访问 同一时间只能有一个任务占用该资源 如果有几个 任务请求访问 则只有第一个任务获得访问权 其它任务将会被放在等待列表 waiting list 中 直到第一个任务完成对该资源的操作 任务切换 RTX51 包含一个事件驱动的任务切换机制 根据它们的优先级切换任务 抢占式多任务 另外一个根据时间片的任务切换机制可随意使用 轮转调度 RTX51 有 4 种优先级 其中优先级 0 1 2 可分配给标准任务 而优先级 3 是为快速任务 保留的 任务可以等待不同的事件发生 但不需要占用 CPU 时间 这里说的事件可以是收到消息 信号 中断和超时 或者它们的组合 支持三种等待形式 正常的正常的 等待任意时间直到响应的时间发生 条件的条件的 等待的任务永远不会被阻塞 任务可以通过检查相应的返回值来判断事件是否已 经发生 带超时的带超时的 如果相应的事件没有发生 任务不会一直等待下去 而是有一个固定的时间 中断系统 有两种中断处理方法 1 中断由 C51 中断函数来处理 2 中断由 RTX51 的快速任务或标准任务来处理 所需资源所需资源 代码空间 6 8KB 内部 RAM 40 46B 的 DATA 20 200B 的 IDATA 堆栈 寄存器组 0 用于标准任务 1 2 3 用于快速任务或 C51 中断函数 外部 RAM 至少 450B 系统时钟 定时器 0 1 或 2 用户可自己配置 一个简单的例子一个简单的例子 代码参见用户指南 P5 可以发现 RTX51 FULL 与 RTX51 Tiny 的不同是 RTX51 FULL 是有主 函数的 且要在主函数中调用 os start stystem 任务号 来初始化系统并启动一个任务 RTX51 FULL 程序编译通过后会自动进入 Debug 状态 并且自带调试工具箱 特别是 Task State 按钮 可查看所有任务的相关信息 非常牛逼 这一点 C OS II 是没有的 当然 Mailboxes 和 Semaphore 可查看所有邮箱和信号量的相关状态 总之这个调试工具箱很强 大 另外编译后在工程目录里会有一个 MAP 文件 扩展名是 M51 这里面记录着所有任务的 一些信息 包括任务号 任务优先级 所用的寄存器组 任务名称等 例如 能看见如下 信息 TASKID PRIORITY REG BANK SEGMENT NAME 0 0 0 PR PRODUCERTASK SAMPLE 1 1 0 PR CONSUMERTASK SAMPLE 第 3 章 编程概念 在优先级中 3 对应最高优先级 0 对应最低优先级 RTX51 总是将 CPU 分给当前最高优先级的任务 若有另一个更高优先级的任务出现 则 CPU 就会又分给它 或者直到当前任务放弃 CPU 抢占式调度 抢占式调度 如果存在几个优先级为 0 的就绪任务 则在时间片完成后将会发生任务切换 轮转调度 轮转调度 分配任务优先级时 指导原则是 分配任务优先级时 指导原则是 应用程序应首先能工作无误 而不考虑优先级 优先级应用程序应首先能工作无误 而不考虑优先级 优先级 只是起时间优化的作用 只是起时间优化的作用 任务状态任务状态 RTX51 有四种任务状态 就绪 运行 激活 阻塞 等待 睡眠 事件可以是时间到 消息或信号的发送 中断的发生等 这些事件都有可能导致任务的状 态发生变化 可能产生任务切换 任务切换任务切换 RTX51 调度器调度器的工作规则如下 的工作规则如下 1 总是执行就绪态中优先级最高的任务 2 如果就绪态中的任务优先级相同 则就绪时间最长的那个任务 即最先就绪的任务 将成为下一个要执行的任务 3 任务切换只发生在以上条件下 除非不满足 例外 时间片轮转调度 以下条件满足时将发生时间片轮转调度 以下条件满足时将发生时间片轮转调度 1 轮转调度必须使能 在配置文件中设置 2 运行中的任务优先级是 0 且当前没有执行浮点运算 见手册 P28 3 至少有一个优先级为 0 的任务处于就绪态 RTX51 推荐的运行模式是抢占式任务调度 如果用户需要 优先级为 0 的任务可通过轮转 调度的方式被额外管理 任务类型任务类型 RTX51 主要有两种任务类型 快速任务和标准任务 快速任务主要特点有 含有独立的寄存器组 1 2 3 和独立的堆栈区 含有最高的优 先级 优先级 3 因此能中断标准任务 可被 C51 中断函数中断 系统最多只能同时激活 3 个快速任务 标准任务的主要特点有 任务切换时间比快速任务略长 共享寄存器组 寄存器组 0 和 堆栈区 任务切换时寄存器和堆栈的当前内容被保存在外部 RAM 中 可被快速任务中断 可被 C51 函数中断 最多只能同时激活 16 个标准任务 任务声明 void 函数名函数名 void task 任务号任务号 priority 任务优先级任务优先级 1 任务号 范围是 0 255 且每个任务都有一个唯一的任务号 最多可定义 256 个任务 但同一时间只能激活 19 个任务 3 个快速任务 16 个标准任务 任务号最好从 0 顺序 编写 2 任务优先级 0 对应最低优先级 3 对应最高优先级 标准任务 优先级是 0 1 2 快速任务 优先级是 3 如果没有指定优先级 则 RTX51 使用优先级 0 标准任务必须使用寄存器组 0 编译 这是 C51 编译器的默认值 但是 快速任务必须使用 寄存器组 1 2 或 3 编译 这必须使用以下指令来保证 pragma REGSTERBANK x 这里的 x 1 2 或 3 举个例子 标准任务的声明 标准任务的声明 void example1 void task 8 priority 0 或 void example1 void task 8 如果没有指定优先级 则 RTX51 使用优先级 0 快速任务的声明快速任务的声明 pragma REGISTERBANK 1 void example 2 v oid task 125 priority 3 RTX51t 提供两种不同的中断处理方法 1 C51 中断函数 2 RTX51 任务中断 快速任务中断和标准任务中断 其中方法 1 就是一般的中断函数 没什么好说的 方法 2 是使用快速任务或标准任务来处理中断 这种中断处理方法就跟等待一个信号或消 息差不多 中断使能寄存器的处理中断使能寄存器的处理 中断使能寄存器是由 RTX51 管理的 用户不要直接操作 中断使能是通过 os enable isr 中断号 函数来操作的 中断禁止是通过 os disable isr 中断 号 函数来操作的 分配给任务的中断源只有在任务等待中断发生时才会使能 这样防止了非预期中断的发生 如果正在运行的任务是一个快速任务 则所有的任务中断都是禁止的 不是 ISR 中断 一个相对不重要的中断因而不能中断快速任务 如果正在运行的任务是一个标准任务 那么它可以被所有发生的中断所中断 如果另一个 标准任务正在等待其中一个发生的中断 那么它将会被 RTX51 置为就绪态 在系统函数运行期间 所有的标准任务中断都是禁止的 中断优先级寄存器的处理中断优先级寄存器的处理 RTX51 不提供对中断优先级寄存器的管理操作 C51 中断函数的声明中断函数的声明 void 函数名函数名 void interrupt X using n 对于对于 n 这里要着重说明 这里要着重说明 1 使用寄存器组切换 当进入中断时 中断函数将保存寄存器 ACC B DPH DPL PSW 到中断任务的堆栈 由于不是所有的寄存器都要保存 用户必须确保中断函数没有使用 RTX51 用到的寄存器组 寄存器组 0 也不能使用 因为它一般用于标准任务和系统时 钟 寄存器组 1 2 或 3 只能在快速任务没有使用时才能使用 2 不使用寄存器组切换 如果省略这一属性 则所有需要保存的寄存器都会保存到堆栈 中 这会产生更长的运行时间和增加堆栈需求 注意 C51 中断函数的这个 n 永远不要使用寄存器组 0 或被快速任务占用的寄存器组 任务通信 RTX51 提供信号信号和邮箱邮箱来管理任务间的通信 信号 信号 信号是最简单和最快速的任务通信形式 这一般用于没有数据交换的任务同步 等待一个信号 当信号收到后 等待的任务将会又清除该信号标志并使任务进入就绪态或 运行态 发送一个信号 每个任务或中断都可给任意个任务发信号 但每个任务只能保存一个信号 邮箱 RTX51 提供了 8 个邮箱 每个邮箱都有一个号码 消息是固定的两个字节 每个邮箱每个邮箱 里都包含 3 个等待列表 但用户不能直接访问这些列表 但了解这些有助于更好 地理解邮箱 消息列表 消息列表 写入邮箱的消息列表 最多 8 条消息 写等待列表 写等待列表 任务想写一条消息到邮箱的等待列表 最多只能有 16 个任务等待 即已 经写满 读等待列表 读等待列表 任务想读一条小心从邮箱的等待列表 最多只能有 16 个任务等待 发送一条消息给一个邮箱 任务可以给任意一个邮箱发送消息 如果某个邮箱的消息列表 已经满了 那么任务就会被放入写等待列表 它保持等待状态指导有另外的任务从中取走 一条消息腾出空间 从一个邮箱读一条消息从一个邮箱读一条消息 每个任务都可以从任意的邮箱读取消息 如果邮箱的消息列表已 经空 没有消息了 那么任务就会被放入等待状态 进入读等待列表 它将保持等待 状态直到有任务发送消息给这个邮箱 信号量信号量 信号量用于对共享资源的访问 信号量有两种 二值信号量和计数式信号量 而 RTX51 提供了 8 个二值信号量 信号量有等待和发送两种操作 动态内存管理 动态内存管理 最多能创建 16 个内存池 每个内存池最多管理 256 个内存块 每个内存 块大小是固定的 其实跟 C OS II 一样 也是需要事先定义一个数组 浮点运算 以下两种情况使用浮点运算时没有限制 1 系统中只有一个任务使用了浮点运算 2 只有优先级为 0 的任务使用了浮点运算 如果几个不同优先级的任务使用了浮点运算 那么必须使用标准 C51 函数 fpsave 和 fprestore 如果调用了 fpsave 函数 则其它任何 RTX 函数都不能再调用 除非执行了 fprestore RTX51 给所有的标准任务都分配了寄存器组 0 快速任务使用寄存器组 1 2 或 3 使用 pragma REGISTERBAN 0 指令 第 4 章 编程者的参考 本章主要是讲解了 RTX51 提供的一些系统函数 这里只介绍几个 其它的请自行查看手册 没提到的不代表不重要 只是很容易理解 os start system n 初始化系统并启动第一个用户任务 其中 n 是任务号 中断管理函数 os attach interrupt 中断号 该函数的作用是把该中断附加给调用它的那个任务 os enable isr 中断号 os disable isr 中断号 注意 一个中断最多只能分配给一个任务 使用 os attach interrupt 后 对应的中断其实 还没有使能 只有任务使用 os wait 函数等待中断发生时 它才会被使能 include void count task void task 2 priority 0 分配外部中断0给这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沧州市人民医院物理治疗设备操作考核
- 大学舞蹈课件
- 大学老师知识培训课件
- 2025湖南永州市潇湘兴业集团公司选聘急需紧缺专业人才考前自测高频考点模拟试题及完整答案详解1套
- 2025北京协和医院整形美容外科合同制科研助理招聘模拟试卷附答案详解(突破训练)
- 石家庄市中医院处方管理考核考核
- 石家庄市人民医院血型基因分型技术考核
- 2025年萍乡创新发展投资集团有限公司招聘6人模拟试卷及答案详解(各地真题)
- 2025年度黑龙江省气象部门高校毕业生招聘4人(第三批次气象类)考前自测高频考点模拟试题及参考答案详解一套
- 2025中心医院医疗流程优化考核
- 新产品APQP开发计划表
- ICU患者的早期活动
- LY/T 1145-1993松香包装桶
- JJF 1338-2012相控阵超声探伤仪校准规范
- GB/T 9114-2000突面带颈螺纹钢制管法兰
- GB/T 17245-1998成年人人体质心
- 港口集团绩效考核方案
- 华为公司校园招聘个人简历标准版
- 固体化学固体中的扩散
- 学校结核病防控培训课件
- 经典企业商业融资计划书模板
评论
0/150
提交评论