如果使用process\u poll(&;process)设置了进程的needspoll变量,那么Contiki内核何时轮询该进程
我不理解Contiki OS的core/dev/serial line.c文件中使用的函数“process_poll(&serial_line_process);”的含义。我在上读到,它在进程控制块中设置了needspoll变量,使内核能够在中断发生时轮询这个进程。如果有人能够解释这个过程是如何以及何时被调用的,我将不胜感激 我在尝试使用特定于contiki的机制读取串行输入时遇到了这个问题,正如在wiki页面上解释的那样。从串行端口读取字符,我验证程序控制是否达到进程轮询(&serial\u line\u进程);函数int serial_line_input_byte中的语句(无符号字符c);在文件serial line.c中。这已设置为平台串行输入驱动程序的回调。但在那之后什么也没发生。似乎进程串行_输入_进程最初执行了进程_YIELD();声明,从那以后就没有人打过电话。下面是我用于测试的流程的代码如果使用process\u poll(&;process)设置了进程的needspoll变量,那么Contiki内核何时轮询该进程,c,serial-port,contiki,C,Serial Port,Contiki,我不理解Contiki OS的core/dev/serial line.c文件中使用的函数“process_poll(&serial_line_process);”的含义。我在上读到,它在进程控制块中设置了needspoll变量,使内核能够在中断发生时轮询这个进程。如果有人能够解释这个过程是如何以及何时被调用的,我将不胜感激 我在尝试使用特定于contiki的机制读取串行输入时遇到了这个问题,正如在wiki页面上解释的那样。从串行端口读取字符,我验证程序控制是否达到进程轮询(&serial\u
#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();
}
#包括“contiki.h”
#包括“dev/serial line.h”
#包括
过程(测试_系列,“系列线路测试过程”);
自动启动\u进程(&测试\u序列);
进程线程(测试串行、ev、数据)
{
进程_BEGIN();
对于(;;){
过程_产量();
如果(ev==串行线路事件消息){
printf(“收到的行:%s\n”,(char*)数据);
}
}
进程_END();
}
Aprocess\u poll()
将调用您的pollhandler,例如
PROCESS_POLLHANDLER(pollhandler());
进程将被发送进程\事件\轮询事件,因此,如果您愿意,可以这样等待:
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_POLL);
实际上,问题不在于process\u poll
功能。在与这个问题斗争了几周之后,我发现问题在于process\u init
需要在main()
中的serial\u line\u init
函数之前调用。否则,serial\u line\u进程
将不会添加到process\u列表
中,调用process\u poll
将无效