与此同时,我确实设法弄清楚了。这是任何面临同样问题的人的解决方案。以下代码有效。根据您是否定义 USE_SERIAL_LINE,您可以决定是要使用 serial-line-module 还是您自己的 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 输出时需要记住一件事。仅当出现“\n”时才会发送 UART 消息 - 这意味着每个 printf 语句都应以换行符结尾。否则,您的字符串只会在出现换行符时被缓冲并发送出去。