[英]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.