OS:任务级设计,任务间耦合小;改变裸机前后台设计方案中后台任务轮训无优先级重要任务得不到确定性响应;伪并行,提高利用率。
在keilv4.74最后一个版本之后,KIELV5将KEIL-RTX该为CMSIS_RL_RTX(做了CMSIS的封装),适用于Cortex-M系列。
优点:性能和embos都差不多,移植非常简单,使能和添加RTX_Conf_CM.c(配置也是图形化方式)即可,免费,keil中带调试支持。
也可以以源码方式移植,见安富莱教程。
配置要点:
- Number of concurrent running tasks:最多人数数(不包括空闲任务,实际任务应该小于等于改值)
- Number of tasks with user-provided stack :用户自定义堆栈大小的任务数:其它的都是按缺省Task stack size ;一般先选择一个比较大的,通过调试再修改,其中M3和未使用FPU的M4系统栈=64(16个寄存器*4字节)*中断嵌套层数;而使用FPU的M4为200((16+极端情况34个浮点寄存器)*4)。堆栈大小与任务切换的现场保护与恢复,形参大小,局部变量,中断进入与嵌套。系统栈和任务栈:M3/M4的双堆栈结构,中断函数发生时的中断嵌套用的是系统栈MSP(在启动文件中,通过图形化配置改变,也可以在cubumX中改变),而RTX所有的任务使用的是PSP的任务栈(8字节对齐可以使用unint64_t)。
- Run in privileged mode :是否使能特权机模式
- Tick Timer Configuration :使用哪个定时器,定时器主频,系统时钟节拍数。
- ISR FIFO Queue size :调用中断服务程序时将此请求放到缓冲区中。
OS函数及流程:
1 初始化:有3个函数,中间那个常用,任务优先级为1~254,数值越小优先级越低,也支持任务具有相同的优先级,设计方法:RTX推荐的
IRQ任务(最高):由中断服务程序触发,阻塞式(只有这样高优先级任务才可以得到执行的机会)。
高优先级后任务(次高):人机交互的输入(按键监测、触摸监测)、消息的解析处理(串口、usb等)
低优先级的时间片任务(一般):周期性的处理,如显示(LCD/数码管、图形显示等)
空闲任务:系统任务。
2任何创建:4个函数
3任务删除:2个函数,参数为ID,若为0表示删除当前正在运行的任务。空闲任务作用:保证系统不超负荷的100%运行,可添加低功耗方法。
4 任务优先级更改:2个函数,参数为ID,prio
特权模式和用户模式:特权模式下才可访问的外设(systick NVIC MPU SCB 特殊功能寄存器(程序状态寄存器组/中断屏蔽寄存器组、控制寄存器));在非特权模式下访问和配置系统控制寄存器如NVIC会引起硬件异常。
4.1在用户模式下初始化核心外设寄存器的方法:1 在操作系统初始化之前做核心外设初始化 2使用SVC软中断。
4.2模式切换方法:CONTROL[0]=0或者在hander模式下,更改值可进入用户模式;用户模式只有SVC才可以进入特权模式