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

来源:互联网 发布:点对点视频软件 编辑:程序博客网 时间:2024/05/29 16:07

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

右键单击项目,-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 0