gpt4 book ai didi

c - 如果进程的 needpoll 变量已经使用 process_poll(&process) 设置,Contiki 内核何时轮询进程

转载 作者:太空宇宙 更新时间:2023-11-04 00:06:49 26 4
gpt4 key购买 nike

我不明白 Contiki OS 的 core/dev/serial-line.c 文件中使用的函数“process_poll(&serial_line_process);”的含义。我读过 wiki pages它在进程控制 block 中设置 needpoll 变量,使内核能够在发生中断时轮询该进程。如果有人可以阐明调用此过程的方式和时间,我将非常感激。

我在尝试使用 contiki 特定机制读取串行输入时遇到了这个问题,如 wiki 页面上所述。从串行端口读取字符,我验证了程序控制达到了 process_poll( &serial_line_process) ;函数 int serial_line_input_byte(unsigned char c) 中的语句;在文件 serial-line.c 中。这已被设置为平台串行输入驱动程序的回调。但在那之后什么也没有发生。似乎进程serial_input_process最初执行的是PROCESS_YIELD();声明,此后一直没有被调用。以下是我用于测试的过程的代码。

 #include "contiki.h"
#include "dev/serial-line.h"
#include <stdio.h>

PROCESS(test_serial, "Serial line test process");
AUTOSTART_PROCESSES(&test_serial);

PROCESS_THREAD(test_serial, ev, data)
{
PROCESS_BEGIN();

for(;;) {
PROCESS_YIELD();
if(ev == serial_line_event_message) {
printf("received line: %s\n", (char *)data);
}
}
PROCESS_END();
}

最佳答案

process_poll() 将调用您的轮询处理程序,例如

PROCESS_POLLHANDLER(pollhandler());

进程将被发送 PROCESS_EVENT_POLL 事件,所以如果您愿意,可以像这样等待:

PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_POLL);

关于c - 如果进程的 needpoll 变量已经使用 process_poll(&process) 设置,Contiki 内核何时轮询进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20618783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com