簡體   English   中英

如果已使用process_poll(&process)設置了Needspoll變量,則Contiki內核將輪詢該進程何時

[英]When is a process polled by Contiki kernel if its needspoll variable has been set using process_poll(&process)

我不了解Contiki OS的core / dev / serial-line.c文件中使用的函數“ process_poll(&serial_line_process);”的含義。 我已經在Wiki頁面上閱讀了它在流程控制塊中設置了Needspoll變量的信息,使內核能夠在發生中斷時輪詢此進程。 如果有人可以闡明如何以及何時調用此過程,我將非常有義務。

我在嘗試使用特定於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);

Maneesh,問題不在於process_poll函數。 經過數周的研究,我發現問題是在main() serial_line_init函數之前需要調用process_init 否則, serial_line_process將不會添加到process_list並且調用process_poll將無用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM