2019-10-15 20:18发布
jinggx 发表于 2016-12-27 22:18 我答非所问,那请你来回答! 能明白hex文件大小与烧录到芯片里的程序大小无关,就能明白他所提问题的 ...
777ai77 发表于 2016-12-28 10:04 我比较好奇的还是 hex文件里多了什么东西, 数据量我说错了, 数据量是 45000B 。 反正不管加不加cons ...
777ai77 发表于 2016-12-28 10:56 我上述的程序里头,确实调用到这个全局变量,并没有优化掉。
最多设置5个标签!
char array2[4]={1,2,3,4};// ro+rw, copy
const char array3[4]={1,2,3,4};// ro [/mw_shl_code]
我比较好奇的还是 hex文件里多了什么东西, 数据量我说错了, 数据量是 45000B 。
反正不管加不加const , 这堆数据肯定都是先存在ROM中,然后初始化的时候 无const的会将这些数据copy到RAM中。
那HEX文件中描述bin文件的差别在哪里。
自己仔细对比MAP文件呀。
一般来讲,加不加const只会影响RAM的占用,生成的BIN应该是差不多的。
但有一种可能就是:
MDK的链接器应该有压缩功能的,所以当没有const时,虽然占用RAM大,但RO中的init却可以压缩,所以出来的镜像比较小。
而有const时,就不能压缩了,所以镜像会大。
hex里面包含的信息和bin其实是一样的,只是换了一种存储方式而已。我是写过一个hex和bin互转的小脚本才明白的。
至于大小为什么不一样的原因是基本上是keil的优化
被定义为const的变量是一定会写入到生成的代码中的,
而只定义未被调用的全局变量keil会优化掉,不是压缩,而是这个变量被删除了,如果想让代码大小一致,可以程序里添加个print(a),就可以看到一样了
你把生成的.map文件最后的生成的内部信息贴出来,正常这是不可能的,这不是偏差了图片存储的信息,而是偏差了很多。还有bin->hex比率是2.8125,就算换算成bin,你这也差的太多,应该是有错误
一周热门 更多>