RTX实时操作系统(RTOS)简介学习笔记
RTOS:Real time Operation System
Keil RTX 是免版税的确定性实时操作系统,适用于 ARM 和 Cortex-M 设备。
【RTX概述】
RTOS 可以自由地调度系统资源,比如CPU和内存,并且提供一种任务间通信机制。
RTX程序使用标准的C结构编写,运用RealView编译器进行编译。RTX.H 头文件定义了RTX函数以及宏,可以让轻松地声明任务并达到RTOS所有特性。
RTX的基本功能就是开始和停止任务(进程),除此之外还支持进程通信,例如任务的同步、共享资源(外设或内存)的管理、任务之间消息的传递。
开发者可以使用基本函数去开启实时运行器,去开始和终结任务,以及去传递任务间的控制(轮转调度)。开发者可以赋予任务优先级。
【RTX进程通信】
>> 事件标志
事件标志是实现进程同步的主要方法,每个进程有16个事件标识可供使用,所以最多能等待16个不同的事件。也可以同时等待多个事件标志,这种情况下,如果这些事件标志是与的关系,那么这些事件标志必须都被置位后该进程才能继续运行;如果这些事件标志是或的关系,那么这些事件标志中的一个或几个被置位后该进程就可以继续运行。
事件标志也可被ARM中断功能置位。在这种机制下,通过使用ARM中断函数设置任务等待的标志,可以使异步的外部事件和RTX核的任务同步。
>> 信号量
在多任务实时操作系统中,需要特别的方法访问共享资源。否则,这些任务对共享资源的同时访问可能会导致数据的不一致或外设的错误操作。
解决访问临界资源问题的主要方法是信号量。信号量是包含了虚拟标志的软件对象。内核将标志给第一个请求的任务。在任务将其返回给信号量之前,没有其他的任务可以获取这个标志。只有拥有标志的任务才能访问公共资源,这就阻止了其他的任务访问和扰乱公共资源。
当信号量的标志不可用时,访问它的进程将被挂起,一旦标志被返回,这个进程就会被唤醒。为了解决错误的等待条件,必须引入超时机制。
>> 互斥量
互斥量是解决进程同步问题的另一种方法。它们用作对临界区的访问控制,只有拥有互斥量的进程才能访问临界区,其他试图访问临界区的进程将被阻塞。
>> 信箱
有时进程之间需要交换消息,这在网络中是很常见的,例如TCP-IP、UDP、ISDN等。
消息就是包含协议消息或帧的内存块的指针,这样的内存块可以动态的分配和提供给用户。为了防止内存泄漏,用户有责任正确地分配和回收内存块。
如果接收进程访问信箱中的消息不存在,它将被挂起,直到该消息被发送进程发送到信箱中,该被挂起的接收进程才会被唤醒。
【RTX技术规范】
支持的进程数:最多256
支持的信号量数:每个进程16个
RAM 要求:最少500字节
代码要求:小于5 K字节
硬件要求:一个或多个片上时钟可用
用户进程优先级: 1 - 255
进程切换的时间:小于5usec @60MHz, 0 ws.
中断停止时间:小于1.8usec @60MHz, 0 ws
RTX核的默认配置是:10个任务、10个用户定时器、禁止栈的检查。
【RTX时序规格】(单位:us微秒)
初始化系统(os_sys_init), 启动进程: 36.3
创建定义的进程,没有进程切换: 12.9
创建定义的进程,切换进程: 14.6
撤消进程(通过os_tsk_delete): 5.9
进程切换(通过os_tsk_delete_self): 8.8
进程切换(通过os_tsk_pass): 4.6
进程切换(upon set event): 7.3
进程切换(upon sent semaphore): 5.5
进程切换(upon sent message): 6.1
设置时间(没有进程切换): 2.5
发送信号量 (没有进程切换): 1.9
发送消息(没有进程切换): 2.8
获得进程标识符 (os_tsk_self): 1.0
IRQ中断服务子程序的中断响应时间: 0.4
IRQ中断服务子程序的最大等待时间(lockout): 2.2
IRQ中断服务子程序的最大中断延迟 (response + lockout): 2.6
RTX核的实时响应是基于多任务并发执行的思想,将系统必须响应的任务被分成几个更小的任务。
【RTX工作原理】
1.时间片中断
使用一个标准的ARM定时器产生周期性的中断,这个中断即RTX核的时间片中断。RTX核是通过定时器0来产生系统时钟片。任何一个定时器都可以作为系统时钟片产生器,在系统配置文件RTX Config.c可进行设置。
RTX核时间片中断每隔150000个机器周期产生一次,因此速度运行的标准ARM设备来说,其时钟片是0.01秒(10ms)或者说是100Hz(60MHz/4/150000)。
2.系统时钟任务
节拍时钟任务是系统任务,在每个时钟节拍中断中执行,具有最高的优先级,而且不会被抢占,其主要是用于任务间的切换。
最高优先级原理:os_clock_demon 是系统节拍时钟脉冲任务,是系统任务,也是由系统创建,管理其他的所有任务,处理任务延时超时和将等待任务休眠。当必需条件满足,又将休眠任务唤醒。
3.任务管理
RTX的所有任务都处在一个确定的状态,主要状态类别有:
运行态RUNNING、就绪态READY、阻塞等待态WAIT_*、不活跃态INACTIVE
4.空闲任务
空闲任务os_idle_demon,是一个简单的死循环。
ARM设备提供了空闲模式以减少能耗,它是通过停止执行程序来实现的,可以通过中断来唤醒。在这种模式下,所有的外设包括中断系统仍然在运行。
RTX核是在os_idle_demon()空闲任务(当没有其他任务处于就绪态时)中初始化空闲模式的。当RTX核时间片中断(或其他中断)发生时,微控制器将重新开始执行程序。
可在RTX核os_idle_demon()空闲任务中执行用户自己扩展的代码,在 RTX_Config.c系统配置文件中可以设置这些代码。
注意:在使用JTAG接口调试时不能使用空闲模式。
5.系统资源
TCB,RTX内核任务由任务控制块。相当于linux下的PCB。
6.多任务协作
如果禁止了多任务轮转,必须设计和实现多任务的协作。那么在每一个任务的某些位置都必须调用系统等待函数如os_dly_wait() 和os_tsk_pass(),这些函数可通知RTX 核去执行另一个任务。
注意:如果下一个就绪的任务拥有比当前运行任务低的优先级,则调用os_tsk_pass 不会产生任务切换。
7.轮转多任务
即并发,实际上,这些任务并非真正并发执行,而只是基于时间片的轮转,由于时间片很短,仅有几个毫秒,所以感觉到这些任务好像是在同时执行。
8.多任务抢占
RTX核是一个实时的多任务抢占系统,如果有一个比当前运行任务优先级高且就绪的任务,那么当前的任务将会被挂起。
9.栈的管理
RTX核系统需要一个当前运行的任务的栈空间:
局部栈: 存储参数,动态变量和函数的返回地址,该栈可在ARM芯片中的任何地方,但基于性能的考虑,推荐使用片上RAM。
10.中断函数
RTX允许中断函数并发操作,但还是推荐避免使用IRQ中的嵌套。
————————————————
版权声明:本文为CSDN博主「不才Jerry」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_36184075/article/details/70455189