[51单片机] STC15W4K56S单片机sprintf 函数使用有问题

[复制链接]
204|10
 楼主 | 2018-12-6 18:18 | 显示全部楼层 |阅读模式
本帖最后由 ak5136728 于 2018-12-7 09:59 编辑

void main(void)                                                                                                
{        
        float xdata temperatureC= 26.7;
        float xdata humidityRH= 63.5;
        float xdata lightLx=        81.4;

        char xdata        tmpBuf1[100];
           char xdata        tmpBuf2[100];

        printf( "[INFO]SEND DATA IS %2.1f %2.1f %2.1f\r\n", temperatureC, humidityRH, lightLx );
        sprintf( tmpBuf1, "%2.1f%2.1f%2.1f", temperatureC, humidityRH, lightLx);
        printf( "[INFO]Send_Data = %s\r\n",tmpBuf1 );
        while(1)
        {
                          ;
         }
}

预期的效果是将  三个浮点数的数据 整理成字符串放到数组里面 但是 转换后的数据最后一个数有问题,是sprintf 在C51上不支持? 还望高手指点下。
[INFO]SEND DATA IS 27.2 63.5 81.4
[INFO]Send_Data = 27.263.533.5   这个是错误的转换结果





| 2018-12-6 22:05 | 显示全部楼层
sprintf( tmpBuf1, "%2.1f  %2.1f", temperatureC, humidityRH, lightLx);
三个参数,只有两个百分号啊。
| 2018-12-7 08:33 | 显示全部楼层
少了一个格式化字符或者多了一个参数
 楼主 | 2018-12-7 10:00 | 显示全部楼层
linqing171 发表于 2018-12-6 22:05
sprintf( tmpBuf1, "%2.1f  %2.1f", temperatureC, humidityRH, lightLx);
三个参数,只有两个百分号啊。 ...

改过来了,结果还是 有问题
 楼主 | 2018-12-7 10:00 | 显示全部楼层
ayb_ice 发表于 2018-12-7 08:33
少了一个格式化字符或者多了一个参数

改过来了,结果还是有问题,
| 2018-12-7 10:12 | 显示全部楼层
ak5136728 发表于 2018-12-7 10:00
改过来了,结果还是有问题,

这个与编译模式有关,
不同的模式支持的可变长度参数不同

换成large编译模式肯定可以
小模式需要修改配置,我先看下,好久没搞51了,有点忘记了
| 2018-12-7 10:22 | 显示全部楼层
ak5136728 发表于 2018-12-7 10:00
改过来了,结果还是有问题,

The total number of bytes that may be passed to this function is limited due to the memory restrictions imposed by the 8051. A maximum of 15 bytes may be passed in SMALL or COMPACT model. A maximum of 40 bytes may be passed in LARGE model.

这是原文
 楼主 | 2018-12-7 10:28 | 显示全部楼层
ayb_ice 发表于 2018-12-7 10:22
The total number of bytes that may be passed to this function is limited due to the memory restric ...

谢谢,问题找到了,就是这个问题,小学模式下只能传15个字节导致最后一位出错。谢谢
| 2018-12-7 10:33 | 显示全部楼层
ak5136728 发表于 2018-12-7 10:28
谢谢,问题找到了,就是这个问题,小学模式下只能传15个字节导致最后一位出错。谢谢 ...

但应该没有超过15个字节
3个浮点数才12个字节
但肯定是这里有问题,具体原因我也不知道了
| 2018-12-7 22:35 | 显示全部楼层
ayb_ice 发表于 2018-12-7 10:33
但应该没有超过15个字节
3个浮点数才12个字节
但肯定是这里有问题,具体原因我也不知道了 ...

除了三个浮点数,前面还有两个,char*和const char*,这两个算不算?
| 2018-12-10 08:36 | 显示全部楼层
linqing171 发表于 2018-12-7 22:35
除了三个浮点数,前面还有两个,char*和const char*,这两个算不算?

一个函数里的调用算,多个函数的不算
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /8 下一条

快速回复 返回顶部 返回列表