Process 什么是';收益率';Contiki rtos中的平均值

Process 什么是';收益率';Contiki rtos中的平均值,process,rtos,contiki,contiki-process,Process,Rtos,Contiki,Contiki Process,我正在与contiki合作,试图理解其中使用的术语。 我在互联网上观察到一些词,比如收益率、无堆栈。一些例子 PROCESS_EVENT_CONTINUE : This event is sent by the kernel to a process that is waiting in a PROCESS_YIELD() statement. PROCESS_YIELD(); // Wait for any event, equivalent to PROCESS_WAIT_EVENT().

我正在与contiki合作,试图理解其中使用的术语。 我在互联网上观察到一些词,比如收益率、无堆栈。一些例子

PROCESS_EVENT_CONTINUE : This event is sent by the kernel to a process that is waiting in a PROCESS_YIELD() statement.
PROCESS_YIELD(); // Wait for any event, equivalent to PROCESS_WAIT_EVENT().
PROCESS_WAIT_UNTIL(); // Wait for a given condition; may not yield the process.
产生流程是否意味着在contiki中执行流程。contiki是无堆栈的,这意味着什么呢?

contiki使用所谓的protothreads(contiki特有的术语)来支持此操作系统中的多个应用程序级进程。Protothread只是计算机科学中一种编程抽象的别致名称

本文中的“屈服”是“屈服执行”(即放弃执行)的缩写。这意味着“让其他的原线程执行,直到出现一个指向当前原线程的事件”。这样的事件可以由其他原型线程和中断处理函数生成。“wait”宏与之类似,但允许产生并等待特定的事件或条件

Contiki原线程是无堆栈的,因为它们都共享相同的全局执行堆栈,而“真实”线程通常拥有自己的堆栈空间。因此,本地变量的值不会保留在Contiki protothreads中。例如,这样做是未定义的行为:

 int i = 1;
 PROCESS_YIELD();
 printf("i=%d\n", i); // <- prints garbage
当然,其他选择是使用全局变量,但拥有大量全局变量是糟糕的编程风格。在protothread函数中声明的静态变量的好处是,它们对其他函数(包括其他protothreads)是隐藏的,即使在较低级别,它们被分配到全局静态内存区域。

在一般情况下,在任何操作系统中“屈服”意味着同步调用调度程序(即按需而不是通过中断)以便给其他线程提供控制的机会。在RTO中,这种功能只会影响具有相同优先级的线程,并且可能需要额外使用或代替先发制人的循环调度。大多数RTO没有显式的屈服函数,或者在某些情况下(如VxWorks)使用零长度延迟可以实现相同的效果

在协同调度程序(如Contiki中的调度程序)中,这样一个函数对于允许其他线程在非阻塞线程中运行是必需的。一个线程始终具有控制权,直到它调用一个阻塞或让步函数为止


Contiki调度器的协作性质意味着它不能被归类为RTO。只有通过仔细和适当的应用程序设计,而不是通过固有的调度器行为,才有可能实现适合特定应用程序的实时行为。

非常有用。因此,原型线程可以产生或等待r一个事件,在它等待的同时,另一个原线程可以执行并生成该事件。现在,第一个进程将检查该事件并运行事件例程。然后,在完成事件例程后,进程1将再次等待,或者屈服和控制将返回到进程2。等待和屈服是否相同?如果存在公共的进程的所有变量都将对其他进程可见?顺便说一句:Contiki不是@morty所说的rtosWhat;虽然一个用于资源受限的嵌入式目标的操作系统具有一些令人印象深刻的功能,但其中之一不是实时功能。
 static int i = 1;
 PROCESS_YIELD();
 printf("i=%d\n", i);