我正在 TI-TM4C129X ARM 板上工作,并尝试编写一个 LOG 机制。当我从任务中调用它时,它工作得很好,尽管我在使用计时器调用它时遇到了问题。据我了解,类似 printf 的函数可以工作与 Hwi ,这会导致错误。我的目标是与 sprintf()、vsprintf()、memcpy() 和 memset() 等操作一起格式化字符串。我怎么解决这个问题 ?是否有成功 sprintf() 操作的等效方法? 感谢您的回答, 最好的问候。
听起来 printf 是问题所在,而不是 sprintf。假设您的日志消息使用中断(UART),并且您的计时器是从中断调用的,那么您的选择就受到限制。
我会在计时器中设置一个标志,一旦超出计时器的上下文,您的任务代码就可以检查该标志。该标志可以指示要打印的多条消息之一,甚至包括时间戳(如果这有助于事后处理),因为打印的消息不会按顺序排列。
或者,使用 SWO 输出(如 Segger j-link),您应该能够只发送数据。但为了避免句子混乱,您需要在发送调试消息时停止中断,这显然会影响实时行为。
检查这个https://github.com/mpaland/printf,它是用于嵌入式系统的小型、快速、非依赖且完全加载的 printf/sprintf 实现。