Os_wait来实现提前退出当前任务,一般形式为:
Char os_wait(unsigned char event_sel,//event_sel等待的事情名称
Unsigned char ticks,//ticks是等待event_sel这件事发生所需要的计时数
Unsigned int dummy//dummy在RTX51 Tiny中没有使用,在RTX中用
);
Event_sel可以是字符常量K_IVL、K_SIG和K_TMO这3个数中的任何一个,也可以是他们的逻辑组合。
K_IVL---------周期性的等待。
K_SIG---------等待一个信号的发生
K_TMO---------等待一段时间到。
有个例子假如使用的函数为os_wait(K_TMO,1,0),CPU遇到os_wait(K_TMO,1,0)时则把当前的任务挂起转而执行准备就绪的任务。当os_wait(K_TMO,1,0)所延时的时间到了,CPU就会回来继续执行。当然CPU不一定时立刻回来的,因为此时CPU可能正在执行另一个任务,所以要等到属于自己的时间片时才会回来继续执行os_wait(K_TMO,1,0)后面的语句,因此用os_wait(K_TMO,1,0)延时并不准确,只是大概延时而已。
Char os_wait(unsigned char event_sel,//event_sel等待的事情名称
Unsigned char ticks,//ticks是等待event_sel这件事发生所需要的计时数
Unsigned int dummy//dummy在RTX51 Tiny中没有使用,在RTX中用
);
Char os_wait1(unsigned char event_sel);//event_sel为等待的事情名称。
Os_wait1函数时os_wait函数的一个子集。Event_sel参数规定要等待的时间。在这里只能是K_SIG.当在任务中执行到该函数时这个任务就被终止执行了。在以后的时间里CPU也不会再来这个任务里执行了。除非在其他的任务里发送一个信号。帮助这个任务“解禁”,才使它又获得了重生。
Char os_send_signal(unsigned char task_id);//task_id为任务号
函数os_send_signal用于在一个任务中发送一个信号给另一个任务,一般用于任务之间的简单通信。
Char isr_send_signal(unsigned char task_id);//task_id为任务号
由于os_send_signal不能在中断函数里向任务发送信号。而函数isr_send_signal则可以在中断函数里执行,向某任务发送信号。
Char os_create_task(unsigned char task_id);
创建任务函数。
Char os_delete_task(unsigned char task_id);//task_id为任务号
只是从任务表中删除。
Char os_wait2(unsigned char event_sel, //event_sel为等待的事情名称
Unsigned char ticks,//ticks是等待event_sel这件事发生所需要的计时数
)
Char os_running_task_id(void),该函数就是判断当前正在执行的任务的任务号
不可太小也不要太大,这是因为他的计时是靠定时器0来实现的,如果设置的太小则会使得定时器不断响应中断从而不断保护数据从而消耗时间。
(1) 单片机使用要选择52系列的。
(2) 在程序中要把头文件rtx51tiny.h包含进来,即要有#include<rtx51tiny.h>
(3) 要设置工程。
图 6-1 选择操作系统为RTX-51 Tiny
文章评论(0条评论)
登录后参与讨论