Я не понимаю смысла функции "process_poll(&serial_line_process);", которая используется в файле core/dev/serial-line.c ОС Contiki. я читал на вики-страницах, что он устанавливает переменную needpoll в процессе блок управления, позволяющий ядру опрашивать этот процесс при возникновении прерывания. Если бы кто-то мог пролить свет на то, как и когда вызывается этот процесс, я был бы очень признателен.
Я столкнулся с этой проблемой, пытаясь прочитать последовательный ввод, используя специальный механизм 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();
}