REX是一个实时的抢占式操作系统.
每个REX任务都独立地由REX内核调度,每个任务都有一个数据结构rex_tcb_struct.TCBs按优先级顺序编排在一个单一的链表中--- -活动的和挂起的任务在同一个列表中.每个任务将一直执行到下列事件之一发生而进行上下文的切换:
自愿挂起如执行rex_wait or rex_timed_wiat;
在高优先级的挂起任务里设置了一个信号;(??)
产生了一个更高优先级的任务;
一个正在执行的任务使另外一个任务的优先级比它的优先级高;
中断产生并且ISR切换进优先级比被中断的任务优先级高的任务中。
REX的允许任务的优先级范围为1到65535,1是最低优先级,优先级为0预留给空闲任务使用.没有两个及两个以上的任务具有相同的优先级. Rex操作系统
任务API: rex_def_task
优先级API: rex_set_pri,rex_task_pri,rex_get_pri.
REX的信号工作原理:Rex的信号主要集中在TCB的两个Field:
Sigs:是一个掩码,包括给定任务已经设置的信号
Wait:是一个掩码,包括一些信号,一旦这些信号被设置,任务就挂起.
信号的函数有: rex_wait(), rex_set_sigs().rex_get_sigs(),rex_clr_sigs()
REX Timers:活动的REX计时器是一个具有rex_timer_struct结构的双向链表.使用REX计时器的任务先分配一个rex_timer_struct,然后调用rex_def_timer. Rex_set_timer启动一个计时器.
中断处理:IRQ处理器调用tramp_isr,然后决定哪个中断产生.
Rex task之间交互任务间的通信是通过队列和信号量来完成的.
想从其他任务接受消息的任务生成一个全局命令队列和一个与队列相关的信号。
想从其他任务发送消息的任务:
获取目标任务相关的类型的一个命令的Buffer;
完成合适区域的填充;
把消息排队到命令队列中;
为该命令设置相关的信号 Rex task之间交互(Cont.)
通常,队列操作和设置信号被封装成一个函数。 Rex task之间交互(Cont.) Task A Task B Get cmd buffer from task B and init Put cmd buffer to task B queue Set signal for cmd Wait signal Process signal Get cmd from queue and process it。
参考:http://blog.csdn.net/iamliuyanlei/article/details/8788792