什么是RTOS系统
RTOS是Real Time Operation System的缩写,即实时操作系统!
rtos51介绍
rtx51是什么
rtx51是keil官方开发的用于8051系列处理器多任务实时操作系统
rtx51可以干什么
RTX51可以简化那些复杂而且时间要求严格的工程的软件设计工作
rtx51的两个版本
RTX51 Full
RTX51 Full使用四个任务优先权完成同时存在时间片轮转调度和抢先的任务切换 RTX51工作在
与中断功能相似的状态下 信号和信息可以通过邮箱系统在任务之间互相传递 你可以从一存
储池中分配和释放内存 你可以强迫一个任务等待中断 超时或者是从另一个任务或中断发出的
信号或信息
RTX51 Tiny
RTX51 Tiny 是一个 RTX51的子集 它可以很容易地在没有任何外部存储器的单片8051系统上运
转 除了下列例外 RTX51 Tiny支持许多在 RTX51中的特征
RTX51 Tiny仅支持时间片轮转任务切换和使用信号进行任务切换 不支持抢先式的任务切换
不包括消息历程 没有存储器池分配程序
一般情况下,如果单片机的内存比较小的情况下,使用RTX51-Tiny,下面是RTX51-Tiny的一些参数
用VScode配置rtx51-Tiny
前面发过VSCode新建C51工程的例子,新建一个普通C51工程后,点击构建器选项
选择Rtx52-Tiny并保存
引入所需要的头文件即可:
编写一个简单的RTX51-tiny程序
#include "REG52.H"
#include "RTX51TNY.H"
sbit led0=P2^0;
sbit led1=P2^1;
//任务0是任务入口,相当于主函数,运行后就可以删除了
void job0() _task_ 0{
//创建启动任务1,2
os_create_task(1);
os_create_task(2);
//初始化完成,删除任务0
os_delete_task(0);
}
//task1
void job1() _task_ 1{
led0=0;
//等待其他任务发来信号,收到信号才继续往下执行
// os_wait(K_IVL);
}
//task2
void job2() _task_ 2{
//给任务发送一个信号,该任务收到信号后将解除等待状态
// os_send_signal(1);
led1=1;
}
TRX51-Tiny接口说明
按住CTRL
用鼠标左键
点击RTX51TNY.H
可以看到里面接口并不是很多
这里我们根据头文件一一总结讲解
unsigned char os_create_task(unsigned char task_id)
将一个任务移入任务队列
参数名 | 类型 | 描述 |
---|---|---|
task_id | unsigned char | 任务ID |
unsigned char os_delete_task(unsigned char task_id)
将一个任务移出任务队列
参数名 | 类型 | 描述 |
---|---|---|
task_id | unsigned char | 任务ID |
unsigned char os_wait(unsigned char typ, unsigned char ticks, unsigned int dummy)
等待某事件
参数名 | 类型 | 描述 |
---|---|---|
typ | unsigned char | K_SIG 等待信号 K_TMO 等待超时 K_IVL 等待间隔 |
ticks | unsigned char | 等待的定时器标数 |
dummy | unsigned int | 没有定义的值,默认写0 |
返回值 | 描述 |
---|---|
unsigned char | NOT_OK 参数错误TMO_EVENT 超时事件SIG_EVENT 信号事件RDY_EVENT 就绪事件 |
unsigned char os_wait1 (unsigned char typ)
等待某事件
参数名 | 类型 | 描述 |
---|---|---|
typ | unsigned char | K_SIG 等待信号 K_TMO 等待超时 K_IVL 等待间隔 |
unsigned char os_wait2(unsigned char typ, unsigned char ticks)
等待某事件
参数名 | 类型 | 描述 |
---|---|---|
typ | unsigned char | K_SIG 等待信号 K_TMO 等待超时 K_IVL 等待间隔 |
ticks | unsigned char | 等待的定时器标数 |
unsigned char os_send_signal(unsigned char task_id)
发送信号给某个任务,从任务信号调用
参数名 | 类型 | 描述 |
---|---|---|
task_id | unsigned char | 任务的ID |
unsigned char os_clear_signal(unsigned char task_id)
清除发送信号
参数名 | 类型 | 描述 |
---|---|---|
task_id | unsigned char | 任务的ID |
unsigned char isr_send_signal(unsigned char task_id)
发送信号给某个任务,从中断信号调用
参数名 | 类型 | 描述 |
---|---|---|
task_id | unsigned char | 任务的ID |
void os_set_ready(unsigned char task_id)
设置任务就绪标志
参数名 | 类型 | 描述 |
---|---|---|
task_id | unsigned char | 任务的ID |
void isr_set_ready(unsigned char task_id)
设置任务就绪标志
参数名 | 类型 | 描述 |
---|---|---|
task_id | unsigned char | 任务的ID |
unsigned char os_running_task_id(void)
返回当前正在运行的任务号
unsigned char os_switch_task(void)
切换任务,切换到的任务必须就绪,否则不会运行
void os_reset_interval(unsigned char ticks)
用于纠正由于 os_wait 函数同时等待 K_IVL 和 K_SIG 事件而产生的时间问题
参数名 | 类型 | 描述 |
---|---|---|
ticks | unsigned char | 等待的定时器标数 |