4151|13

142

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

c语言float变量和字符串转换占内存大小问题 [复制链接]

 
本帖最后由 dinghao1 于 2018-7-26 10:47 编辑

1.不进行字符串转换,程序大小48B
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4.         
  5. float fengsu;
  6. long  guang;
  7. uchar str[10];
  8.         void display1()
  9.     {
  10.         guang=60000;
  11.                         //  sprintf(str,"%5ld",guang);
  12.                         }
  13.         void display2()
  14.     {
  15.                         fengsu=12.34;
  16.                 //        sprintf(str,"%5.2f",fengsu);
  17.                 }
  18. void main()
  19. {
  20.         while(1)
  21.         {        
  22.     display1();
  23.                 display2();
  24.         }
  25. }
复制代码



此帖出自51单片机论坛

最新回复

显示部分做成一个函数,调用就行,不用浮点也可以,规定好整数小数位数。   详情 回复 发表于 2018-7-27 12:13
点赞 关注(1)
 

回复
举报

142

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
2,加入字符串转换,程序大小2594B
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4.        
  5. float fengsu;
  6. long  guang;
  7. uchar str[10];
  8.         void display1()
  9.     {
  10.         guang=60000;
  11.                           sprintf(str,"%5ld",guang);
  12.                         }
  13.         void display2()
  14.     {
  15.                         fengsu=12.34;
  16.                         sprintf(str,"%5.2f",fengsu);
  17.                 }
  18. void main()
  19. {
  20.         while(1)
  21.         {       
  22.     display1();
  23.                 display2();
  24.         }
  25. }
复制代码



此帖出自51单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
3,float变量不进行转换,程序大小2559B
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4.        
  5. float fengsu;
  6. long  guang;
  7. uchar str[10];
  8.         void display1()
  9.     {
  10.         guang=60000;
  11.                           sprintf(str,"%5ld",guang);
  12.                         }
  13.         void display2()
  14.     {
  15.                         fengsu=12.34;
  16.                         //sprintf(str,"%5.2f",fengsu);
  17.                 }
  18. void main()
  19. {
  20.         while(1)
  21.         {       
  22.     display1();
  23.                 display2();
  24.         }
  25. }
复制代码



此帖出自51单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

4
 
4,删掉float变量,只有长整数转换,程序大小1110B
#include
#include
#define uchar unsigned char
       
float fengsu;
long  guang;
uchar str[10];
        void display1()
    {
        guang=60000;
                          sprintf(str,"%5ld",guang);
                        }
        void display2()
    {
                        //fengsu=12.34;
                        //sprintf(str,"%5.2f",fengsu);
                }
void main()
{
        while(1)
        {       
    display1();
                display2();
        }
}

此帖出自51单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

5
 
为什么代码大小变化这么大
此帖出自51单片机论坛
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

6
 
多了sprintf代码尺寸当然要大,这个函数本身本来就不小。浮点在没有硬件浮点的U上是通过软件来适配的,你看不见但背后由编译器帮你做了这事。
此帖出自51单片机论坛

点评

那有没有小一点的函数适合把变量数字转换成字符然后通过12864液晶屏显示呢,下面是一段显示程序english(2,4,5,str)是在第二行第四个字开始显示str的5个字符  详情 回复 发表于 2018-7-26 16:32
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

7
 
freebsder 发表于 2018-7-26 14:44
多了sprintf代码尺寸当然要大,这个函数本身本来就不小。浮点在没有硬件浮点的U上是通过软件来适配的,你看 ...

那有没有小一点的函数适合把变量数字转换成字符然后通过12864液晶屏显示呢,下面是一段显示程序english(2,4,5,str)是在第二行第四个字开始显示str的5个字符

  1. write(0,0x01);
  2. english(2,1,15,table3);//光照
  3. guang=6000;
  4. guang=guang*10;
  5. sprintf(str,"%5ld",guang);
  6. english(2,4,5,str);
复制代码






此帖出自51单片机论坛

点评

自己写一个。百度一下,应该有不少。  详情 回复 发表于 2018-7-26 18:17
 
 
 

回复

4008

帖子

0

TA的资源

版主

8
 
如果你没有使用浮点数就不会包括浮点运算库,所以很小这个是正常的。
此帖出自51单片机论坛

点评

那有没有小一点的函数适合把变量数字转换成字符然后通过12864液晶屏显示呢,我本来是一位一位显示的,要显示的实时数据比较多,程序太大了,51占不下了,加一个字符串转化函数,再显示字符串程序会小点吧  详情 回复 发表于 2018-7-26 18:03
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

9
 
dinghao1 发表于 2018-7-26 16:32
那有没有小一点的函数适合把变量数字转换成字符然后通过12864液晶屏显示呢,下面是一段显示程序english( ...

自己写一个。百度一下,应该有不少。
此帖出自51单片机论坛

点评

百度到有人说用sprintf函数,结果比原来有大了2k,  详情 回复 发表于 2018-7-26 18:05
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

10
 
dinghao1 发表于 2018-7-26 16:32
那有没有小一点的函数适合把变量数字转换成字符然后通过12864液晶屏显示呢,下面是一段显示程序english( ...

自己写一个。百度一下,应该有不少。
此帖出自51单片机论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

11
 
huo_hu 发表于 2018-7-26 17:15
如果你没有使用浮点数就不会包括浮点运算库,所以很小这个是正常的。

那有没有小一点的函数适合把变量数字转换成字符然后通过12864液晶屏显示呢,我本来是一位一位显示的,要显示的实时数据比较多,程序太大了,51占不下了,加一个字符串转化函数,再显示字符串程序会小点吧
  1. write(0,0x01);
  2. english(2,1,15,table3);//光照
  3. guang=1234;
  4. write(0,0x93);
  5. write(1,0x30+guang/10000);
  6. write(1,0x30+guang/1000%10);
  7. write(0,0x94);
  8. write(1,0x30+guang/100%10);
  9. write(1,0x30+guang/10%10);
  10. write(0,0x95);
  11. write(1,0x30+guang%10);
复制代码

此帖出自51单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

12
 
freebsder 发表于 2018-7-26 17:57
自己写一个。百度一下,应该有不少。

百度到有人说用sprintf函数,结果比原来有大了2k,
此帖出自51单片机论坛
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

13
 
dinghao1 发表于 2018-7-26 16:32
那有没有小一点的函数适合把变量数字转换成字符然后通过12864液晶屏显示呢,下面是一段显示程序english( ...

自己写一个。百度一下,应该有不少。
此帖出自51单片机论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

4008

帖子

0

TA的资源

版主

14
 
显示部分做成一个函数,调用就行,不用浮点也可以,规定好整数小数位数。
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表