单片机/MCU论坛
直播中

发生的方式

8年用户 1187经验值
擅长:处理器/DSP
私信 关注

MCU-TC397无法使用UART打印变量数据?

我在 UART 工作中遇到了一个问题。
MCU-TC397
所以我正在使用 TERA TERM 打印日志。 我使用的是标准代码,如下所示:
void print_f(常量字符 *p_frm,...)
{
va_list p_arg;
va_start (p_arg、p_frm);vsprintf(uboutputBu
f、p_frm、p_arg);va_end (p_arg);buf_to_screen (uboutputBuf);}

我能够打印字符和常量值,如下所示,
print_f ("nn RESULT_STARTn);"
但是当我使用诸如此类的东西时
test_print++;
print_f ("nn RESULT_START 值 = %dn,test_print);"
然后每次在 Tera Term 中我得到 RESULT_START 值 = 1 时,test_print 值都不会改变!!
我在这里遗漏了什么吗。

有人能帮忙了解根本原因吗?



回帖(1)

fanB

2024-1-24 16:11:40
要在UART上打印变量数据,您需要将变量的值格式化为字符串,然后将其传递给UART输出函数。在您的代码中,您可以使用`sprintf`函数将变量的值转换为字符串,并将结果存储在一个缓冲区中。然后,您可以将缓冲区的内容传递给UART输出函数。

例如,您可以修改您的代码如下:

```c
void print_f(const char *p_frm, ...)
{
    va_list p_arg;
    va_start(p_arg, p_frm);
    char uboutputBuf[50];  // 适当选择缓冲区大小
    vsprintf(uboutputBuf, p_frm, p_arg);
    va_end(p_arg);
    buf_to_screen(uboutputBuf);
}
```

然后,您可以使用类似于以下方式打印变量值:

```
int test_print = 0;
print_f("RESULT_START 值 = %d,test_print", test_print);
```

这将将`test_print`的值转换为字符串,并将其与"RESULT_START 值 ="和其他字符串一起打印。

请确保缓冲区`uboutputBuf`足够大以容纳输出的字符串。根据您的实际需求调整缓冲区的大小。
举报

更多回帖

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