Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果使用process\u poll(&;process)设置了进程的needspoll变量,那么Contiki内核何时轮询该进程_C_Serial Port_Contiki - Fatal编程技术网

如果使用process\u poll(&;process)设置了进程的needspoll变量,那么Contiki内核何时轮询该进程

如果使用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

我不理解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();声明,从那以后就没有人打过电话。下面是我用于测试的流程的代码

 #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();
}
A
process\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
将无效