RTX51 Tiny os_wait的使用

Posted 上官梦舞

tags:

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

RTX51 Tiny 有三个延时代码

这里讲os_wait2

char os_wait2 (
  unsigned char event_sel,      /* events to wait for */
  unsigned char ticks);         /* timer ticks to wait */

 

使用方法, 系统的systick为1ms

//串口任务
void task_uart(void) _task_ UART_TASK_PRIO PrintSysInfo();//输出系统信息 UART_RxStart(); while(1) os_wait2(K_TMO|K_SIG, 200);//要么有别的任务把我就绪,要么等了200个心跳既200ms,才会继续向下运行 if (RX1.Sta) SendBytes(RX1.Buff, RX1.Cnt); locksn = 3;//给开锁任务发消息 os_set_ready(LOCK_TASK_PRIO);//赶紧处理消息 UART_RxStart(); if (TX1.Cnt) SendBytes(TX1.Buff, TX1.Cnt); memset(TX1.Buff, 0, TX1.Cnt); TX1.Cnt = RESET; SendString("timeout\\r\\n");

  

 

  

//定时器处理接收超时
void TIM4_Int(void) interrupt 20 if (RX1.OverTime) RX1.OverTime--; if (RX1.OverTime==0) RX1.Sta = SET;//串口接收数据超时,需要处理现在收到的数据 os_set_ready(UART_TASK_PRIO);//设置任务状态就绪

  

 

//锁控任务
void task_lock(void) _task_ LOCK_TASK_PRIO while (1) os_wait2(K_SIG,0);//平时就等着 if (locksn)//如果被其他任务唤醒,看看是否有信息需要处理 Lock_Set(locksn, OPEN); os_wait2(K_TMO, 200); Lock_Set(locksn, CLOSE); locksn = 0;
              

  

 

效果

1、串口任务没有收到数据的时候会200ms发送一次timeout

2、串口收到数据lock3,将收到的数据返回,并给lock任务发送开锁信息

3、开锁任务处理信息,开200ms后关闭并,告诉串口任务需要发送信息

4、在开锁在执行的那200ms,串口任务继续在运行,输出了两次timeout

5、开锁完成后,串口任务收到了开锁任务的信息,发送rxok

 

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

请问对于单片机实时系统,多个任务是同时开始的吗?比如:
while(1)

os_wait(K_SIG,TASK1,0);//等待Task1 任务信号
for(i=0;i<=7;i++)

LED_PORT|=1<<i;//处理一个事情
os_wait (K_TMO,1,0);//延时

os_send_signal(TASK2);//向Task2 任务发送信号

如果Task2中处理事务后,再给Task3任务发送信号,Task3再给Task1任务发送信号,那么程序是如何走的呢?是做完1的任务再做2,做完2再做3,做完3再做1,如此循环下去?看不出多任务啊,那又何必采用rtx51tny.h呢,何必工作在trx51-tiny条件下呢?

其实c语言 是按照顺序结构来执行的 ,说以你组个程序是在大循环中里面 扫描 标志位的 状态,进而执行对应程序的 参考技术A 单片机做处理时,是对编写的指令一步步执行的

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

rtx tiny os

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

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

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

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

STM8的数据@near @tiny定义