【发布时间】:2012-11-29 11:35:43
【问题描述】:
我想要一个函数 debug_print(fmt, args),它接受格式字符串、参数并构建一个 char 缓冲区,然后我可以将其发送到 UART。基本上我可以将所有这些传递给scanf,但问题是格式化浮点数需要特别小心。
dtostrf( float_num, 3, 4, temp_buf );
所以我需要将格式字符串中的%f 替换为%s,并将float arg 更改为temp_buf。由于嵌入式环境功能有限,所有这些都必须以最少的步骤完成。
如果有人可以帮助构建这样的功能,将不胜感激。
类似这样的:
void debug_print(char *fmt, ... )
{
va_list args;
va_start(args,fmt);
// use uart function for output
va_end(args);
}
但是如何有效地遍历占位符以及如何将float arg 替换为char*?
【问题讨论】:
-
你为什么不简单地使用 vsprintf() 来为你做这项工作?
-
如果您的资源有限,变量参数列表和 stdio.h 都是坏主意。事实上,在任何形式的确定性系统中,va_lists 都是一个坏主意:所有嵌入式系统当然都属于该类别。
标签: c embedded printf scanf avr