工具/软件:
尊敬的专家:
我正在使用 sprintf 函数进行 UART 调试。 我发现当它运行很长时间、可能是1小时、系统会异常。
堆栈大小为 0x380。 UART 通信频率为5Hz、在一次性通信中总共使用17个冲刺函数。
我发现一份文档说、sprintf 需要大型 C2000堆栈。 正确吗? 我们如何使用具有有限堆栈的 sprintf? 或者、您是否有其他建议将浮点数据转换为字符以将我们的 UART GUI 发送出去?
谢谢!
此致、
Jim
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
尊敬的专家:
我正在使用 sprintf 函数进行 UART 调试。 我发现当它运行很长时间、可能是1小时、系统会异常。
堆栈大小为 0x380。 UART 通信频率为5Hz、在一次性通信中总共使用17个冲刺函数。
我发现一份文档说、sprintf 需要大型 C2000堆栈。 正确吗? 我们如何使用具有有限堆栈的 sprintf? 或者、您是否有其他建议将浮点数据转换为字符以将我们的 UART GUI 发送出去?
谢谢!
此致、
Jim
您好:
您能否先参阅此页面、看看它是否有助于您的查询? 谢谢! https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_tips_for_using_printf.html
此致、
Allison
尊敬的 Allison:
感谢您的答复!
我看到了这个文档、上面写着"在编译器的版本上指定、调用其中一个*printf 函数需要超过400字节的栈。 确保堆栈位于有效的读取/写入数据存储器中。'。
这是否意味着,如果我需要调用17个 sprintf 函数,我需要为它准备超过6.6kB 的堆栈? 它太大、而且没有足够的堆栈。
或者、C2000库是否有一些函数可以 将浮点数据转换为字符?
此致、
Jim
最新版本的 C2000编译器支持此选项 -- printf_support 。 请在 C28x 编译器手册中搜索 该选项。 如果您可以使用该设置 -- printf_support=minimal 、则需要的堆栈更少。
请告知我此建议是否能解决问题。
谢谢。此致、
-乔治
如果我需要调用17个 sprintf 函数、我需要为它准备超过6.6kB 的栈吗?
编号 当这17个调用之一时、所需的栈数量为400 +栈上已有的字节数 冲刺 f 呼叫开始。 如果可以使用编译器选项 -- printf_support=minimal 、将400更改为更低的数字。
谢谢。此致、
-乔治
当这17个调用之一时、所需的栈数量为400 +栈上已有的字节数 冲刺 f 呼叫开始。
您好、George、
您的意思是、我只需要为17个 sprint 调用增加400个堆栈空间吗?
将堆栈大小从0x180更改为0x310。
此致、
Jim
很遗憾、在线文章错误。 一个呼叫 冲刺 f 需要大约1200 (0x480)字节的栈。 这是对 栈上当前字节数的补充 冲刺 f 初始化过程。
就像一个实验,让这个简单的程序工作...
#include <stdio.h>
int main()
{
char buf[32];
sprintf(buf, "%f", 1.0);
}
在中查看结果 buf 工程。 无论您从使其正常工作中了解到什么、都可以将其应用到您的大型项目中。
谢谢。此致、
-乔治