RTX51小型实时操作系统介绍[1]
嵌入式操作系统RTX51Tiny的分析及应用 (1)
DEL ETED :任务不处于执行队列 。 TIMEOU T :任务由于时间片用完而处于 timeout 状 态 ,并等待再次运行 。该状态与 ready 状态相似 。 图 1 所示为任务状态转换图 。
(中南大学 物理科学与技术学院 ,湖南 长沙 410083)
摘 要 :在嵌入式开发中 ,嵌入式操作系统的应用是重要的一环 。文中对一种适用 51 单片机的实时多任务操作系统 ——— RTX51 Tiny 进行应用 。首先从任务管理和内存管理的角度来分析该操作系统 ,在此基础上 ,用 C 语言编写应用程序 traf2 fic 。应用实践得到以下结论 :该操作系统的应用程序启动简单 ,没有操作系统的启动过程 ;短小精悍 ,代码不足 50 行 ;运行 可靠 ,仿真 、硬件运行结果充分证实了这一点 。从而得到 RTX51 Tiny 操作系统对任务和堆栈管理的有效性及其代码精简 和运行可靠的基本特点 。 关键词 :嵌入式操作系统 ; 实时操作系统 ; RTX51 Tiny 中图分类号 : TP316 . 2 ; TP317 文献标识码 :A 文章编号 :1673 - 629X(2006) 06 - 0089 - 03
ROM 。对于 51 单片机这种资源较少的处理器使用受限 。 解决的办法是采用新的操作系统 ,例如 RTX51 。
1 RTX51 Tiny 分析 RTX51 是由德国 Keil 公司开发的 ,专门针对 8051 兼
容 MCU 所 作 的 多 任 务 实 时 操 作 系 统 。它 有 完 全 版 ( RTX51 Full) 和小型版 ( RTX51 Tiny) 。RTX51 Tiny 是一 个 RTX51 Full 的子集 ,它可以很容易地在没有任何外部 存储器的 51 系统上运转 。通常 ,由于 8 位单片机的处理 速度 、内部寄存器资源等因素的限制 ,由此定制的操作系 统功能有限 。通过分析发现 RTX51 Tiny 操作系统主要 包括了任务管理和内存管理 。RTX51 Tiny 在任务管理方 面 :仅支持时间片轮转任务切换和使用信号进行任务切 换 ,不支持抢先式的任务切换 ,不包括消息历程 ;在内存管 理方面 :没有存储器池分配程序 ,内核使用 keilc51 编译器 将内存管理简化为堆栈管理[2 ,3 ] 。 1. 1 RTX51 Tiny 的任务和事件
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)或者是它们之间的组合。
RTX-51学习总结
作者:大海橡树前段时间给单片机写个跑马灯的程序,它是将单片机4组IO口全用了,一个引脚一个LED 一共32个,当初是拿出去当作品展用的,写了个程序,要求好几个花样,但是写程序的时候发现,单独控制一组端口还可以,要是同时控制4组IO口,并且显示的花样都不一样?该怎么办呢?这就要用的RTX51了,MCS-51单片机的RTOS(实时操作系统)。
RTX51简介:图(1)RTX51是德国KEIL公司开发的专门针对于8051内核兼容MCU所作的实时操作系统(RTOS),RTX51有两个版本:RTX51-FULL与RTX51-Tiny。
FULL版本支持四级任务优先级,最大256任务,它工作在类似于中断功能的状态下,同时支持抢占式与时间片循环调度、支持信号(signal)、消息队列、二进制信号量(semaphore)和邮箱(mailbox),其功能强大,仅仅占用6~8KB的程序存储器空间。
RTX51_Tiny是RTX51FULL的子集,是一个很小的内核,只占用大约800byte的存储空间(主要程序RTX51TNY.A51仅有不足一千行)它适用于对实时性要求不非常严格的、仅要求多任务管理且任务间通信功能不要求非常强大的应用。
它仅使用51内部寄存器来实现所有功能,应用程序只需要以系统调用(system call)的方式引用RTX51中的函数即可,RTX51-Tiny可以支持16个任务,多个任务遵循时间片轮转的规则,任务间以信号signal的方式进行通信,任务可以等待另一任务给他发出signal然后再从挂起状态恢复运行,它并不支持抢占式任务切换的方式。
上面只是RTX51的简单介绍,具体的用法自己到百度文库下载RTX51实时操作系统的使用方法:/view/0902ce1755270722192ef70d.html。
上面有详细的介绍,由于篇幅有限,这里就不做过多的介绍。
大家好好阅读文档上的内容,才知道怎么使用RTOS,刚开始接触的时候有点不好理解,多写几个程序练练手,就有点理解了,确实,要建立起操作系统的概念不是一两天的事情,其中要设计很多的抽象的概念,只有把他们完全理解了,才好应用。
rtx51小型实时操作系统的应用体会
rtx51小型实时操作系统的应用体会2007年06月27日星期三 23:53最近在做设计的时候老遇到一些几个任务需要同时进行的情况,刚开始想自己去做一个多任务的程序(因为称不上系统),想用一个脉冲计数的方法来实现多任务切换,但是感觉实现起来比较麻烦。
无意中发现了51单片机下个rtx51实时操作系统(本人以前不知道的),后来就去找相关资料。
发现这方面的资料在网上很少,也很杂乱。
经过一段时间的学习,我有了个大概的了解。
下面给大家讲述一下:RTX51是一个用于8051系列处理器多任务实时操作系统。
RTX51可以简化那些复杂而且时间要求严格的工程的软件设计工作。
有二个不同的RTX51版本可以利用:RTX51 Full 使用四个任务优先权完成同时存在时间片轮转调度和抢先的任务切换 RTX51工作在与中断功能相似的状态下信号和信息可以通过邮箱系统在任务之间互相传递你可以从一存池中分配和释放内存你可以强迫一个任务等待中断超时或者是从另一个任务或中断发出的信号或信息RTX51 Tiny 是一个RTX51的子集它可以很容易地在没有任何外部存储器的单片8051系统上运转。
除了下列例外 RTX51 Tiny支持许多在RTX51中的特征。
RTX51 Tiny仅支持时间片轮转任务切换和使用信号进行任务切换不支持抢先式的任务切换。
不包括消息历程。
没有存储器池分配程序。
RTX51使用一个8051硬件计时器中断作为定时程序。
产生的周期性中断用于驱动 RTX51时钟。
RTX51不需要在你的程序中拥有一个主函数它将自动开始执行任务 0 如果你确实有一个主函数你必须利用 RTX51 Tiny中的 os_create_task函数或 RTX51中的os_start_system函数手工启动 RTX51。
下列例子显示一个只使用时间片轮转任务调度的简单的 RTX51应用程序在本程序里的二个任务是简单计数器回路 rtx51开始执行函数名为 job0的任务 0 。
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第二版在显著减小代码量并具有可扩展性。
#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> 。
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)状态,这将导致任务被挂起,在中断中等待信号。
rtx51 tiny原理
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可以用于家庭自动化系统中的任务管理和设备控制,实现智能家居的各种功能,如安防、照明和能源管理等。
RTX51tiny实时操作系统在单片机STC12C5A60S2上的移植
RTX51tiny实时操作系统在单片机STC12C5A60S2上的移植【摘要】RTX51tiny实时操作系统是KeilC51单片机开发集成环境自带的一个实时操作系统,此操作系统功能强大,简单易用,本文讲解把它移植到单片机STC12C5A60S2上的方法。
【关键词】RTX51tiny实时操作系统单片机STC12C5A60S2RTX51tiny实时操作系统是KeilC51单片机集成开发环境自带的一个实时操作系统,它功能强大、简单易用。
它可以应用在所有的8051衍生的单片机系列中。
STC12C5A60S2单片机是深圳宏晶科技有限公司旗下的功能强大的1T单片机。
此单片机是新一代增强型8051单片机,运行的速度是传统8051单片机的8~12倍,这是相当快的速度。
它内部资源丰富,兼容性强,并且内部ROM可达60KB,对于一般的应用已经足够。
在一些比较复杂的应用中,如果使用超级循环进行编程,则在实时性,逻辑性,资源的共享等方面存在较为复杂的关联性,这对编程来说是不利的。
另外在增加与删除功能上也会增加编程的复杂性。
能不能把RTX51tiny操作系统移植到STC12C5A60S2单片机上呢?如果可以则在保证实时性的基础上,编程的复杂性会大幅降低,程序可维护性也会大幅提升。
增加或者删除功能会变得相当容易。
答案是肯定的。
RTX51tiny操作系统完全可以移植到STC12C5A60S2单片机上。
先来看看RTX51tiny操作系统介绍。
一、RTX51tiny操作系统的特性(一)采用时间片轮转调度策略进行任务切换,不支持抢占式任务调度策略。
(二)允许最大16个任务循环切换。
(四)内核很小,最大仅占用900字节。
(五)系统函数仅有13个,非常容易使用。
(六)支持硬件中断功能。
根据它的特点,我们可以得到这样的结论:RTX51tiny操作系统非常适合应用于8051系列单片机,可以实现多任务协同工作。
在实时性上,可以采用硬件中断响应,速度与没有使用操作系统一样快捷。
第十三章RTX51实时多任务操作系统
ob0 () _task_ 0 { int i; os_create_task (1); /*启动任务 1 os_create_task (2); /*启动任务 2 while (1) { /* 无穷循环 counter0++; /* counter0 加1 for(i=0;i<1000;i++); P1_0=!P1_0; } }
RTX51任务状态
ຫໍສະໝຸດ 1)运行(RUNNING):当前正在运行的任务处于 RUNNING状态,同一时间只有1个任务可以运行。 2)就绪(READY):等待运行的任务处于READY状态, 在当前运行的任务退出运行状态后,就绪队列中 优先级最高的任务进入到运行状态。 3)阻塞(BLOCKED):等待一个事件的任务处于 BLOCKED状态,如果事件发生且优先级比正在运 行的任务高,此任务进入运行状态;如果优先级 比正在运行的任务低,此任务进入READY状态。 4)删除(DELETED):没有开始的任务处于删除状态。
13.2.1 RTX51的特点
RTX51有2个模式:RTX51完全模式和最小模 式。RTX51 Tiny是RTX51的一个子集,支持 RTX51中绝大多数的特性,且不需要外部RAM (XDATA)。RTX51 Tiny 支持RTX51 Full 的许多特 性,但不具有以下功能: 由循环多任务处理和信号实现任务切换 不支持优先任务切换 不包含信息子程序 无存储器库分配子程序
2 使用RTX51的信号
可以使用 os_wait功能暂停一个任务并等待从另一个 任务发出的信号或旗标。这可以用于协调两个或更多的任 务,等待一个信号会系统会执行如下工作:如果一任务在 等待一个信号并且信号标志是0,在这个信号被发送之前, 这个任务将一直处于挂起状态;如果信号标志已经是1, 当任务查询信号时,信号标志会被清除并且继续执行任务。 例13-3-3 信号使用示例。 #include <rtx51tny.h> long counter0; /*任务0的计数器 */ long counter1; /*任务1的计数器 */ long counter2; /*任务2的计数器 */ long counter3; /*任务3的计数器 */
第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定义。
Small RTOS51系统及实时系统的相关概念
Small RTOS51系统笔记及实时系统的相关概念Veiko2011-4 Small RTO51简介Small RTOS51的特点1、公开的源代码:只要遵循许可协议,任何人可以免费获得源代码。
2、可移植性:作者尽量把与CPU相关部分压缩到最小,与CPU无关的代码部分用ASIC C编写。
3、可固化:Small RTOS51为嵌入式系统设计,如有固化手段,可以嵌入到产品中成为产品的一部分。
4、占先式:Small RTOS51可以管理16个用户任务,每个任务优先级不同。
Small RTOS51总是运行就绪条件下优先级最高的任务。
5、中断管理:中断可以使正在执行的任务挂起。
如果优先级更高的任务被中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行。
中断嵌套层数可达255层。
如果需要,可以禁止中断嵌套管理。
6、RAM要求小:Small RTOS51为小RAM系统设计,因而RAM需求小,相应的系统服务也少。
Small RTOS51的动行条件首先,必须有一个基于51系列单片机的C语言编译器。
如果需要直接使用这些代码,则就需要Keil C51编译器了。
当不使用消息队列时,需要Keil C51V6.14以上版本;当使用消息队列时,需要Keil C51V6.23以上版本。
特别注意:当程序复杂时不能用9级优化。
其次,必须有一个完全兼容51的单片机;当然,也可以使用软件仿真运行。
Small RTOS51的存储器需求Small RTOS51可以在没有任何外部数据存储器的单片8051系统上运行,但应用程序仍然可以访问外部存储器。
Small RTOS51可以使用C51支持的全部存储器模块,选择记忆模型仅影响应用目标的位置。
一般来说,Small RTOS51应用程序工作于小模式下。
Small RTOS51没有按照bank switching程序来设计,不能使用code banking程序。
Small RTO51的任务堆栈的计算为了节省RAM,Small RTOS51把所有自由内部RAM分配给当前任务。
基于RTX51实时操作系统的自动循迹小车
TAS #l K TAS #2 K T K# AS n
VCC
M EM0R
CPU
图 1 多任务 系统程序 原理
图 2 检 测 电路
收 稿 日期 :0 1 3—2 ; 回 日期 :0 1 4 6 2 1 —0 7修 2 1 —0 —2
I N1
0UT3 I N2
4
Байду номын сангаас
0UT 4 I N3 GND I N4
图 6 电机 驱 动
图 7 L9 2 8引脚
角度的状态的控制。如果把控制车身转速的数学模 型看做是 一阶滞后 环节 , 要实现 系统 的 则
良好 的跟 随性控 制 应 该 选 择 比例 调 节 器 , 为 比例 因 调 节器 能使 系 统 的调节 更快 。系统 原理 图 如 图 8 所 示 , 是一 个 闭环控 制 系统 , 这 由于 系统有 反馈 作 用 的 存在 , 具有 自动修 正被 控量 出现 偏 差 的能力 , 制效 果好 。 控
12 硬件 设计 .
黑线检测用 P P0 R 2 红外线检测器来实现 , 这个传感器有一个发射端和一个接收端。当发射端发出的
红外线照射到 白纸 的时候 , 接收端能接收到较强 的信号 ; 当发射端发 出的红外线照射到黑线时 , 接收端能
接收到的信号就非常弱 了。从而能判断小车的位置 , 调用不同的程序来实现车体转 向, 从而实现了寻迹 ,
作者简介 : 黄欢(97 )男 , 18- , 广东高州人 , 在读大学本科生 , 研究方 向, 电气工程及其 自 动化 。
4 8
广东 石油 化 工学 院学 报
2 1 在 01
ENA
RTX51tiny实时操作系统在单片机STC12C5A60S2上的移植
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个,非常容易使用。
第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系列单片机中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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切换到另一准备运行的任务并且允许这个任务执行片刻。
时间片非常短、通常为几个毫秒。
因此、它表现得如同各个任务是同时地执行的。
RTX51使用一个8051硬件计时器中断作为定时程序,产生的周期性中断用于驱动 RTX51时钟。
RTX51不需要在你的程序中拥有一个主函数。
它将自动开始执行任务 0。
如果你确实有一个主函数,你必须利用 RTX51 Tiny 中的 os_create_task函数或 RTX51中的 os_start_system函数手工启动 RTX51。
下面的例子显示一个只使用时间片轮转任务调度的简单的 RTX51应用程序。
在本程序里的二个任务是简单的计数器回路。
rtx51启动时执行函数名为 job0的任务 0。
这个函数添加了另一个叫做 job1 的任务。
在 jo b0 运行一会儿以后、RTX51切换到 job1。
在 job1运行一会儿以后、RTX 51转回到 job0。
这个过程将不确定地重复下去。
RTX51事件
即使是在等待一个任务的时间片到达时,你也可以使用 os_wait函数通知RTX51它可以让另一个任务开始执行。
这个功能中止正在运行的当前任务然后等待一个指定事件的发生。
在这个时候、任意数量的其他任务仍可以执行。
使用 RTX51的时间溢出事件
你可以用 os_wait函数等待的最简单的事件是 RTX51时钟报时信号周期溢出。
这类事件可被用于任务中需要延迟一段时间的地方。
这可用于查询一个开关状态的代码中。
在这样的应用中,只须每隔 50ms左右查询一次开关状态。
下一个例子示范了如何在允许其他的任务执行的时候使用 os_w ait功能延迟任务的执行。
nter0计数以后,job0调用os_wait函数以暂停3个时钟报时信号。
这时,rtx51切换到下一个任务 job1。
在 job1增加 counter1计数以后、它也调用os_wait以暂停5个时钟报时信号。
现在、rtx51没有其他的任务需要执行,因此在它可以延续执行 job0之前它进入一个空循环等待3个时钟报时信号过去。
这个例子运行的结果是 counter0每3个时钟报时周期加1,而 counter1每5个时钟报时周期加 1。
RTX51小型实时操作系统介绍(连载3)
使用 RTX51的信号
你可以使用 os_wait功能暂停一个任务并等待从另一个任务发出的信号
(或旗标)。
这可以用于协调两个或更多的任务。
等待一个信号会如下面所诉工作∶如果一任务在等待一个信号,并且信号标志是 0,在这个信号被发送之前,这个任务将一直处于挂起状态。
如果信号标志已经是 1,当任务查询信号时、信号标志会被清除,并且继续执行任务。
在上述例子中,job1一直处于等待状态,直到它接收到从任何其他任务发出的信号。
当它接收到一个信号时、它将使 counter1加 1然后继续等待另一个信号。
job0将连续地增加 counter0直到它溢出到 0。
当溢出发生时、job0发送一个信号给 job1同时 RTX51标记 job1为执行状态。
在 RTX51到达下一个时钟报时周期前,job1不会开始执行。
优先权和抢先机制
上述程序的缺点是当 job0发出信号时 job1并不是立即开始执行。
在一些情况下,由于时间的原因这是不受欢迎的。
RTX51允许你指定任务的
优先级。
一个具有较高优先级的任务变成可用的时,会中断一个低优先
级任务或抢在它前面执行。
这叫做优先型多任务或仅仅称之为抢先机制。
注意 RTX51 Tiny不支持抢先机制和优先权。
、
你可以变更上述函数 job1的说明给它一个比 job0高的优先级。
全部任务的默认优先级均为 0。
这是最低的优先级。
优先级可以设定为 0-3。
job1的优先级为1。
下面的例子说明如何定义
用 RTX51进行编译和连接
rtx51是完全地统一到 c51程序设计语言中的。
这使得很容易熟悉如何生成 RTX51应用程序。
上述的例子是可执行的 RTX51程序。
你不需要书写任何 8051汇编程序或函数。
你唯一需要做的是用c51编译你的 RTX51程
序并把他们用 BL51 Linker/Locator连接在一起。
例如:如果你使用 RT
中断
RTX51工作在与中断功能相似的状态下。
中断函数可以与 RTX51通信并且可以发送信号或消息给 RTX51任务。
RTX51 Full允许将中断指定给一个任务。
消息传送
RTX51 Full支持使用以下函数在任务间进行消息交换:SEND、 RECEIVE M ESSAGE和 WAIT for MESSAGE。
消息是一个可以解释为指向存储块的指示字的 16位数值。
RTX51 Full支持使用可分配存储区系统、可变大小的消息。
CAN通信
局域网控制器可以很容易地用 RTX51/CAN实现。
RTX51/CAN是一个统一在RTX51 Full中的 CAN任务。
RTX51 CAN任务实现经由 CAN网络的信息传送。
其他的CAN工作站既可以使用 RTX51 配置也可以不使用 RTX51 配置。
BITBUS通信
RTX51 Full 包括支持用 Intel 8044传送信息的主和从 BITBUS任务。
事件
RTX51的等待功能支持以下事件∶
·超时(Timeout)∶挂起运转的任务指定数量的时钟报时周期。
·间隔( Interval)∶(仅在 RTX51 Tiny中使用)类似于超时,但是软件定时器没有复位来产生循环的间隔(时钟所需要的)。
·信号(Signal)∶用于任务内部协调。
·消息(Message)∶(仅适用于 RTX51 Full)用于消息的交换。
·中断( Interrupt)∶(仅适用于 RTX51 Full)一个任务可以等待 8051硬件中断。
·旗标标志( Semaphore)∶(仅适用于 RTX51 Full)旗标标志用于管理共享的系统资源。