社区导航

 

搜索
查看: 1710|回复: 12

[求助] c语言float变量和字符串转换占内存大小问题

[复制链接]

161

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-7-26 10:40 | 显示全部楼层 |阅读模式
本帖最后由 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单片机论坛

回复

使用道具 举报

161

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-26 10:41 | 显示全部楼层
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. }
复制代码




回复

使用道具 举报

161

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-26 10:43 | 显示全部楼层
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. }
复制代码




回复

使用道具 举报

161

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-26 10:45 | 显示全部楼层
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();
        }
}


回复

使用道具 举报

161

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-26 10:46 | 显示全部楼层
为什么代码大小变化这么大

回复

使用道具 举报

2001

TA的帖子

1

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

发表于 2018-7-26 14:44 | 显示全部楼层
多了sprintf代码尺寸当然要大,这个函数本身本来就不小。浮点在没有硬件浮点的U上是通过软件来适配的,你看不见但背后由编译器帮你做了这事。

点评

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

回复

使用道具 举报

161

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-26 16:32 | 显示全部楼层
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);
复制代码






点评

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

回复

使用道具 举报

3602

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

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

点评

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

回复

使用道具 举报

2001

TA的帖子

1

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

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

自己写一个。百度一下,应该有不少。

点评

百度到有人说用sprintf函数,结果比原来有大了2k,  详情 回复 发表于 2018-7-26 18:05
人已离开,无事别找,找也找不到。

回复

使用道具 举报

2001

TA的帖子

1

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

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

自己写一个。百度一下,应该有不少。
人已离开,无事别找,找也找不到。

回复

使用道具 举报

161

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-26 18:03 | 显示全部楼层
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);
复制代码


回复

使用道具 举报

161

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2018-7-26 18:05 | 显示全部楼层
freebsder 发表于 2018-7-26 17:57
自己写一个。百度一下,应该有不少。

百度到有人说用sprintf函数,结果比原来有大了2k,

回复

使用道具 举报

2001

TA的帖子

1

TA的资源

五彩晶圆(初级)

Rank: 7Rank: 7Rank: 7

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

自己写一个。百度一下,应该有不少。
人已离开,无事别找,找也找不到。

回复

使用道具 举报

3602

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-7-27 12:13 | 显示全部楼层
显示部分做成一个函数,调用就行,不用浮点也可以,规定好整数小数位数。

回复

使用道具 举报

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

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-4 09:50 , Processed in 0.442926 second(s), 35 queries , Gzip On, MemCache On.

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