完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我需要在 RTOS SDK ( 1.4.0 ) 下为我ESP8266项目构建一个 UART 控制台例程(作为线程),用于调试目的,但是,我无法使用 scanf 或 getchar 从 UART0 获取数据。该程序的编译和链接没有问题,但是在执行时,FreeRTOS 会进入一个疯狂的循环。控制台例程是作为线程构建的。如果我使用 scanf 或 getchar 注释块代码,则线程运行良好,表明问题出在 scanf 或 getchar 上。
我可以使用哪个函数来代替 scanf 或 getchar? 请问有什么例子吗? |
|
相关推荐
1个回答
|
|
在ESP8266 RTOS SDK版本1.4.0中,您可以使用UART接口从UART0获取数据。由于您提到使用scanf或getchar会导致FreeRTOS进入疯狂循环,我们可以尝试使用其他方法来实现UART读取。这里是一个使用UART接口读取数据的示例:
1. 首先,您需要初始化UART接口。在您的项目中找到`user_main.c`文件,并在`user_init()`函数中添加以下代码: ```c #include "c_types.h" #include "osapi.h" #include "ets_sys.h" #include "osapi.h" #include "gpio.h" #include "uart.h" LOCAL void ICACHE_FLASH_ATTR user_init(void) { // 初始化UART0 uart_init(BIT_RATE_115200, BIT_RATE_115200); } ``` 2. 接下来,创建一个新的线程来处理UART读取。在`user_main.c`文件中添加以下代码: ```c #include "osapi.h" #include "user_interface.h" #define STACK_SIZE 1024 LOCAL os_event_t uart_task_queue[10]; LOCAL void ICACHE_FLASH_ATTR uart_task(os_event_t *events); os_thread_t uart_thread; void ICACHE_FLASH_ATTR user_init(void) { // ... 之前的代码 ... // 创建UART任务线程 os_thread_create(uart_thread, "uart_task", uart_task, NULL, os_priority_normal, 1, STACK_SIZE, uart_task_queue, 10); } LOCAL void ICACHE_FLASH_ATTR uart_task(os_event_t *events) { while (1) { // 从UART读取数据 uint8_t data[128]; int len = uart_recv(0, data, sizeof(data), 100 / portTICK_RATE_MS); if (len > 0) { // 处理接收到的数据 os_printf("Received %d bytes: ", len); for (int i = 0; i < len; i++) { os_printf("%02X ", data[i]); } os_printf("n"); } // 等待下一个事件 ets_event_poll(events, 10); } } ``` 这个示例创建了一个名为`uart_task`的新线程,它使用`uart_recv()`函数从UART0读取数据。`uart_recv()`函数的参数包括UART端口号、接收缓冲区、缓冲区大小和超时时间。在这个例子中,我们设置了一个100毫秒的超时时间。 请注意,这个示例使用了`os_printf()`函数来打印接收到的数据,而不是`printf()`,因为`os_printf()`是FreeRTOS兼容的。 希望这个示例能帮助您解决问题。如果您还有其他问题,请随时提问。 |
|
|
|
只有小组成员才能发言,加入小组>>
543浏览 6评论
455浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
435浏览 5评论
437浏览 4评论
410浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 17:53 , Processed in 0.786487 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号