3235|0

208

帖子

3

TA的资源

纯净的硅(初级)

楼主
 

关于CCS不能用MACH.H函数的一点问题 [复制链接]

开始遇到这个问题一直以为是CCS由于是TI拿eclipse改装的编译器,做得不专业,事实证明是我不专业了。。。
讲叙一下我解决这个问题的步骤:

我在使用430G2231的时候发现使用printf函数时会大大增加编译后生成的代码量,注意,我的printf是将putchar改成5110液晶的显示一个字符的函数后的printf,而不是在调试时从console里输出信息的printf。
猜测原因应该是使用printf的话就会调用sprintf函数,必然需要大量代码实现,因此导致代码段不够用(G2231只有2k flash)。

然后我使用keil编译了如下程序
#include
#include
void main()
{
int a;
a=sin(2.1);
}
将sin函数注释掉和不注释掉的区别如下:
   注释掉:Program Size: data=9.0 xdata=0 code=16
不注释掉:Program Size: data=15.1 xdata=0 code=1384
可见sin函数在keil里使用了6.1个ram和1272个rom

再回到IAR编译器里来:
我将一段程序编译,其中用到printf函数的编译结果如下:
6 116 bytes of CODE  memory
    82 bytes of DATA  memory (+ 18 absolute )
   585 bytes of CONST memory
用到sin函数的编译结果如下:
2 946 bytes of CODE  memory
    84 bytes of DATA  memory (+ 18 absolute )
   552 bytes of CONST memory
什么都没用的:
498 bytes of CODE  memory
  82 bytes of DATA  memory (+ 18 absolute )
552 bytes of CONST memory
可见IAR使用这些标准库里的函数跟CCS消耗的ram和rom量是不一样的

在之前的使用中,2553在IAR中是可以使用sin函数的,而在CCS中则不可以,下面这段测试程序
#include "msp430g2553.h"
#include "math.h"
void main(void) {
        volatile int a;//必须用volatile,不然看不到效果的,会被优化掉
        a=sin(1.2);
}
报错如下:
"../lnk_msp430g2553.cmd", line 56: error #10099-D: program will not fit into
   available memory.  run placement with alignment fails for section ".bss"
   size 0x304 .  Available memory ranges:
   RAM          size: 0x200        unused: 0x90         max hole: 0x90      
error #10010: errors encountered during linking; "justlookwhathappen.out" not
   built

.bss段是用来放置未初始化变量的,查看lnk_msp430g2553.cmd", line 56: 其分配在ram区域。

初步得出结论是因为sin函数需要大量ram,是ram不够大导致,既然如此,我就换个大单片机来试试。
继续论证:
将型号换成430f5638
编译一个没有sin函数的程序,打开工程目录Debug目录下的.map文件,里面是编译后的所有地址分配信息,注意查看生成时间,是不是你刚刚生成的。
Linked Sat Dec 08 20:32:57 2012
结果如下:
------------------------------length
.bss       0    00002400    00000010     UNINITIALIZED
然后加入sin函数:
.bss       0    00002400    00000390     UNINITIALIZED
可见猜测正确。

因此可得出结论,CCS里的sin函数使用了大量的未初始化变量(约912Byte),g系列的单片机没一个受得了。。。
而IAR则消耗较多的ram,一般的单片机flash都挺大的,所以,还是IAR好用。。
屌丝们,赶快丢掉你的CCS吧。。。
 
点赞 关注
个人签名人要学会逆流而上,适者生存

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表