【发布时间】:2017-04-18 20:45:47
【问题描述】:
我正在尝试将浮点数转换为字符串以通过串行连接发送。 我使用过 sprintf 并且以前工作过,但我现在正在运行 mbed RTOS,当到达 sprintf 行时它会挂起。
下面是代码在 while 循环中停止的行,我从端口中的 mbed 模拟收集数据并需要通过串行显示它。
sprintf (buffer, ",%.2f,%.2f,%.2f,%.2f", sData1[0], sData1[1], sData1[2], sData1[3]);
我已经使用 c_str() 在 RTOS 下成功地将字符串转换回浮点数。
有没有类似 c_str() 的东西可以不使用 sprintf 方法从浮点数转换成字符串?
【问题讨论】:
-
我们不知道
buffer是否大到足以容纳生成的字符串。请发布buffer声明的内容。 -
@PaulMcKenzie 抱歉,错过了。它被声明为“char * buffer;”
-
是的,但是缓冲区的大小在哪里?您不能简单地声明一个未初始化的指针并将其传递给
sprintf。如果你这样做了,那么事情不起作用也就不足为奇了。也许一直以来的问题是,您摆脱了未定义的行为并相信一切正常。 -
@PaulMcKenzie 我的错误是我重新定义了大小为 250 的缓冲区并且它工作得很好。不知道我是怎么错过的,谢谢
-
在没有 FPU 的处理器上的浮点运算速度很慢并且通常是不确定的,如果存在 FPU,RTOS 必须能够在上下文切换中支持 FPU 寄存器- 这会减慢上下文切换并需要额外的堆栈空间。通常最好避免 - 但这是一个不同的问题。
标签: c++ string floating-point rtos mbed