单片机课件 RTX51实时操作系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第11章 RTX51实时操作系统 章 实时操作系统
单片机原理、接口及应用 单片机原理、
第11章 RTX51实时操作系统 章 实时操作系统
内 容 提 要
★ 前言 ★ RTX51 系统特点 ★ RTX51 的程序结构 ★ RTX51的功能函数 的功能函数 ★ RTX51的任务调度 的任务调度 ★ RTX51的系统配置 的系统配置 ★ RTX51的应用举例 的应用举例 ★ 小结
第11章 RTX51实时操作系统 章 实时操作系统
11.1 前言
RTX51是一款小巧的针对基于 是一款小巧的针对基于8051系列嵌入式系统的多任 是一款小巧的针对基于 系列嵌入式系统的多任 务实时操作系统。它的使用可以简化比较复杂、 务实时操作系统。 它的使用可以简化比较复杂 、 有严格时 间限制的软件的设计过程。 间限制的软件的设计过程。RTX51主要有两个不同的可用 主要有两个不同的可用 版本: 版本: ①RTX5lFull版。这里称之为 的标准版, 版 这里称之为RTX51的标准版,既可以以循环 的标准版 方式执行任务,也可以按4 (Round 一Robin )方式执行任务,也可以按 级任务优 先级的方式切换不同优先级的任务。 先级的方式切换不同优先级的任务。标准版以并行方式工 作,支持中断管理,信号和消息可以通过邮箱系统在不同 支持中断管理, 任务之间传递。 任务之间传递。
第11章 RTX51实时操作系统 章 实时操作系统
Tiny版本使用了8051的定时器 和定时器0 版本使用了8051的定时器0 RTX51 Tiny版本使用了8051的定时器0和定时器0的中断 信号。SFR中的全局中断允许位或定时器 中的全局中断允许位或定时器0 信号。SFR中的全局中断允许位或定时器0中断屏蔽位都可 能使RTX51 Tiny停止运行 因此,除非有特殊的应用目的, 停止运行。 能使RTX51 Tiny停止运行。因此,除非有特殊的应用目的, 应该使定时器0的中断始终开启,以保证RTX51 Tiny的正常 应该使定时器0的中断始终开启,以保证RTX51 Tiny的正常 运行。 运行。 实时操作系统的性能参数对嵌入式系统的应用开发也有 着直接影响,RTX51的性能参数如表11- 所示。 的性能参数如表11 着直接影响,RTX51的性能参数如表11-1所示。
void job1(void) _task_ 1 { while(1) /* 无限循环*/ 无限循环 { counter1++; /*更新计数值 更新计数值counter1*/ 更新计数值 } }
第11章 RTX51实时操作系统 章 实时操作系统
11.4 RTX51的功能函数 的功能函数
RTX51精简版支持的功能函数如表 精简版支持的功能函数如表11-2所示,具体含义分别介绍如下。 所示, 精简版支持的功能函数如表 所示 具体含义分别介绍如下。
ห้องสมุดไป่ตู้
第11章 RTX51实时操作系统 章 实时操作系统
环境下生成代码, 在RTX51 TINY环境下生成代码,需要用到下列工具: 环境下生成代码 需要用到下列工具: C51编译器 编译器 BL51连接 定位器 连接/定位器 连接 A51宏汇编器 宏汇编器 此外,库文件RTX51TNY.LIB必须存放在环境变量 必须存放在环境变量C51LIB 此外,库文件 必须存放在环境变量 所指定的路径下。 所指定的路径下。 Tiny版可以运行在8051的单芯片嵌入式系统上 版可以运行在8051的单芯片嵌入式系统上, RTX51 Tiny版可以运行在8051的单芯片嵌入式系统上, 且不需要任何外部数据存储器, 且不需要任何外部数据存储器,但也不排斥应用程序访问 外部的数据存储器。 Tiny版本可以使用C51所支持的 版本可以使用C51 外部的数据存储器。RTX51 Tiny版本可以使用C51所支持的 所有存储模式。所使用的存储模式只影响应用对象的存储 所有存储模式。 位置。 Tiny的系统变量和应用程序的堆栈区总是存 位置。RTX51 Tiny的系统变量和应用程序的堆栈区总是存 储在8051的片内RAM 8051的片内RAM中 DATA和IDATA)。典型的RTX51 )。典型的 储在8051的片内RAM中(即DATA和IDATA)。典型的RTX51 Tiny应用程序一般运行于SMALL存储模式下 应用程序一般运行于SMALL存储模式下。 Tiny应用程序一般运行于SMALL存储模式下。
第11章 RTX51实时操作系统 章 实时操作系统
②os_clear_signal 函数原型 char os_clear_signal(unsigned char task_id); 清除由task_id说明的任务的信号 功能说明 清除由 说明的任务的信号 如果信号清除成功,此函数返回0值 返回值 如果信号清除成功,此函数返回 值;如果所指定的任 务不存在,则返回-1 务不存在,则返回 ③os_send_signal 函数原型 char os_send_signal(unsigned char task_id); 发送一个信号到task_id说明的任务。如果此任 说明的任务。 功能说明 发送一个信号到 说明的任务 务已在等待一个信号,那么调用函数将使此任务就绪, 务已在等待一个信号, 那么调用函数将使此任务就绪, 准备 执行。否则,信号讲存储在此任务的信号标志中。 执行 。 否则 , 信号讲存储在此任务的信号标志中。 此函数只 能在任务函数中调用 如果执行成功,此函数返回0值 返回值 如果执行成功,此函数返回 值;如果所指定的任务不 存在,则返回-1 存在,则返回
第11章 RTX51实时操作系统 章 实时操作系统
11.4.1 信号控制函数
①isr_send_signal 函数原型 char isr_send_signal(unsigned char task_id); 功能说明 发送一个信号到task_id说明的任务。如果此任务已 说明的任务。 发送一个信号到 说明的任务 在等待一个信号,那么调用函数将使此任务就绪,准备执行。 在等待一个信号,那么调用函数将使此任务就绪,准备执行。 否则,信号讲存储在此任务的信号标志中。此函数只能从中 否则,信号讲存储在此任务的信号标志中。 断函数中调用。 断函数中调用。 返回值 如果执行成功,此函数返回 值 如果执行成功,此函数返回0值;如果所指定的任务 不存在,则返回 不存在,则返回-1 。
第11章 RTX51实时操作系统 章 实时操作系统
11.2 RTX51 系统特点
可以在所有的8051 系列芯片上运行。 RTX51 可以在所有的8051 系列芯片上运行。用户只需 要用标准的C语言编写RTX51 程序,然后用C51 C51编译器编译 要用标准的C语言编写RTX51 程序,然后用C51编译器编译 即可生成代码。其中,仅有少数内容和标准C 语言有差异, 即可生成代码。其中,仅有少数内容和标准C 语言有差异, 这些内容是为了实现任务标识和优先级而设置的。 这些内容是为了实现任务标识和优先级而设置的。RTX51 程序设计需要包含实时运行头文件和必要的库文件, 程序设计需要包含实时运行头文件和必要的库文件,并且 要用BL51 连接/定位器来实现连接。 Keil中 要用BL51 连接/定位器来实现连接。在Keil中,你只需要 在目标选项的Target标签中的Operating中选择RTX在目标选项的Target标签中的Operating中选择RTX-51 Target标签中的Operating中选择RTX Tiny,在你的头文件中加上#include <rtx51tny.h>即可 即可。 Tiny,在你的头文件中加上#include <rtx51tny.h>即可。
第11章 RTX51实时操作系统 章 实时操作系统
#include < rtx51tny.h > int counter0; int counter1; void job0(void) _task_ 0 { os_create_task(1); /*任务 任务l 任务 己准备就绪*/ 己准备就绪 while (1) /*无限循 无限循 环*/ { counter0++; /*更新计数 更新计数 值counter0*/ } }
第11章 RTX51实时操作系统 章 实时操作系统
11.3 RTX51 的程序结构
RTX51Tiny通过循环 ( Round-Robin) 方式来实现多 通过循环( 通过循环 ) 任务,以达到多个无限循环或任务的准并行执行。 任务 , 以达到多个无限循环或任务的准并行执行。 这里的 多任务并不是真正同时执行的, 多任务并不是真正同时执行的,而是使用不同的时间片来 执行,即只是宏观上的同时执行。它将可用的CPU周期分 执行 , 即只是宏观上的同时执行。 它将可用的 周期分 成多个时间片, 成多个时间片 , 由RTX51把这些时间片分配给每一个任务 把这些时间片分配给每一个任务 使用。每个任务只能在预定的时间片里运行。然后, RTX51再切换到另一个己经准备就绪的任务,让它再执行 再切换到另一个己经准备就绪的任务, 再切换到另一个己经准备就绪的任务 一定的时间片。 一定的时间片。 时间片一般是比较短促的,一个时间片大约只有毫秒 时间片一般是比较短促的, 级时间。正是由于这个原因,在用户看来, 级时间。正是由于这个原因,在用户看来,多个任务似乎 是在同时执行的。 是在同时执行的。
第11章 RTX51实时操作系统 章 实时操作系统
的精简版, ②RTX5lTiny版。这里称之为 版 这里称之为RTX5l的精简版,是其标准版 的精简版 的一个子集。它可以很容易地运行在 的一个子集。它可以很容易地运行在8051 的单芯片系统而 不需要任何外部数据存储器。通用性强,系统需求低, 不需要任何外部数据存储器。通用性强,系统需求低,但 功能上受到限制。 功能上受到限制。它只支持循环方式和信号方式的任务切 换,而不支持优先级方式的任务切换。 而不支持优先级方式的任务切换。 由于KEIL C中自带了 中自带了RTX5l的精简版 的精简版RTX5lTiny,事 由于 中自带了 的精简版 , 实上精简版也能够满足绝大部分场合的应用要求, 实上精简版也能够满足绝大部分场合的应用要求,所以以 下只讲解RTX5lTiny的内容,出现RTX51的地方默认为其 的内容,出现 下只讲解 的内容 的地方默认为其 精简版RTX51Tiny。 。 精简版
第11章 RTX51实时操作系统 章 实时操作系统
RTX51 利用了一个由 利用了一个由8051定时器中断信号驱动的定时程 定时器中断信号驱动的定时程 序来实现控制。定时器产生的周期性中断信号用来驱动 RTX51的定时节拍。 的定时节拍。 的定时节拍 RTX51与用户程序中的 与用户程序中的main函数是无关的。用户程序中 函数是无关的。 与用户程序中的 函数是无关的 即使没有main 程序,操作系统也会自动从设定的任务 开始 程序,操作系统也会自动从设定的任务0开始 即使没有 执行。 如果用户程序中已经有了main 函数 , 就必须用人工 函数, 执行 。 如果用户程序中已经有了 方 式 来 启 动 RTX51 。 这 对 于 RTX51 Tiny 版 , 可 以 调 用 os_create_task函数来完成 函数来完成. 函数来完成 下面是一个只使用Round Round任务方式的简单RTX51 下面是一个只使用Round-Robin 任务方式的简单RTX51 程序实例。程序中的两个任务都是简单的计数循环。 程序实例。程序中的两个任务都是简单的计数循环。RTX51 job0函数 设定为任务0 开始执行。 函数( 从job0函数(设定为任务0)开始执行。程序中还有另一个 名为job1的任务(设定为任务l)。系统一旦启动 job1的任务 系统一旦启动, 名为job1的任务(设定为任务l)。系统一旦启动,在job0 执行一段时间后, 就自动切换到job1的执行; job1的执行 执行一段时间后,RTx51 就自动切换到job1的执行;而job1 执行一段时间后,RTX51又切换回job0, 又切换回job0 执行一段时间后,RTX51又切换回job0,… … 如此无限循 环地重复执行下去 。
单片机原理、接口及应用 单片机原理、
第11章 RTX51实时操作系统 章 实时操作系统
内 容 提 要
★ 前言 ★ RTX51 系统特点 ★ RTX51 的程序结构 ★ RTX51的功能函数 的功能函数 ★ RTX51的任务调度 的任务调度 ★ RTX51的系统配置 的系统配置 ★ RTX51的应用举例 的应用举例 ★ 小结
第11章 RTX51实时操作系统 章 实时操作系统
11.1 前言
RTX51是一款小巧的针对基于 是一款小巧的针对基于8051系列嵌入式系统的多任 是一款小巧的针对基于 系列嵌入式系统的多任 务实时操作系统。它的使用可以简化比较复杂、 务实时操作系统。 它的使用可以简化比较复杂 、 有严格时 间限制的软件的设计过程。 间限制的软件的设计过程。RTX51主要有两个不同的可用 主要有两个不同的可用 版本: 版本: ①RTX5lFull版。这里称之为 的标准版, 版 这里称之为RTX51的标准版,既可以以循环 的标准版 方式执行任务,也可以按4 (Round 一Robin )方式执行任务,也可以按 级任务优 先级的方式切换不同优先级的任务。 先级的方式切换不同优先级的任务。标准版以并行方式工 作,支持中断管理,信号和消息可以通过邮箱系统在不同 支持中断管理, 任务之间传递。 任务之间传递。
第11章 RTX51实时操作系统 章 实时操作系统
Tiny版本使用了8051的定时器 和定时器0 版本使用了8051的定时器0 RTX51 Tiny版本使用了8051的定时器0和定时器0的中断 信号。SFR中的全局中断允许位或定时器 中的全局中断允许位或定时器0 信号。SFR中的全局中断允许位或定时器0中断屏蔽位都可 能使RTX51 Tiny停止运行 因此,除非有特殊的应用目的, 停止运行。 能使RTX51 Tiny停止运行。因此,除非有特殊的应用目的, 应该使定时器0的中断始终开启,以保证RTX51 Tiny的正常 应该使定时器0的中断始终开启,以保证RTX51 Tiny的正常 运行。 运行。 实时操作系统的性能参数对嵌入式系统的应用开发也有 着直接影响,RTX51的性能参数如表11- 所示。 的性能参数如表11 着直接影响,RTX51的性能参数如表11-1所示。
void job1(void) _task_ 1 { while(1) /* 无限循环*/ 无限循环 { counter1++; /*更新计数值 更新计数值counter1*/ 更新计数值 } }
第11章 RTX51实时操作系统 章 实时操作系统
11.4 RTX51的功能函数 的功能函数
RTX51精简版支持的功能函数如表 精简版支持的功能函数如表11-2所示,具体含义分别介绍如下。 所示, 精简版支持的功能函数如表 所示 具体含义分别介绍如下。
ห้องสมุดไป่ตู้
第11章 RTX51实时操作系统 章 实时操作系统
环境下生成代码, 在RTX51 TINY环境下生成代码,需要用到下列工具: 环境下生成代码 需要用到下列工具: C51编译器 编译器 BL51连接 定位器 连接/定位器 连接 A51宏汇编器 宏汇编器 此外,库文件RTX51TNY.LIB必须存放在环境变量 必须存放在环境变量C51LIB 此外,库文件 必须存放在环境变量 所指定的路径下。 所指定的路径下。 Tiny版可以运行在8051的单芯片嵌入式系统上 版可以运行在8051的单芯片嵌入式系统上, RTX51 Tiny版可以运行在8051的单芯片嵌入式系统上, 且不需要任何外部数据存储器, 且不需要任何外部数据存储器,但也不排斥应用程序访问 外部的数据存储器。 Tiny版本可以使用C51所支持的 版本可以使用C51 外部的数据存储器。RTX51 Tiny版本可以使用C51所支持的 所有存储模式。所使用的存储模式只影响应用对象的存储 所有存储模式。 位置。 Tiny的系统变量和应用程序的堆栈区总是存 位置。RTX51 Tiny的系统变量和应用程序的堆栈区总是存 储在8051的片内RAM 8051的片内RAM中 DATA和IDATA)。典型的RTX51 )。典型的 储在8051的片内RAM中(即DATA和IDATA)。典型的RTX51 Tiny应用程序一般运行于SMALL存储模式下 应用程序一般运行于SMALL存储模式下。 Tiny应用程序一般运行于SMALL存储模式下。
第11章 RTX51实时操作系统 章 实时操作系统
②os_clear_signal 函数原型 char os_clear_signal(unsigned char task_id); 清除由task_id说明的任务的信号 功能说明 清除由 说明的任务的信号 如果信号清除成功,此函数返回0值 返回值 如果信号清除成功,此函数返回 值;如果所指定的任 务不存在,则返回-1 务不存在,则返回 ③os_send_signal 函数原型 char os_send_signal(unsigned char task_id); 发送一个信号到task_id说明的任务。如果此任 说明的任务。 功能说明 发送一个信号到 说明的任务 务已在等待一个信号,那么调用函数将使此任务就绪, 务已在等待一个信号, 那么调用函数将使此任务就绪, 准备 执行。否则,信号讲存储在此任务的信号标志中。 执行 。 否则 , 信号讲存储在此任务的信号标志中。 此函数只 能在任务函数中调用 如果执行成功,此函数返回0值 返回值 如果执行成功,此函数返回 值;如果所指定的任务不 存在,则返回-1 存在,则返回
第11章 RTX51实时操作系统 章 实时操作系统
11.4.1 信号控制函数
①isr_send_signal 函数原型 char isr_send_signal(unsigned char task_id); 功能说明 发送一个信号到task_id说明的任务。如果此任务已 说明的任务。 发送一个信号到 说明的任务 在等待一个信号,那么调用函数将使此任务就绪,准备执行。 在等待一个信号,那么调用函数将使此任务就绪,准备执行。 否则,信号讲存储在此任务的信号标志中。此函数只能从中 否则,信号讲存储在此任务的信号标志中。 断函数中调用。 断函数中调用。 返回值 如果执行成功,此函数返回 值 如果执行成功,此函数返回0值;如果所指定的任务 不存在,则返回 不存在,则返回-1 。
第11章 RTX51实时操作系统 章 实时操作系统
11.2 RTX51 系统特点
可以在所有的8051 系列芯片上运行。 RTX51 可以在所有的8051 系列芯片上运行。用户只需 要用标准的C语言编写RTX51 程序,然后用C51 C51编译器编译 要用标准的C语言编写RTX51 程序,然后用C51编译器编译 即可生成代码。其中,仅有少数内容和标准C 语言有差异, 即可生成代码。其中,仅有少数内容和标准C 语言有差异, 这些内容是为了实现任务标识和优先级而设置的。 这些内容是为了实现任务标识和优先级而设置的。RTX51 程序设计需要包含实时运行头文件和必要的库文件, 程序设计需要包含实时运行头文件和必要的库文件,并且 要用BL51 连接/定位器来实现连接。 Keil中 要用BL51 连接/定位器来实现连接。在Keil中,你只需要 在目标选项的Target标签中的Operating中选择RTX在目标选项的Target标签中的Operating中选择RTX-51 Target标签中的Operating中选择RTX Tiny,在你的头文件中加上#include <rtx51tny.h>即可 即可。 Tiny,在你的头文件中加上#include <rtx51tny.h>即可。
第11章 RTX51实时操作系统 章 实时操作系统
#include < rtx51tny.h > int counter0; int counter1; void job0(void) _task_ 0 { os_create_task(1); /*任务 任务l 任务 己准备就绪*/ 己准备就绪 while (1) /*无限循 无限循 环*/ { counter0++; /*更新计数 更新计数 值counter0*/ } }
第11章 RTX51实时操作系统 章 实时操作系统
11.3 RTX51 的程序结构
RTX51Tiny通过循环 ( Round-Robin) 方式来实现多 通过循环( 通过循环 ) 任务,以达到多个无限循环或任务的准并行执行。 任务 , 以达到多个无限循环或任务的准并行执行。 这里的 多任务并不是真正同时执行的, 多任务并不是真正同时执行的,而是使用不同的时间片来 执行,即只是宏观上的同时执行。它将可用的CPU周期分 执行 , 即只是宏观上的同时执行。 它将可用的 周期分 成多个时间片, 成多个时间片 , 由RTX51把这些时间片分配给每一个任务 把这些时间片分配给每一个任务 使用。每个任务只能在预定的时间片里运行。然后, RTX51再切换到另一个己经准备就绪的任务,让它再执行 再切换到另一个己经准备就绪的任务, 再切换到另一个己经准备就绪的任务 一定的时间片。 一定的时间片。 时间片一般是比较短促的,一个时间片大约只有毫秒 时间片一般是比较短促的, 级时间。正是由于这个原因,在用户看来, 级时间。正是由于这个原因,在用户看来,多个任务似乎 是在同时执行的。 是在同时执行的。
第11章 RTX51实时操作系统 章 实时操作系统
的精简版, ②RTX5lTiny版。这里称之为 版 这里称之为RTX5l的精简版,是其标准版 的精简版 的一个子集。它可以很容易地运行在 的一个子集。它可以很容易地运行在8051 的单芯片系统而 不需要任何外部数据存储器。通用性强,系统需求低, 不需要任何外部数据存储器。通用性强,系统需求低,但 功能上受到限制。 功能上受到限制。它只支持循环方式和信号方式的任务切 换,而不支持优先级方式的任务切换。 而不支持优先级方式的任务切换。 由于KEIL C中自带了 中自带了RTX5l的精简版 的精简版RTX5lTiny,事 由于 中自带了 的精简版 , 实上精简版也能够满足绝大部分场合的应用要求, 实上精简版也能够满足绝大部分场合的应用要求,所以以 下只讲解RTX5lTiny的内容,出现RTX51的地方默认为其 的内容,出现 下只讲解 的内容 的地方默认为其 精简版RTX51Tiny。 。 精简版
第11章 RTX51实时操作系统 章 实时操作系统
RTX51 利用了一个由 利用了一个由8051定时器中断信号驱动的定时程 定时器中断信号驱动的定时程 序来实现控制。定时器产生的周期性中断信号用来驱动 RTX51的定时节拍。 的定时节拍。 的定时节拍 RTX51与用户程序中的 与用户程序中的main函数是无关的。用户程序中 函数是无关的。 与用户程序中的 函数是无关的 即使没有main 程序,操作系统也会自动从设定的任务 开始 程序,操作系统也会自动从设定的任务0开始 即使没有 执行。 如果用户程序中已经有了main 函数 , 就必须用人工 函数, 执行 。 如果用户程序中已经有了 方 式 来 启 动 RTX51 。 这 对 于 RTX51 Tiny 版 , 可 以 调 用 os_create_task函数来完成 函数来完成. 函数来完成 下面是一个只使用Round Round任务方式的简单RTX51 下面是一个只使用Round-Robin 任务方式的简单RTX51 程序实例。程序中的两个任务都是简单的计数循环。 程序实例。程序中的两个任务都是简单的计数循环。RTX51 job0函数 设定为任务0 开始执行。 函数( 从job0函数(设定为任务0)开始执行。程序中还有另一个 名为job1的任务(设定为任务l)。系统一旦启动 job1的任务 系统一旦启动, 名为job1的任务(设定为任务l)。系统一旦启动,在job0 执行一段时间后, 就自动切换到job1的执行; job1的执行 执行一段时间后,RTx51 就自动切换到job1的执行;而job1 执行一段时间后,RTX51又切换回job0, 又切换回job0 执行一段时间后,RTX51又切换回job0,… … 如此无限循 环地重复执行下去 。