2

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

我在尝试使用 wiki 页面上解释的 contiki 特定机制读取串行输入时遇到了这个问题。从串口读取字符,我验证程序控制已到达 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();
 }
4

2 回答 2

0

Maneesh,问题不在于process_poll功能。在为这个问题苦苦挣扎了几个星期之后,我发现问题是process_init需要serial_line_initmain(). 否则serial_line_process不会添加到 中process_list,调用process_poll将无用。

于 2014-04-30T14:51:40.210 回答
0

Aprocess_poll()将调用您的 pollhandler,例如

PROCESS_POLLHANDLER(pollhandler());

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

PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_POLL);
于 2014-01-28T13:49:03.450 回答