ent*_*ree 24 c embedded microcontroller cross-compiling
我已经为模拟器构建了一些代码,现在我正在尝试使用TI的免费工具链来交叉编译到64kb的nvram目标.编译器声称我的代码大约是ROM以外的34kb:
(...) msp430-elf/bin/ld: region `ROM' overflowed by 33716 bytes
Run Code Online (Sandbox Code Playgroud)
另一条线说它不适合.text场地进入其分配的空间.我无法相信我的总数增加了34kb,更不用说使二进制文件溢出这个数量了.
-Os -s标志.math.h函数(实际上它是唯一进行浮点运算的部分),调用strtod和调用sprintf是否有任何工具或方法来分解导致二进制文件如此庞大的原因?
Mor*_*sen 20
GNU binutils有一些工具可以帮助您确定每个符号或每个目标文件的大小.
size例如,请查看:https://manpages.debian.org/jessie/binutils/size.1.en.html
nm也值得一试,因为它可以显示目标代码中每个符号的大小:https://manpages.debian.org/jessie/binutils/nm.1.en.html
仔细检查输出,size并nm给你直觉,占用大量空间和不占用空间.
知道这一点printf,sprintf许多更复杂的库函数通常会占用相当多的KB额外ROM.
与使用硬浮点相比,使用软浮点的浮点支持也会使代码膨胀,即使用软件仿真与硬件指令来处理浮点.
有时编译器会添加惊人数量的膨胀:)
我曾经有一个小型MSP430控制器存在内存问题.如果可能使用负值或使用浮点,TI工具链会将大型库链接到二进制文件中.就我而言,它占总内存使用量的10%-20%.
TI免费的Code composer Studio确实提供了非常强大的内存可视化(View - > Memory Allocation)
帮助我很多的是改变链接器设置和其他优化选项中的初始化模型.我目前没有使用MSP430控制器,所以我不能再告诉你细节了.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           2325 次  |  
        
|   最近记录:  |