RTX51应用笔记
RTX51Tiny实时内核理解
RTX51 Tiny 实时内核理解声明:以下来自网络整理而来并非本人作品,觉得挺容易懂所以放入博客以便后来学习者参考RTX51 Tiny中容易混淆的问题RTX51 Tiny是 Keil uVision中自带的一个小型嵌入式RTOS,具有小巧、速度快、系统开销小、使用方便等优点。
使用RTX51 Tiny能够提高系统的稳定性,优化程序的性能;而且它是为51单片机专门定制的,所以在51单片机上的运行效率比其它一些通用的RTOS性能也要好一些。
但是,由于RTX51 Tiny的相关资料和书籍比较少,大部分只是对程序自带帮助文件的简单翻译,很少进行深入探讨。
下面就RTX51 Tiny使用中经常遇到的一些问题进行探讨。
1 关于时间片的问题RTX51 Tiny使用的是无优先级时间片轮询法,每个任务使用相同大小的时间片,但是时间片是怎样确定的呢?RTX51 Tiny的配置参数(Conf_tny.a51文件中)中有INT_CLOCK和TIMESHARING两个参数。
这两个参数决定了每个任务使用时间片的大小:INT_CLOCK是时钟中断使用的周期数,也就是基本时间片;TIMESHARING是每个任务一次使用的时间片数目。
两者决定了一个任务一次使用的最大时间片。
如假设一个系统中INT_CLOCK设置为10000,即10ms,那么TIMESHARING=1时,一个任务使用的最大时间片是 10ms;TIMESHARING=2时,任务使用最大的时间片是20ms;TIMESHARING=5时,任务使用最大的时间片是50ms;当 TIMESHARING设置为0时,系统就不会进行自动任务切换了,这时需要用os_switch_task函数进行任务切换。
这部分功能是RTX51 Tiny 2.0中新增加的。
2 关于os_wait延时的问题os_wait 是RTX51 Tiny中的基本函数之一。
它的功能是将当前任务挂起来,等待一个启动信号(K_SIG)或超时信号(K_TMO)或周期信号(K_IVL)或者是它们之间的组合。
RTX51 Tiny User Manual
目录总览 (2)实时程序 (5)操作原理 (7)配置RTX51 Tiny (11)使用RTX51 Tiny (14)实例 (17)函数参考 (18)总览RTX51 Tiny是一个实时系统,它允许你创建可同时执行多个功能或任务的应用程序。
在嵌入式应用中这往往是必须的。
虽然可以创建无RTOS实时程序(通过执行一个或多个任务循环),但诸如调度,维护和时序问题,像RTX51 Tiny这样的RTOS可以解决。
一个实时的操作系统可以灵活的调度系统资源,像CPU、内存和任务之间的通信。
RTX51 Tiny是一个功能强大且简单易用的RTOS,适用于所有8051衍生产品。
在Keil C51编译器中RTX51 Tiny是用标准C(ANSI C)编写的。
C语言允许你轻松的定义任务功能而不必进行复杂的栈和变量设置。
RTX51程序需要包含一个特殊的头文件且链接RTX51库到程序中。
1.新特性RTX51 Tiny第二版包含了许多新特性使实时软件开发更容易,如下代码分段RTX51 Tiny现在支持代码分段(需配置文件L51_BANK.A51文件)。
明确任务切换新功能(OS_SWITCH_TASK)可以是一个任务处于就绪状态并立即切换至另一个任务。
任务就绪标志新的RTX51 Tiny库允许给任务设置就绪状态标志,使任务处于就绪状态,在一个时间间隔、超时或接受到信号后恢复运行。
CPU空闲模式RTX51 Tiny允许CPU处于空闲模式定时器中断的用户代码支持开发者可以添加自己的代码到RTX51 Tiny定时器中断中,也可以为自己的例程设置和RTX51 Tiny相同的例程(需配置CONF_TNY.A51)。
支持间隔时间设置OS_REST+INTERVAL允许开发者在混合的时间间隔和信号中调用OS_WAIT来调整超时时间。
此外,RTX51 Tiny已被重新组合以具备灵活性、加速性以及对代码和数据空间要求更小。
RTX51 Tiny第二版在显著减小代码量并具有可扩展性。
实时操作系统RTX51Tiny在教学中的应用
20 0 7年第 5期
福
建 电
脑
3 5
实时操作 系统 R X i 在教 学 中的应用 T 5Tn 1 y
卢 勇威
f广 西 职 业技 术 学 院 电 子 机 械 系 17 广 西 南 宁 5 0 2 9# 3 2 6)
【 要】 摘 :本文探讨ቤተ መጻሕፍቲ ባይዱ了嵌入 式实时操 作 系统 R X 1 iY在教 学中的应 用。 T 5 Tn 嵌入式 实时操作 系统在 实际的应用 中越 来越
它 汽车 . 工业 控 制 等行 业 中都 有 嵌 入 式 系统 的应 用 。 嵌 入式 实 时 换 每一 个 任 务 都有 自己 的 上下 文 . 是 每 次 被 调 度运 行 时所 要 在 P 操 作 系统 的 基 础 上编 写 的 各 种 应 用 程 序 与通 常 的前 后 台 系统 程 求 C U 寄存 器 的 状 态 每次 新 任务 被 创 立 时 . 内核 也 创立 一个 和维 护 认 为 相关 的 序相比. 具有 以下 优 势 : 能 更 强 大 、 功 设计 周 期 更 短 、 序更 容 易 程 C Ts ot o ) C oB c 移 植 与扩 展 。 因此 . 嵌入 式 实 时操 作 系统 在 程 序 设 计 中 的应 用 已 任务 控制 块 T B(akC nrl 1 k 。T B主要 包 括 三项 内容 : T Yt k i : s—d任 务 的 代 码 人 口地 址 , 于 C D R [s_d t k i a ]a 位 O E空 经 是 非常 重 要 的技 术 。 关 课 程 为 了 让 学 生 掌握 嵌 入 式 操 作 系统 的 程序 设 计 方法 和思 由于各 种 原 因 .我 系 并 没有 开设 嵌 入 式 实 时操 作 系统 的 相 间 , 节 为一 个 单 位 。 2字 Pt kd: si 务 所 使 用 堆 栈 栈 底 位 置 , 于 I A A空 [ si1t kd任 a a 位 D T
RTX51 Tiny学习
Round-robin 任务切换RTX51 Tiny可以配置成使用round-robin多任务。
Round-robinp容许quasi-parallel执行多任务。
任务并不是连续执行的,而是分时间片执行的(可用的CPU时间被分成时间片,RTX51 Tiny把时间片分配给各个任务)。
时间片的时间很短(以毫秒为单位),所以任务看起来像连续执行一样任务在分配给他的时间片内执行(除非放弃)。
然后切换到下一个就绪的任务。
这个时间片在RTX51 Tiny Configuration.配置文件中定义.下面的例子是一个使用round-robin多任务的RTX51 Tiny的程序。
这个程序中的两个任务都是循环计数器。
RTX51 Tiny执行称为job0的任务0。
这个函数创建了另一个任务job1。
Job0执行完它的时间片后,RTX51 Tiny开始执行job1。
Job1执行完它的时间片后,RTX51 Tiny又返回到job0开始执行。
然后再切换到job1,如此循环。
#includeint counter0;int counter1;void job0 (void) _task_ 0 {os_create (1);/* mark task 1 as ready */while (1) {/* loop forever */counter0++; /* update the counter */}}void job1 (void) _task_ 1 {while (1) { /* loop forever */counter1++; /* update the counter */}}注意:除了一个任务的时片到时,也可以使用函数os_wait 或函数os_switch_task通知RTX51 Tiny可以切换到另一个任务。
函数os_wait挂起当前任务直到特定的事件发生。
在这期间任何其他的任务都可以执行。
Cooperative 任务切换如果你禁止了round-robin多任务,你必须设计并执行你的任务从而让他你们以cooperativ方式工作。
#KEILRTX51TINY内核分析(51单片机嵌入式系统)学习操作系统
KEIL RTX51 TINY 内核的分析纲领:简要介绍 RTX51TINY 的基本情况和使用方法;详尽分析这个内核的任务管理和内存管理的运行系统,并给出其主要代码流程图。
要点词:单片机实时操作系统的RTX511 RTX51 简介1.1 RTX51 TINY 特点RTX51 是 KEIL 企业开发的用于 8051系列单片机的多任务实时操作系统。
它有两个版本, RTX51 FULL 和 RTX51 TINY 。
RTX51TINY 是 RTX51 FULL 的子集,仅支持准时间片循环任务调动,支持任务间信号传达,最大 1 6个任务,能够并行地利用中止。
拥有以低等待操作:超时、另一个任务或中止的信号。
但它不能够进行信息办理,不支持储藏区的分派和释放,不支持占先式调动。
RTX51TINY 一个很小的内核,完好集成在KEIL C51编译器中。
更重要的是,它仅占用 800字节左右的程序储藏空间,能够在没有外放数据储藏器的 8051系统中运行,但应用程序依旧能够接见外面储藏器。
RTX51 TINY 下文简称为内核。
1.2 RTX51 TINY 的使用内核完好集成在KEILC51编译器中,以系统函数调用的方式运行,因此能够很简单地使用KEILC51语言编写和编译一个多任务程序,并嵌入到本质应用系统中。
内核供给以下函数供给用程序引用:①char os_create_task(task_id>。
② char os_delete_task(task_id>。
③char os_send_signal(task_id>。
④ char isr_send_signal(task_id> 。
⑤ char os_clear_signal(task_id> 。
⑥ char os_running_task_id(void> 。
⑦ char os_wait(event_sel,ticks,dummy> 。
第17章 RTX51操作系统原理及实现
换到其他准备运行的任务,然后这个任务执行一段时间。 时间片的长度使用变量TIMESHARING定义。
RTX51操作系统的任务
--切换任务
RTX51 Tiny中,负责分配处理器给一个任务的那部分称 为调度器。根据下面的规则,RTX51 Tiny调度器定义所 运行的任务:
如果发生下面的情况,则打断当前正在运行的任务:
任务调用os_wait函数,并且没有产生指定的事件; 执行任务的时间大于定义的轮询超时时间;
如果发生下面的情况,则启动其他任务:
没有运行其他任务; 将要启动的任务处于READY或者TIME_OUT状态;
RTX51操作系统内核函数
注:在调用这些内核函数时,必须包含头文件rtx51tny.h。
char isr_send_signal(unsigned char task_id)
功能:该函数发送信号到task_id所确定的任务。 如果指定的任务已经在等待信号,则该函数调用将准备用于执行的任 务。 否则,保存信号到任务的信号标志内。该函数只能被中断函数所调用。
返回值:0,表示成功;-1,表示任务不存在;
而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂 时存储在外部磁盘存储器上,在需要时进行数据交换。
操作系统基本知识
--用户接口
用户接口包括作业一级接口和程序一级接口。
作业一级接口为了便于用户直接或间接地控制自己的作业而设置。 它通常包括联机用户接口与脱机用户接口。 程序一级接口是为用户程序在执行中访问系统资源而设置的,通
过人机交互设备传来的有关的各种命令和要求。
操作系统基本知识
--进程管理
不管是常驻程序或者应用程序,他们都是以进程为标准 的执行单位。
RTX51小型实时操作系统介绍
RTX51小型实时操作系统介绍(连载1)有二个不同的RTX51版本可以使用∶RTX51 Full使用多于四个任务优先权同时完成存在时间片轮转调度和抢先式的任务切换。
RTX51工作在与中断功能类似的状态下。
信号和消息可以通过邮箱系统在任务之间互相传递。
你可以从一个可分配存储区中分配和释放内存。
你可以强迫一个任务等待中断、超时或者是从另一个任务或中断发出的信号或消息。
RTX51 Tiny 是 RTX51的一个子集,它可以很容易地在没有任何外部存储器的单片8051系统上运行。
除了下列例外,RTX51 Tiny支持许多 RTX51中的特性。
RTX51 Tiny仅支持时间片轮转任务切换和使用信号进行任务切换。
不支持抢先式的任务切换。
不包括消息历程。
没有可分配存储区分配程序。
许多微处理器应用程序要求同时执行两个工作或任务。
对于这样的应用程序,一个实时操作系统(RTOS)允许灵活的分配系统资源(中央处理器、存储器、等等.)给各个任务。
RTX51是一个很容易使用的功能强大的实时操作系统。
R TX51可以运行于所有的 8051 派生机型。
你可以使用标准 C语言编写和编译一个程序并使用 C51 构造、编译他们,仅在指定任务标识符和优先权上有一点差别。
. RTX51程序也要求你在程序中用include命令引入实时管理的头文件并使用 BL51 linker/locator进行连接和选择适当的 RTX51库文件。
RTX51小型实时操作系统介绍(连载2)单任务程序一个标准的 C语言程序从主函数开始执行。
在一个嵌入式应用中,主函数通常是一段无限循环的代码,可以认为是一个连续执行的单独任务。
时间片轮转程序一种更高级的 C语言程序可以在不使用实时操作系统的情况下实现时间片轮转拟多任务系统。
在这种系统中、任务或功能被一段无限循环程序重复调用。
例如∶用 RTX51进行时间片轮转调度rtx51也能完成多重任务时间片轮转,而且允许准并行执行多个无限循环或任务。
RTX51应用笔记
RTX51应用笔记mcs 51 2008-09-01 08:33:48 阅读31 评论0 字号:大中小RTX51是KEILC公司专为51系列单片机而出的嵌入式系统,目前有两个版本可供选择:RTX51 tiny和RTX51 full 两个版本。
由于使用的人不是很多,相关的资料也十分的少。
因此本人在调试时走了一点点弯路,由于之前自学了点UC/OS II嵌入式操作系统。
学习RTX51时感到十分的轻松。
此次上传一点关于RTX51软件安装包和一点中文使用手册(想学好的话必须得看英文手册,安装好软件包后,英文手册在HLP目前下可找到)。
本此讲解的为RTX51 TINY版,因为它适合于没有外展存储器的51芯片,其本身也就900个字节左右,非常的小巧,当然了功能方面也就相应缩水了!。
但是,使用RTX51 Tiny 的程序可以访问外部存储器。
RTX51 Tiny允许循环任务切换,并且支持信号传递,还能并行的利用中断功能。
RTX51 Tiny 的os_wait函数可以等待以下事件:时间到、时间间隔、来自任务或者中断的信号。
压缩包中的中文手册讲解的非常的详细,也此就不再赘说了。
下面举两个小例子:事前准备:下载附件,解压。
安装RTX 51软件包,(注KEIL C 版本必须是7.02版本以上)实例1:(最好的例子是安装后程序处带的examples,我就是认真看了交通灯那个例子后才调通了下面的LED流水灯程序的)#include#includeconst unsigned char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x00};/*时间到空间的转换,如果table是:const unsigned char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};则算法和代码会多出一倍来。
RTX51-Tiny使用说明
限制值
16 16 900 字节(最大) 7 字节 3 字节/任务 0 字节 定时器 0 1,000-65,535 20 机器周期(最大) 100-700 机器周期
1.4 工具需求
RTX51 Tiny 需要以下的软件工具: ◆ C51 编译器 ◆ A51 宏汇编器 ◆ BL51 或者 LX51 连接器
本质上,你要确保时间轮转任务调度不会发生在使用算术单元的地方。 注意:
如果你想要使用算术单元,那么你应该禁止时间轮转任务调度,改用合作式任务调度。
1.5.6 寄存器组 RTX51 Tiny 假定所有的任务都使用寄存器组 0,正因为这样所有的任务函数都必须采用
默认的 C51 设定来编译(REGISTERBAN(0))。 中断程序应该可以使用剩下的寄存器组,不过 RTX51 Tiny 在寄存器组中占用了 6 个固
1.2 解决的问题
下面的列表是 RTX51 Tiny 版本 1.06 中发现的问题,这些问题在版本 2 中已经被修正。
(1) RTX51 Tiny 版本 1.06 中,如果 os_wait 期间有中断产生,那么函数 isr_send_signal 将会破坏就绪(READY)状态,这将导致任务被挂起,在中断中等待信号。
《51单片机应用开发案例手册》读书笔记思维导图
第1章 51单片机I/O引脚应用实 例
1.1 51单片机I/O引 脚模块基础
1.2 I/O引脚驱动 LED
1.3 I/O引脚驱动数 码管
1.4 I/O引脚驱动继 电器
1.6 I.5 I/O引脚驱动 蜂鸣器
1.7 I/O引脚驱动 电动机
第2章 51单片机外部中断应用实 例
第11章 51单片机数据采集和输 出通道扩...
11.1 A/D数据采集 通道扩展
11.2 D/A数据输出 通道扩展
11.3 D S18 B20温 度芯片扩展
11.4 PCF8563时钟 芯片扩展
第12章 51单片机的存储器扩展 应用
12.1 ROM存储器和 RAM存储器扩展
12.2 E2 PROM存储 器扩展
第4章 51单片机的串行模块应用 实例
01
4.1 51单 片机串行模 块基础
02
4.2 工作 方式0应用 实例——双 机高速 通...
03
4.3 工作 方式1应用 实例1—— 单片机 和...
04
4.4 工作 方式1应用 实例2—— 用单片 机...
06
4.6 工作 方式2应用 实例——多 点温度 采...
最新版读书笔记,下载可以直接修改
《51单片机应用开发案例 手册》
思维导图PPT模板
本书关键字分析思维导图
方法
工作
实例
第章
资源
基础
系统
单片
引脚
模块 通信
中断
应用
通道
存储器
使用
数据
扩展
输出
目录
01 第1章 51单片机I/O 引脚应用实例
02
第2章 51单片机外部 中断应用实例
第四章RTX51 Tiny配置
第四章RTX51 Tiny配置RTX51 Tiny可根据应用的不同定制。
一、配置建立了嵌入式应用后,RTX51 Tiny必须要配置。
所有的配置设置都在CONF_TNY.A51文件中,该文件位于"KEIL"CS1"RTXTINY2"目录下。
在CONF_TNY.A51中的配置选项允许:●指定滴答中断寄存器组。
●指定滴答间隔(以8051机器周期为单位)。
●指定在滴答中断中执行的代理。
●指定循环超时。
●允许或禁止循环任务切换。
●指定应用程序占用长时间的中断。
●指定是否使用code banking。
●定义RTX51 Tiny的栈项。
●指定最小的栈空间需求。
●指定栈错误发生时要执行的代码。
●定义栈错误发生时要执行的代码。
●定义空闲任务操作。
CONF_TNY.A51的默认配置包含在RTX51 Tiny库中。
但是,为了保证配置的有效和正确,须得将CONF_TNY.A51文件拷贝到工程目录下并将其加入列工程中。
通过改变CONF_TNY.A51中的设置来定制RTX51 Tiny的配置。
附注:●如果在工程中没有包含配置文件(CONF_TNY.A51),库中的默认配置将自动加载,后续的改变将存储在库中,这样可能会对以后的应用起到不良影响。
1、硬件定时器下面的常数指定RTX51 Tiny的硬件定时器如何配置。
●INT_REGBANK指定用于定时器中断的寄存器组,默认为1(寄存器组1)。
●INT_CLOCK指定定时器产生中断前的指令周期数。
该值用于计算定时器的重装值(65536_INT_CLOCK)。
默认该值为10000。
●HW_TIMER_CODE是一个宏,它指出在RTX51 Tiny定时器中断结尾处要执行的代码。
该宏默认是中断返回,如:HW_TIMER_CODE MACRORETIENDM2、循环默认情况下,循环任务切换是使能的。
下面的常数允许你配置循环任务切换的时间或完全禁止循环切换。
第17章 RTX51 Tiny操作系统
RTX51 Tiny介绍
RTX51 Tiny是一个实时的内核,由一个ARM公司KEIL发布。RTX51 Tiny是一个小的实时内核,它用于代 码长度是重要考虑因素的那些应用。RTX51包含在PK51专 业开发工具中,这个工具和PSoC Creator一起安装。此外 ,RTX51 Tiny是免费的。 RTX51 Tiny支持C51编译器所有的存储器模型(小的 ,压缩的和大的存储模型)。 RTX51 Tiny可以配置成轮询和合作的多任务,但它不 支持抢占任务切换和任务优先级。 RTX51 Tiny使用单个定时器,用于操作系统的定时器 “ 滴答”。不使用其它硬件资源。
RTX51 Tiny介绍 --内核函数
返回:指定事件发生时,使能任务用于执行。恢复执行。 可能的返回值:
SIG_EVENT:接收到一个信号; TMO_EVENT:完成超时,或者间隔过期; NOT_OK:event_sel参数无效;
RTX51 Tiny介绍 --内核函数
1.下面给出一个例子说明使用RTX51 Tiny内核函数调 用实现轮询调度:
RTX51 Tiny介绍 --内核函数
char
os_wait(unsigned char event_sel, unsigned char ticks, unsigned int dummy)
功能:os_wait函数停止当前的任务,等待一个或多个事 件,比如:来自时间间隔,来自一个超时,或者 来自其它任务或者中断。event_sel参数指定了时间 或者等待事件,能是下面常数的任何的组合:
RTX51 Tiny介绍 --任务切换
RTX51 Tiny执行轮询多任务调度,这样允许模拟并行 执行多个无限循环或者任务。任务不是并发执行的,而是 按时间片执行的。可用的CPU时间被分成时间片,RTX51 Tiny为每个任务分配一个时间片。每个任务允许执行预先 确定的时间长度。然后,RTX51 Tiny切换到其它准备运行 的任务,然后这个任务执行一段时间。时间片的长度使用 变量TIMESHARING定义。
RTX51 Tiny中内核的分析
务可以处于 “ U N N ・ R N IG'状态 今R A Y: E D 任务正在等待运行,在当前运行的任务时
间片完成之后 ,RT 1 NY运行下一个处于 X5 TI
12 T5 TN 的使用 . RX1 Y I 内核完全集成在 K I C 1 E L 编译器中,以系统函数调 5 用的方式运行,因此可以很容易地使用K I C 1 EL 语言编 5 写和编译 了 个多任务程序,并嵌人到实际应用系统中。 内核提供以下函数供应用程序引用 : ① ca o r t t k 匕i ; c a _ ( s d hr e e a t s s a )
⑥c r u i _ d d r n gtki( i; h o n n a _ o ) as _ s v
⑦ cao w i( et et s u m ) _ t n s , k, m yo hr a e _ i d s v lc 各函数的函数原型和具体意义,可以阅读参考文 献[] l。
图3 丁 中断服务程序 。
图 4 任务切换程序
33 任务切换程序段
函 有关 号 理的o s dsnl i_ _i a・ 数和 信 处 s e _ a、s s dsnl _ i n g re g n s l r i a函 这些函数 能相对比 单,主 _e_g 功 较简 是完成任务 切换。 它共有两个人口T S S IC IG和 o c a s nl 数・ A K W T HN
不同的状态 。
以上所有程序段,若涉及到任务状态字操作,必须 其基本工作流程是首先将当前任务置为 “ ME TI O同时操作任务状态字 。 O 丁 U ”状态,等待 卜 一次时间片循环,其次找到下一个 关中断,以防止和定时器 T
处于 “E D ' R A Y・ 状态的 任务并 使其成为当 任务。 前 然后 结
rtx51中文手册
成时间片,RTX51 Tiny 给每个任务分配一个时间片)。由于时 间片很短(几毫秒), 看起来好象任务在同时执行。 任务在它的时间片内持续执行(除非任务的时间片用完)。然后, RTX51 Tin g 切换到下一个就绪的任务运运行。时间片的持续时间可以通过 RTX51 Ting 配置 定义。 下面是一个 RTX51 Tiny 程序的例子,用循环法多任务处理,程 序中的两个任务 是计数器循环。RTX51 Tiny 在启动时执行函数名为 job0 的任务 0,该函数建立了另 一个任务 job1,在 job0 执行完它的时间片后, RTX51 Tiny 切 换到 job1。在 job1 执 行完它的时间片后,RTX51 Ting 又切换到 job0,该过程无限重 复。 #include int counter0; int counter1;
void check_serial_io_task(void) _task_ 1 ﹛/*该任务检测串行 I/0*/﹜
void process_serial_cmds_task(void) _task_ 2 ﹛/*该任务处理串行命令*/﹜
void check_kbd_io_task(void) _task_ 3 ﹛/*该任务检测键盘 I/O*/﹜
void process_kbd_cmds_task(void) _task_ 4 ﹛/*处理键盘命令*/﹜
void startup-_task(void) _task_ 0
﹛
os_create_task(1);
/*建立串行 I/O 任务*/
os_create_task(2);
/*建立串行命令任务*/
第三章 原理
RTX51 Tiny 用于管理目标系统的资源,本章讨论 RTX51 Tiny 如何使用这些资源。 一、定时器滴答中断 RTX51 Tiny 用标准 8051 的定时器 0(模式 1)生产一个周期性 的中断。该中断就是 RTX51 Tiny 的定时滴答(Timer Tick)。 库 函数中的超时和时间间隔就是基于该定时滴答来测量的。 默认情况下,RTX51 每 10000 个机器周期产生一个滴答中断,因 此,对于运行于 12MHZ 的标准 8051 来说,滴答的周期是 0.01 秒,也即频率是 100HZ(12MHz/12/10000)。该值可以在 CONF_TNY.A51 配置文件中修改。 附注: l 可以在 RTX51 的定时滴答中断里追加自己的代码。参见 CONF_TNY.A51 配置文件。 l 关于 RTX51 Tiny 如何使用中断可以参考概述中中断一节的叙 述。 二、任务 RTX51 Tiny 本质上是一个任务切换器,建立一个 RTX51 Tiny 程 序,就 是建立一个或多个任务函数的应用程序。下面的信息可以帮助你 快速的理解
RTX51 FULL 学习总结
分配任务优先级时,指导原则是:应用程序应首先能工作无误,而不考虑优先级,优先级 只是起时间优化的作用。
任务状态
RTX51 有四种任务状态:就绪、运行(激活)、阻塞(等待)、睡眠。 事件可以是时间到、消息或信号的发送、中断的发生等,这些事件都有可能导致任务的状 态发生变化,可能产生任务切换。
任务切换
2、不使用寄存器组切换:如果省略这一属性,则所有需要保存的寄存器都会保存到堆栈 中,这会产生更长的运行时间和增加堆栈需求。
★注意:C51 中断函数的这个 n,永远不要使用寄存器组 0 或被快速任务占用的寄存器组!
任务通信:RTX51 提供信号和邮箱来管理任务间的通信。 信号:信号是最简单和最快速的任务通信形式。这一般用于没有数据交换的任务同步。
另外编译后在工程目录里会有一个 MAP 文件,扩展名是.M51,这里面记录着所有任务的
一些信息,包括任务号、任务优先级、所用的寄存器组、任务名称等。例如,能看见如下
信息:
TASKID PRIORITY REG-BANK SEGMENT NAME
----------------------------------------------------------------------------------
void 函数名(void) interrupt X [using n]
对于 n,这里要着重说明: 1、使用寄存器组切换:当进入中断时,中断函数将保存寄存器 ACC,B,DPH,DPL,PSW 到中断任务的堆栈。由于不是所有的寄存器都要保存,用户必须确保中断函数没有使用 RTX51 用到的寄存器组。寄存器组 0 也不能使用(因为它一般用于标准任务和系统时 钟)。寄存器组 1,2 或 3 只能在快速任务没有使用时才能使用。
第10章实时操作系统RTX51-教学
16
5. 事件
在os_wait函数中,RTX51支持下列事件: ❖ Timeout(超时):
挂起正在运行的任务,等待规定的时钟滴答数。 ❖ Interval(间隔):
10.2.1 RTX - 51实时操作系统特点
RTX-51实时多任务操作系统,完全不同于一般的单片机 C51程序。RTX-51有自己独特的概念和特点:
1. 中断:
RTX-51系统可以使用中断,其中断函数以并行方式工作。 中断函数可以与RTX-51内核通信,并可以将信号或者消 息发送到RTX-51的指定任务中。在RTX-51 FULL中, 中断一般配置为一个任务。
任务是系统中独立运行的基本单元,也是内核分配和调度的基本 单元,每个任务各自按相互独立的不可预知的速度运行,走走停 停。每个任务都要安排一个决定其重要性的优先级,都有一个无 限循环的程序段规定其功能(如一个C语言过程),并相应有一 个数据段、堆栈段及一个任务控制块TCB(用于保存CPU的现场, 状态等)。
12
10.2 RTX51实时操作系统
❖ RTX51是用于8051系列单片机的一种多任务实时操作系统 (RTOS)。它可以简化具有实时性要求的复杂软件的设计。
❖ RTX51有两个不同版本:RTX51 Full和RTX51 Tiny。 ❖ RTX51 Full 允许4个任务优先级的轮转和抢先式任务切换,
管理共享的系统资源的二进制信号量。(仅RTX51Full)
17
6. 运行环境 ❖ RTX-51实时多任务操作系统使用标准的C51来编写
程序,可以运行于所有的51系列单片机中。
RTX51_Tiny_中文手册(全文下载)
RTX51 Tiny 2.02 中文手册RTX51 Tiny第二版(版本2.02)是RTX51 Tiny 1.xx的升级版本,他完全集成在keil的集成开发环境中。
RTX51 Tiny是一款可以运行在大多数805 1兼容的器件及其派生器件上的实时操作系统(准实时),相对与传统的开发方式而言,用实时操作系统进行开发是一种效率更高的方式。
作为实时操作系统,RTX51 Tiny虽然比较简陋,但它还是具备了一些实时操作系统的基本要素,完全可以充当我们进入实时操作系统(RTOS)世界的领路者,更为重要的是,它是免费的。
:-)从本节起,我会陆续将keil帮助文件中的RTX51 Tiny第二版的使用手册翻译为中文,并发布给大家,供大家参考。
RTX51 Tiny 2.02 中文手册part1RTX51 Tiny第2版用户手册第一章概述RTX51 Tiny是一种实时操作系统(RTOS),可以用它来建立多个任务(函数)同时执行的应用。
嵌入式应用系统经常有这种需求。
RTOS可以提供调度、维护、同步等功能。
实时操作系统能灵活的调度系统资源,像CPU和存储器,并且提供任务间的通信。
RTX51 Ti ny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器。
RTX51 Tiny的程序用标准的C语言构造,由Keil C51 C编译器编译。
用户可以很容易的定义任务函数,而不需要进行复杂的栈和变量结构配置,只需包含一个指定的头文件。
一、What’s NewRTX51 Tiny第二版增加了许多新特性,使得实时软件的开发更加简单,如:●支持Code Banking该选项必须在CONF_TNY.A51配置文件中允许,还要在L51_BANK.A51文件中定义Code Ban king硬件配置。
●直接任务切换新增加的函数(os_swich_task)允许一个任务立即切换到另一个处于就绪态的任务。
●任务就绪标志新的库函数isr_set_ready和os_set_ready允许用户给一个任务设置就绪标志。
关于RTX51 TINY的分析与探讨
关于RTX51 TINY的分析与探讨RTX51 TINY是一种应用于MCS51系列的小型多任务实时操作系统。
它彻低集成在 C5l编译器中,具有运行速度快、对硬件要求不高、用法便利灵便等优点,因此越来越广泛地应用到单片机的软件开发中。
它可以在单个CPU上管理几个作业(任务),同时可以在没有扩展外部存储器的单片机系统上运行。
RTX51 TINY允许同时“准并行”地执行多个任务:各个任务并非持续运行,而是在预先设定的时光片(time slice)内执行。
CPU执行时光被划分为若干时光片,RTX51 TINY为每个任务分配一个时光片,在一个时光片内允许执行某个任务,然后RTX51 TINY切换到另一个就绪的任务并允许它在其规定的时光片内执行。
因为各个时光片十分短,通常惟独几ms,因此各个任务看起来似乎就是被同时执行了。
RTX51 TINY利用单片机内部定时器0的中断功能实现定时,用周期性定时中断驱动RTX51 TINY的时钟。
它最多可以定义16个任务,全部的任务可以同时被激活,允许循环任务切换,仅支持非抢占式的任务切换,操作系统为每一个任务分配一个自立的堆栈区,在任务切换的同时转变堆栈的指针,并保存和复原寄存器的值。
RTX51 TINY没有特地的时光服务函数和任务挂起函数,而是通过os_wait()中的参数设定实现的。
用法RTX51 TINY时用户程序中不需要包含main()函数,它会自动地从任务0开头运行。
假如用户程序中包含有main()函数,则需要利用os_create_task函数来启动RTX51实时操作系统。
2 任务切换2.1 RTX51 TINY任务状态RTX51 TINY的用户任务具有以下几个状态:①运行(RUNNING)——任务正处于运行中。
同一时刻惟独一个任务可以处于“RUNNING”状态。
②就绪(READY)——等待运行的任务处于“READY”状态。
在当前运行的任务退出运行状态后,就绪队列中的任务按照调度策略被调度执行,第1页共5页。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RTX51应用笔记
mcs 51 2008-09-01 08:33:48 阅读31 评论0 字号:大中小
RTX51是KEILC公司专为51系列单片机而出的嵌入式系统,目前有两个版本可供选择:RTX51 tiny和RTX51 full 两个版本。
由于使用的人不是很多,相关的资料也十分的少。
因此本人在调试时走了一点点弯路,由于之前自学了点UC/OS II嵌入式操作系统。
学习RTX51时感到十分的轻松。
此次上传一点关于RTX51软件安装包和一点中文使用手册(想学好的话必须得看英文手册,安装
好软件包后,英文手册在HLP目前下可找到)。
本此讲解的为RTX51 TINY版,因为它适合于没有外展存储器的51芯片,其本身也就900个字节左右,非常的小巧,当然了功能方面也就相应缩水了!。
但是,使用RTX51 Tiny 的程序可以访问外部存储器。
RTX51 Tiny允许循环任务切换,并且支持信号传递,还能并行的利用中断功能。
RTX51 Tiny 的os_wait函数可以等待以下事件:时间到、时间间隔、来自任务或者中断的信号。
压缩包中的中文手册讲解的非常的详细,也此就不再赘说了。
下面举两个小例子:
事前准备:下载附件,解压。
安装RTX 51软件包,(注KEIL C 版本必须是7.02版本以上)
实例1:(最好的例子是安装后程序处带的examples,我就是认真看了交通灯那个例子后才调通了
下面的LED流水灯程序的)
#include
#include
const unsigned char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0xFF,0x00};
/*时间到空间的转换,如果table是:
const unsigned char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
则算法和代码会多出一倍来。
table数组虽然增加了一倍,算法也随之减少了一半,
好处当然不止在这里体现,下面的进程2也减少了一半*/
//进程0 左->右->左
void LED0 (void) _task_ 0
{
int i;
os_create_task(1);//创建进程1
os_create_task(2);//创建进程2
while(1)
{
for (i = 0; i < 15; i++)
{
P1 = table[i];
os_wait(K_TMO,30,0);//等待30*10000微妙= 0.3秒
}
os_send_signal(1); //发送Signal信号,激活进程1 os_wait(K_SIG,0,0); //等待信号
}
}
//进程1 全亮->全灭->全亮
void LED1 (void) _task_ 1
{
int i;
while(1)
{
os_wait(K_SIG,0,0);
for (i = 0; i < 3; i++)
{
P1 = table[15]; //全亮
os_wait(K_TMO,30,0);
P1 = table[16]; //全灭
os_wait(K_TMO,30,0);
}
os_send_signal(2);
}
}
//进程2 两边->中间中间->两边
void LED2 (void) _task_ 2
{
int i;
while(1)
{
os_wait(K_SIG,0,0);
for (i = 0; i < 8; i++)
{
P1 = table[i] | table[i+7]; //由于table长度多一倍,省去了一个循环,而且算法也简化
了。
os_wait(K_TMO,30,0);
}
os_send_signal(0);//发送Signal信号,激活进程0
}
}
注:RTX 51 是从_task_ 0开始运行程序的(程序中不能出现main()函数)。
上述例子是使用RTX 51 的TINY版编写的一个流水灯的程序。
有详细的注解,应该很容易看明白的。
调入KEIL C中进行编译时千万不能忘了选择相应的操作系统。
如下图所示:
实例二:
#include "reg51.h"
#include "rtx51tny.h"
sbit led0 = P1^0;//定义一个LED测试灯0
sbit led1 = P1^1;//定义一个LED测试灯1
/************************************************
//功能:任务0 创建任务1 和任务2,运行后便将自身删除。
************************************************/
void main_job() _task_ 0
{
os_create_task(1);//创建进程1
os_create_task(2);//创建进程2
os_delete_task(0);//将自身删除
}
/************************************************
//功能:控制LED0闪烁
************************************************/
void led0_job() _task_ 1
{
led0 = 1;//LED初始为不亮(对于共阳接法)
for (;;)
{
led0 = !led0;//LED0闪烁
os_wait(K_TMO,100,0);//延时0.3S
}
}
/************************************************
//功能:控制LED1闪烁
************************************************/
void led1_job() _task_ 2
{
led1 = 1;//LED初始为不亮(对于共阳接法)
for (;;)
{
led1 = !led1;//LED1闪烁
os_wait(K_TMO,150,0);//延时0.3S
}
}
注:可能注意到了上面所有的任务中都是一个死循环。
刚接触的朋友可能不能理解,看一点操作系统相关知识很快就明白了。
不就是时间片轮转法吗!
对于RTX51就讲这么多了,希望用到的朋友好好学习,真的很实用。
特别是FULL版本,自带了CAN软件包,太方便了……共享万岁!!。