kinetis 8K flash 只写了一点代码就报 FLAH溢出,求解!(已解决)
本帖最后由 FSL_TICS_Robin 于 2014-11-27 11:48 编辑本人在用KL04Z8 做项目,8K的flash应该够用了,可是没写几句就报错了,好像是flash不够了
很不解,于是做了个实验用CodeWarrior 建了一个空工程,
编译后,生成HEX文件,发现空工程就就有15K的HEX,我知道HEX要比Bin大一些,但是这15K也不正常啊,望高手指教!
只看hex文件的大小没意义,打开hex文件看下起始地址。 你可以看下MAP文件,或者看下配置SRAM和FLASH的部署,而且最好把优化打开,这样没有使用的部分不会生成代码。。。。 qufuta 发表于 2014-10-18 11:40
你可以看下MAP文件,或者看下配置SRAM和FLASH的部署,而且最好把优化打开,这样没有使用的部分不会生成代码 ...
但看MAP文件 也没找到现在已经用了多少K 的FLASH了,,您帮我看一下 把Hex用工具打开,看尾地址有多大 本帖最后由 ideality0214 于 2014-10-19 11:00 编辑
avr9299 发表于 2014-10-18 13:50
把Hex用工具打开,看尾地址有多大
0x4110, 也有将近16K了
直接看这个空工程FLASH占用情况,也有5~6K的样子,一共8k的FALSH,还没开始一个空工程就有5~6K,这可怎么用啊
你这是HEX文件的大小,包含有其他的地址信息,内面的二进制文件也就5K多的样子,看下载时文件格式选错了没 avr9299 发表于 2014-10-19 15:24
你这是HEX文件的大小,包含有其他的地址信息,内面的二进制文件也就5K多的样子,看下载时文件格式选错了没 ...
真正的FLASH占用5K 也是很大了,这个MCU一共才8K,只是一个空工程就占了5K,伤不起啊 要想伤得起,用汇编{:smile:} 坐等FSL技术支持解决,难道是编译器bug? 找个hex转bin文件的工具,转成bin就知道占用多大空间了 看一下你的连接文件,代码段的空间是不是设的太小了,有没有预留boot区或是其他的 是不是codewarrior本身系统庞大,生成的启动代码也很庞大,之前用64K的Flash kinetis 不在乎这点牺牲,可是做个MCU就8K flash .text.exit 0x00000c6c 0x38 D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(exit.o)
0x00000c6c exit
.text.memset 0x00000ca4 0xc D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(memset.o)
0x00000ca4 memset
.text.long2str.isra.0
0x00000cb0 0x19c D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(printformat_.o)
.text.__pformatter_
0x00000e4c 0x428 D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(printformat_.o)
0x00000e4c __pformatter_
.text.__sformatter
0x00001274 0x698 D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(scanformat_.o)
0x00001274 __sformatter
.text.isalpha0x0000190c 0x20 D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(ctype_aeabi.o)
0x0000190c isalpha
.text.isspace0x0000192c 0x20 D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(ctype_aeabi.o)
0x0000192c isspace
.text.toupper0x0000194c 0xe D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(ctype_aeabi.o)
0x0000194c toupper
.text.__strtoul
0x0000195a 0x1ce D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(__strtoul.o)
0x0000195a __strtoul
.text.__fill_mem
0x00001b28 0x7e D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(__filll_mem.o)
0x00001b28 __fill_mem
.text.memchr 0x00001ba6 0x1a D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(memchr.o)
0x00001ba6 memchr
.text.memcpy 0x00001bc0 0x12 D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(memcpy.o)
0x00001bc0 memcpy
.text.strchr 0x00001bd2 0x1e D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(strchr.o)
0x00001bd2 strchr
.text.strlen 0x00001bf0 0x10 D:/work/software_work/CW MCU v10.6/MCU/ARM_GCC_Support/ewl/lib/armv6-m\libc.a(strlen.o)
看你的map文件,你貌似把c语言库都包含进来了,怎么可能不占flash? 不用的东西就不要包含进来,而且注意选择优化! 一般都是COPY以前的工程 不用的函数尽量屏蔽掉优化后编译
楼主的问题解决没有?我们想知道是什么问题啊,跟大家说说?看你的map文件好像字符串那些库什么的包含不少东西啊?具体啥情况呢? jiang887786 发表于 2014-10-22 17:09
楼主的问题解决没有?我们想知道是什么问题啊,跟大家说说?看你的map文件好像字符串那些库什么的包含不少 ...
没有解决,应该是codewarrior 的加入了一些没用的库,代码有很多冗余,我对codewarrior 不算了解,所以我 一般新建工程时就只是一路 next,新建的空工程,编译后就是5K的 flash,
注:我没用PE那个更高级的工具 jiang887786 发表于 2014-10-22 17:09
楼主的问题解决没有?我们想知道是什么问题啊,跟大家说说?看你的map文件好像字符串那些库什么的包含不少 ...
我做了个详细的描述,本想更新楼主位的,但是好像编辑不了,新开了个贴 http://www.amobbs.com/thread-5601066-1-1.html
希望大家能关注一下这个问题
页:
[1]