STM32
直播中

萧蔼晨

7年用户 958经验值
私信 关注
[问答]

使用cubeIDE配置的工程中printf在FreeRTOS线程任务中无法使用怎么解决?

使用cubeIDE配置完工程后,对printf进行了重映射,并且把例程中的syscalls.c也拷贝到了工程中,能够使用printf输出。但是如果加了FreeRTOS之后,在线程任务中printf不起作用,线程的其他功能正常,请教如何解决?

回帖(1)

风尚男人

2024-4-17 16:42:24
如果在FreeRTOS线程任务中无法使用printf,可能是因为printf是一个阻塞函数,会导致线程阻塞,从而影响其他线程的执行。为了解决这个问题,可以使用FreeRTOS提供的vTaskDelay函数进行延时,从而不会阻塞线程。

具体操作步骤如下:

1. 在工程中找到FreeRTOS线程任务所在的.c文件。
2. 在该文件中找到线程任务的函数,例如"void thread_task(void *args)"。
3. 在此函数中,首先添加一个适当的延时,例如vTaskDelay(pdMS_TO_TICKS(100))。
4. 在延时之后再执行printf语句,例如printf("Hello Worldn")。
5. 重新编译和烧录代码。
6. 在串口终端中查看输出结果。

通过在线程任务中添加适当的延时,可以解决printf导致线程阻塞的问题,从而保证线程的正常执行。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分