printf 从各种任务中进行控制台

问题描述

我在 MCU 上使用 VxWorks,我的应用程序有各种任务,可以在不同的时间打印消息。

例如,考虑到我有 3 个不同的任务: 任务 1 打印“你好” Task2 打印“你好吗” Task3 打印“正在做”

当我打开 Tera Term 时,会出现乱七八糟的打印内容,有时可能是乱七八糟的消息,例如“你好,你在做什么”之类的。 我想知道 - 是否有人实现了一个具有许多并行运行的任务并打印出各种数据以进行调试的应用程序。是否需要为打印实现队列?或者可能使用互斥锁或其他东西来同步打印出的大量数据?

谢谢。

解决方法

互斥锁肯定会起作用。但这不是实时的方式,因为它可能导致优先级倒置。此外,在慢速串行通道上打印字符所花费的时间非常长,它可能会扰乱线程的时序。

VxWorks 提供了一个日志实用程序:logLib

基本上,它有自己的低优先级任务。您将要打印的消息传递给所述任务,并在找到 CPU 时间时打印它们。打印的消息不会中断,因为它们都是在同一个任务中打印的。

旁注是饥饿。如果其他线程一直占用CPU,logTask将无法打印消息,因为它可以获取CPU,因为它的优先级低。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...