Мне удалось выяснить это в то же время. Вот решение для тех, кто сталкивается с той же проблемой.
Следующий код работает. В зависимости от того, определяете ли вы USE_SERIAL_LINE, вы можете решить, хотите ли вы использовать модуль последовательной линии или собственный обработчик int.
#include <stdio.h>
#include <string.h>
#include "contiki.h"
#include "contiki-net.h"
#include "dev/uart0.h"
#define USE_SERIAL_LINE
#ifdef USE_SERIAL_LINE
#include "dev/serial-line.h"
#endif
PROCESS(init_system_proc, "Init system process");
AUTOSTART_PROCESSES(&init_system_proc);
int uart_handler(unsigned char c){
printf("Single Byte input.\n");
return 1;
}
PROCESS_THREAD(init_system_proc, ev, data){
PROCESS_BEGIN();
uart0_init(0);
#ifdef USE_SERIAL_LINE
serial_line_init();
uart0_set_input(serial_line_input_byte);
#else
uart0_set_input(uart_handler);
#endif
while (1) {
PROCESS_YIELD();
#ifdef USE_SERIAL_LINE
if(ev == serial_line_event_message)
printf("Serial input.\n");
#endif
}
PROCESS_END();
}
Есть одна вещь, которую вы должны иметь в виду при использовании printf для вывода UART. Сообщение UART будет отправлено только при появлении «\ n» - это означает, что каждый оператор printf должен заканчиваться символом новой строки. В противном случае ваша строка буферизируется и отправляется только после появления символа новой строки.