MBED RTOS将Float转换为字符串/字符阵列
MBED RTOS convert Float to String/Char array
我正在尝试将浮点数转换为字符串以通过串行连接发送。我已经使用了Sprintf,并且以前曾经工作过,但是现在我正在运行MBED RTO,该RTO悬挂在Sprintf系列时。
下面是代码在段循环中停止的行,即IM从端口中的MBED模拟收集数据,需要通过串行显示。
sprintf (buffer, ",%.2f,%.2f,%.2f,%.2f", sData1[0], sData1[1], sData1[2], sData1[3]);
我已经使用C_str((将字符串转换回RTOS下的浮点数。
是否有类似于C_STR((可以在不使用sprintf方法的情况下转换为字符串的东西?
printf
和 sprintf
函数的代码很大。嵌入式IDE通常提供这些功能的多个较小版本,这些版本不支持所有格式指定器,例如%f
。您可能必须选择与项目选项中的printf
的完整版本链接,以使%f
格式指定器的工作。
printf
和sprintf
功能还使用比平均功能更多的堆栈空间。增加程序的堆栈大小,以查看堆栈溢出是否阻止sprintf
返回。
每个线程都有自己的堆栈,默认情况下可能要小得多,堆栈分配给了一个螺纹过程。许多sprintf()
实现都使用大量堆栈 - 尤其是用于浮点数支持。
它可以简单地通过增加有关线程的堆栈来起作用,但是解决这个问题可能是很多资源。如果出现两个小数的位置就足够了,那么传递整数缩放x100的位置将更便宜:
int val_x100( float val )
{
int i = (int)(val * 1000) ;
if( i % 10 >= 5 )
{
i = (i / 10) + 1 ;
}
else if( i % 10 <= -5 )
{
i = (i / 10) - 1 ;
}
else
{
i /= 10 ;
}
return i ;
}
然后:
sprintf( buffer, ",%d,%d,%d,%d",
val_x100( sData1[0] ),
val_x100( sData1[1] ),
val_x100( sData1[2] ),
val_x100( sData1[3] ) ;
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 尝试将字符串/字符转换为整数会产生意外结果
- 为什么没有访问所有字符串字符?
- 将子字符串字符从字符串值转换为 int,然后将其分配给 int 变量
- 如何将字符串字符与结构数组进行比较?
- 将单个字符串/字符输入串行监视器
- 读取字符串字符时出错 - 对于数组中的字符串值
- C++ C 样式字符串/字符数组的大小 - 优化
- 读取字符串字符时出错
- C++ 使用 Strtok 读取字符串字符时出错
- 如何将 int 数组的 1 个元素转换为字符串/字符
- 在另一个字符串中逐个复制字符串字符
- 将字符串字符映射到矢量
- MBED RTOS将Float转换为字符串/字符阵列
- 如何使用字符串字符数组中的 ++ 运算符访问下一个字符串
- 如何比较C++中的单个字符串字符?
- 内部字符串/字符如何在 int 和 float 中存储
- 将十六进制转换为可打印的字符串/字符
- wcscpy_s后读取字符串字符时出错
- 检查字符串字符和长度