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.

[参考译文] RTOS/CC2640:使用浮点格式的 sprintf 问题

Guru**** 2608265 points
Other Parts Discussed in Thread: CC2640

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/584719/rtos-cc2640-sprintf-issue-using-float-format

器件型号:CC2640

工具/软件:TI-RTOS

我在 CC2640上使用 TI-SDK ble_sdk_2_02_01_18版本。

当我尝试将浮点值转换为字符串以进行打印时、系统将崩溃。

我创建了测试代码、如下所示、函数永远不会返回。

但是、如果我改用"%6d"、函数将返回正常状态。

我已经检查了这项建议  

  • #include 就在那里
  • 将堆栈大小从700增加到1000

void test1 (浮点值)

char buf[50];

sprintf (buf、"%.4F"、值);
// sprintf (buf、"%f"、value);
// sprintf (buf、"%6d"、(int) value);

System_printf (buf);
System_printf ("\n"); System_flush();

感谢您的建议和建议

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    sprintf 使用大量堆栈内存。 尝试在调用 sprintf 的任务中增大堆栈的大小。
    您不使用 System_sprintf()的原因是什么? 它专为使用较少的堆栈内存而设计。

    Alan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否知道我可能需要增加多少堆栈空间?  ~500 ~1000字节?

    我正在使用 sprintf 函数将浮点值转换为 ASCII 文本并发送到其他设备。

    因此、不仅仅是用于调试显示。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我过去使用 sprintf()的经验表明,它使用了大约500字节的栈。

    您可以使用等效的"System_sprintf()"函数,该函数应显著减轻堆栈负担。

    Alan