IARSTM8 "unable to allocate space for sections "问题解决与改良

遇见该问题后,在论坛上逛了许久,发现大多数都是下面前两种解决方法,

右键单击项目,-options->General Options里的Target选项里,Data如果是small,你选成medium;

②Option--C/C++ compile--Optimizations中的Level选为High;

③改代码,以上两种方法都尝试后,问题依旧存在,因此,我将程序中的浮点型变量都缩小为 unsigned char 型,编译通过。

以下是整理的浮点型在MCU储存方式:

浮点数包括float和double两种类型,float占32位,double占64位。其二进制存储格式遵循IEEE754标准。以float为例:

      符号位:正数为0,负数为1

      以float型数据123.456为例,分析其二进制存储格式:

      首先将十进制数123.456转换为二进制数为:1111011.01110100101111001 

      (其中0.456如何转换为二进制?不断乘2取整,顺序排列

       如:0.734375转二进制,结果是101111。

         0.734375 x 2 = 1.46875 
          0.46875 x 2 =0.9375 
          0.9375 x 2 = 1.875 
          0.875 x 2 = 1.75 
          0.75 x 2 = 1.5 
          0.5 x 2 = 1.0)

 

1111011.01110100101111001即1.11101101110100101111001乘以2的6次方

首先这是一个正数,则符号位为0,阶码为6,不过要转换成移码。(如何求6的移码?这里我也不太深究,我见大家都是直接6+127=133,换为2进制为10000101)

(移码与补码的关系:[X]移与[X]补的关系是符号位互为相反数(仅符号位不同))

尾数则为1. 11101101110100101111001的小数部分,即

11101101110100101111001

综上:123.456的二进制存储格式为:01000010111101101110100101111001


因此,浮点型在Flash中占得空间比较大,可以改良下。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值