RTX51-Tiny使用说明
- 格式:pdf
- 大小:778.93 KB
- 文档页数:41
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 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)或者是它们之间的组合。
目录总览 (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第二版在显著减小代码量并具有可扩展性。
RTX51 Tiny介绍μVision是德国K eil公司开发的单片机IDE软件,最初主要用于8051系列单片机,RTX51是其自带的运行于8051系列单片机上的小型多任务实时操作系统,可用来设计具有实时性要求的多任务软件。
RTx51有2个版本:RTX51 Tiny和RTX51 Full。
RTX51 Tiny是RTX51 Full的子集。
RTX51 Tiny 自身仅占用900字节左右的程序存储空间,可以很容易地运行在没有外部扩展存储器的8051单片机系统上。
它完全集成在Keil C5l编译器中,具有运行速度快、对硬件要求不高、使用方便灵活等优点,因此越来越广泛地应用到单片机的软件开发中。
它可以在单个CPU上管理几个作业(任务),同时可以在没有扩展外部存储器的单片机系统上运行。
目前在8051系列单片机上使用多任务实时操作系统,RTX51 Tiny也就成为了首选。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////// \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ RTX51 TINY允许同时“准并行”地执行多个任务:各个任务并非持续运行,而是在预先设定的时间片(time slice)内执行。
CPU执行时间被划分为若干时间片,RTX51 TINY为每个任务分配一个时间片,在一个时间片内允许执行某个任务,然后RTX51 TINY切换到另一个就绪的任务并允许它在其规定的时间片内执行。
由于各个时间片非常短,通常只有几ms,因此各个任务看起来似乎就是被同时执行了。
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方式工作。
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原理RTX51 Tiny是一款基于RTX51内核的微型嵌入式操作系统。
本文将介绍RTX51 Tiny的原理及其应用。
一、RTX51 Tiny的原理RTX51 Tiny是由Keil公司开发的一款嵌入式实时操作系统。
它的设计目标是在51系列单片机上提供简单、灵活、高效的多任务管理和资源调度功能。
RTX51 Tiny使用了一种基于优先级的抢占式调度算法,能够实现多个任务之间的快速切换,从而提高系统的响应速度和并发处理能力。
RTX51 Tiny的核心是一个可重入的内核,它提供了任务管理、时间管理、资源管理和通信机制等基本功能。
任务管理器负责任务的创建、删除和切换,时间管理器实现了系统时钟的管理和定时器的功能,资源管理器用于管理共享资源的访问,通信机制则提供了任务间的消息传递和事件通知功能。
RTX51 Tiny的任务是用户定义的函数,可以是独立的任务或者中断服务函数。
每个任务都有一个优先级,优先级高的任务会优先执行。
当系统启动时,RTX51 Tiny会自动创建一个空闲任务,它的优先级最低,用于处理系统空闲时的任务。
RTX51 Tiny采用了一种事件驱动的方式进行任务调度。
当一个任务完成了它的工作或者等待某个事件发生时,它会主动让出CPU,将控制权交给调度器。
调度器会从就绪队列中选择优先级最高的任务执行,直到它完成了工作或者时间片用完。
RTX51 Tiny还提供了一些常用的服务函数,如延时函数、信号量函数、邮箱函数等,方便用户进行任务的同步与通信。
用户可以通过这些服务函数来实现任务间的协作和数据交换。
二、RTX51 Tiny的应用RTX51 Tiny广泛应用于各种嵌入式系统中,特别是对实时性要求较高的应用场景。
以下是一些常见的应用领域:1. 工业自动化:RTX51 Tiny可以用于控制系统中的任务调度和数据处理,实现复杂的自动控制算法和实时监控功能。
2. 智能家居: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、循环默认情况下,循环任务切换是使能的。
下面的常数允许你配置循环任务切换的时间或完全禁止循环切换。
单片机操作系统RTX51Tiny的使用步骤一般地,下面三步是使用RTX51 Tiny要实现的l 编写RTX51程序l 编译并连接程序l 测试和调试程序一、编写程序写RTX51 Tiny程序时,必须用关键字对任务进行定义,并使用在RTX51TNY.H中声明的RTX51 Tiny核心例程。
1、包含文件RTX51 Tiny仅需要包含一个文件:RTX51TNY.H。
所有的库函数和常数都在该头文件中定义。
你可以在你的源文件中包含它:#include2、编程原则以下是建立RTX51 Tiny程序时必须遵守的原则:①、确保包含了RTX51TNY.H头文件。
②、不要建立main函数,RTX51 Tiny有自己的mian函数。
③、程序必须至少包含一个任务函数。
④、中断必须有效(EA=1),在临界区如果要禁止中断时一定要小心。
参见概述中的中断一节。
⑤、程序必须至少调用一个RTX51 Tiny库函数(象os_wait)。
否则,连接起将不包含RTX51 Tiny库。
⑥、Task 0是程序中首先要执行的函数,必须在任务0中调用os_create_task 函数以运行其余任务。
⑦、任务函数必须是从不退出或返回的。
任务必须用一个while(1)或类似的结构重复。
用os_delete_task函数停止运行的任务。
⑧、必须在uvison中指定RTX51 Tiny,或者在连接器命令行中指定。
更多技术文档参见keil软件知识库。
3、定义任务实时或多任务应用是由一个或多个执行具体操作的任务组成的,RTX51 Tiny支持最多16个任务。
任务就是一个简单的C函数,返回类型为void,参数列表为void,并且用_task_声明函数属性。
例如:void func (void)_task_task_id这里,func是任务函数的名字,task_id是从0到15的一个任务ID号。
下面的例子定义函数job0编号为0的任务。
该任务使一个计数器递增并不断重复。
RTX51Tiny中⽂⼿册第六章函数参考以下部分描述RTX51 Tiny的系统函数。
函数依字母顺序排列,分为以下部分:概要(Summary)简述程序作⽤,列出包含的⽂件,包括它的声明和原型,语法举例,和参数描述。
描述(Description)程序的详细描述,如何使⽤。
返回值程序返回值说明。
参阅(see also)相关程序。
例⼦如何正确使⽤该函数的程序例⼦中断。
附注:●以os_开头的函数可以由任务调⽤,但不能由中断服务程序调⽤。
●以isr_开头的函数可以由中断服务程序调⽤,但不能由任务调⽤。
1、isr_send_signal概要: #includechar isr_send_signal(unsigned char task_id); /*信号发往的任务*/描述: isr_send_signal函数给任务task_id发送⼀个信号。
如果指定的任务正在等待⼀个信号,则该函数使该任务就绪,但不启动它,信号存储在任务的信号标志中。
附注:●该函数是RTX51 Tiny实时操作系统的⼀部分,仅包含于PK51中。
●该函数仅被中断函数调⽤。
返回值成功调⽤后返回0,如果指定任务不存在,则返回-1。
参阅 os_clear_signal,os_send_signal,os_wait例⼦#includevoid tst_isr_send_signal(void) interrupt 2{isr_send_signal(8); /*给任务8发信号*/}2、isr_set_ready概要 #include< rtx51tny.h>char isr_set_ready{ unsigned char task_id};/*使就绪的任务*/描述将由task_id指定的任务置为就绪态。
附注●该函数是RTX51 Tiny的⼀部分,包含在PK51中。
●该函数仅⽤于中断函数。
返回值⽆例⼦ #include< rtx51tny.h>void tst_isr_set_ready(void)interrupt 2{ isr_set_ready(1);/*置位任务1的就绪标志*/}3、os_clear_signal概要 #include< rtx51tny.h>char os_clesr_signal(unsigned cahr task_id);/*清除信号的任务*/描述清除由task_id指定的任务信号标志。
RTX51tiny实时操作系统在单片机STC12C5A60S2上的移植作者:余向阳来源:《数字化用户》2013年第06期【摘要】RTX51tiny实时操作系统是Keil C51单片机开发集成环境自带的一个实时操作系统,此操作系统功能强大,简单易用,本文讲解把它移植到单片机STC12C5A60S2上的方法。
【关键词】RTX51tiny 实时操作系统单片机 STC12C5A60S2RTX51tiny实时操作系统是Keil C51单片机集成开发环境自带的一个实时操作系统,它功能强大、简单易用。
它可以应用在所有的8051衍生的单片机系列中。
STC12C5A60S2单片机是深圳宏晶科技有限公司旗下的功能强大的1T单片机。
此单片机是新一代增强型8051单片机,运行的速度是传统8051单片机的8~12倍,这是相当快的速度。
它内部资源丰富,兼容性强,并且内部ROM可达60KB,对于一般的应用已经足够。
在一些比较复杂的应用中,如果使用超级循环进行编程,则在实时性,逻辑性,资源的共享等方面存在较为复杂的关联性,这对编程来说是不利的。
另外在增加与删除功能上也会增加编程的复杂性。
能不能把RTX51tiny操作系统移植到STC12C5A60S2单片机上呢?如果可以则在保证实时性的基础上,编程的复杂性会大幅降低,程序可维护性也会大幅提升。
增加或者删除功能会变得相当容易。
答案是肯定的。
RTX51tiny操作系统完全可以移植到STC12C5A60S2单片机上。
先来看看RTX51tiny操作系统介绍。
一、RTX51tiny操作系统的特性RTX51tiny操作系统是集成在Keil C51开发环境中的实时系统。
它的主要特点如下:(一)采用时间片轮转调度策略进行任务切换,不支持抢占式任务调度策略。
(二)允许最大16个任务循环切换。
(三)支持信号传递,不支持消息处理、队列处理、邮箱等功能。
(四)内核很小,最大仅占用900字节。
(五)系统函数仅有13个,非常容易使用。