RTX51 Tiny

Posted jieruishu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RTX51 Tiny相关的知识,希望对你有一定的参考价值。

RTX-51 有 2 个版本:Full 和 Tiny。类似的国人写的 Small RTOS51

Full 需要的资源较多(8K ROM/450的XDATA),但支持抢占式任务调度和中断任务,以及任务间互发消息;Tiny 不支持抢占式调度,任务间也不能互发消息,但消耗资源少(7+3*任务数RAM/不占用XDATA)。

 参考资料见《RTX51 Tiny第2版用户手册》

一 特点:只适合51系列的周期性的任务场合(C8051F/STC),最多16个任务,没有主函数,从_task_ 0开始(用于创建其它任务,然后将自己删除,除_task_ 0外其它都是while(1)死循环),结构小巧只需要包含#include <rtx51tny.h>并在工程配置中选择。占用了定时器0和寄存器组1.

技术分享图片技术分享图片

Memory Model 用 Small 比较好,免得每次声明变量都写 data 修饰

技术分享图片

 

二系统滴答:

  • 配置文件ConfTny.A51中INT_CLOCK EQU 10000; default is 10000 cycles,意思是时钟滴答为10000个机器周期,即10000*1uS=10ms。所以os_wait(K_TMO, T, 0)定时时间=T*10MS;
    ;定时器时钟选择为系统时钟;
    ;fs=12M;0.001s*12000000=12000
    ;fs=24M;0.001s*24000000=24000
    ;fs=48M;0.001S * 48000000 = 48000
    INT_CLOCK    EQU    24000    ; default is 10000 cycles
  •  TIMESHARING,每个任务分到时间片,完了该任务被挂起切到其它就绪任务。默认是 5(5*INT_CLOCK),从这点来说Tiny-51适合周期性任务的场合,如果这个值是 0,那么,Round Robin 的任务轮询算法会停止,必须你自己手动 os_send_signal 或者 os_switch_task 来切换任务。某些时候,这样会提高实时性
  • RAMTOP。指定了可用 RAM 的顶部地址,默认是 0FFH,即 256 字节 RAM,任务多时要改小些
任务的状态:
1 运行态(running):只有一个
2 就绪态(read):通过调用延时函数后超时就处于该状态
3.阻塞(blocked):调用延时函数但未超时,或者调用任务切换函数后的状态。
4 休眠(sleeping):任务声明但未使用或者已经删除过的任务。
任务的主动切换:
void os_switch_task (void)//尽量少用,因增加13个字节的堆栈保护从而响应慢。
os_delete和os_wait
关于os_wait的三类参数:K_TMO、K_IVL和K_SIG
K_TMO:超时信号不累计
K_IVL:周期信号,可累计保证信号不丢失。
K_SIG
任务的独占:
方法1:禁止调度:TIMESHARING=0(适应于实时性不高)、关中断(EA=0/关TO中断但时间不能太长)
方法2:模仿FULL_RTX51编写申请和释放信号量,参考 https://blog.csdn.net/dkr269944905/article/details/72822959
注意事项:

三 函数:
3.1 创建任务:os_create_task(taskID);,对应的删除任务os_delete_task (taskID);

以上是关于RTX51 Tiny的主要内容,如果未能解决你的问题,请参考以下文章

STC单片机多任务操作系统(RTX51 Tiny)示例

rtx tiny os

51单片机多线程神器:Tiny-51操作系统

RTX 3080赛博朋克2077定制版公布

51单片机上实时多任务操作系统-教程

关于单片机实时系统的问题KEIL中的rtx51tny