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条件下呢?
以上是关于RTX51 Tiny os_wait的使用的主要内容,如果未能解决你的问题,请参考以下文章