Round Robin作用
时间:2023-02-13 16:39:01 | 来源:营销百科
时间:2023-02-13 16:39:01 来源:营销百科
Round Robin作用:
RTX51Tiny可以配置成使用
round-robin多任务。Round-robin容许quasi-parallel执行多任务。任务并不是连续执行的,而是分时间片执行的(可用的CPU时间被分成时间片,RTX51 Tiny把时间片分配给各个任务)。时间片的时间很短(以毫秒为单位),所以任务看起来像连续执行一样。任务在分配给他的时间片内执行(除非放弃)。然后切换到下一个就绪的任务。这个时间片在RTX51 Tiny Configuration.配置文件中定义.
下面的例子是一个使用round-robin多任务的RTX51Tiny的程序。这个程序中的两个任务都是循环计数器。RTX51 Tiny执行称为job0的任务0。这个函数创建了另一个任务job1。Job0执行完它的时间片后,RTX51 Tiny开始执行job1。Job1执行完它的时间片后,RTX51 Tiny又返回到job0开始执行。然后再切换到job1,如此循环。
#include
int counter0;
int counter1;
void job0 (void) _task_ 0 {
os_create (1); /* mark task 1 as ready */
while (1) { /* loop forever */
counter0 ; /* update the counter */
}
}
void job1 (void) _task_ 1 {
while (1) { /* loop forever */
counter1 ; /* update the counter */
}
}
注意:除了一个任务的时片到时,也可以使用函数os_wait 或函数os_switch_task通知RTX51Tiny可以切换到另一个任务。函数os_wait挂起当前任务直到特定的事件发生。在这期间任何其他的任务都可以执行。
Cooperative 任务切换??如果你禁止了round-robin多任务,你必须设计并执行你的任务从而让他你们以cooperativ方式工作。特别地,你必须在每个任务的某个地方调用。这些函数告知RTX51 Tiny切换到另一任务。
函数os_wait 和函数os_switch_task的不同之处在于os_wait可以让你的任务等待某一事件的发生,而函数os_switch_task直接切换到另一个准务就绪的任务。
空闲任务当没有任务需要运行时,RTX51Tiny执行空闲任务。空闲任务只是一个简单的无限循环,比如:
SJMP $
有些8051器件提供了空闲模式,通过持起任务的执行以降低功耗,直到出现中断。在这种模式下,所有外围设备包括中断系统仍然在继续工作。
RTX51 Tiny允许你在空闲任务中初始化空闲模式(没有其他任务需要执行)。当RTX51 Tiny时钟节拍中断(或任何其他中断)出现,微控制器恢复执行程序。空闲任务执行的代码可以通过配置文件CONF_TNY.A51进行配置并使能
堆栈管理RTX51 Tiny在8051的IDATA内存区为每个任务维持一个堆栈。当一个任务执行时,给他准备了最大可能需要地堆栈。当任务切换时,前一个任务的堆栈被压栈并重定位,而把当前任务的堆栈被重定位并弹栈。STACK是堆栈的起始地址。在这个例子中,位于堆栈中的对像包括全局变量,寄存器和位地止内存,剩下的内存用作任务堆栈。内存的顶端在配置文件中定义。