打印
[STM8]

IAR STM8

[复制链接]
895|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用IAR STM8编译程序的时候,编译器在生成hex文件的时候,会自动把程序所在目录一起当做数据放到flashl里面,大家遇到过这个问题吗?同一个程序在不同的文件夹编译,最后得出的程序量大小就不同。就是因为生成的hex里面包含了目录信息。   这个信息如何能屏蔽呢,哪位知道,指点迷津。
沙发
buzhichi|  楼主 | 2017-4-13 22:42 | 只看该作者
本帖最后由 buzhichi 于 2017-4-13 22:45 编辑

不同的目录下生成的hex文件都不同
  23 493 bytes of readonly  code memory  //这里不同文件下编译后相同
   3 240 bytes of readonly  data memory //这里不同文件下编译后不同
   1 999 bytes of readwrite data memory //这里不同文件下编译后相同
从截图可以看出,好像是一些调用了库函数的位置信息啥的,这个可以用编译器的设置屏蔽么最近调试一个程序,死活不行,最后发现以前最初的可以,把最初可以的拿到新项目下编译后有问题,百分百一模一样的程序。最后发现生成的hex文件大小不一样。

QQ图片20170413223549.png (33.19 KB )

QQ图片20170413223549.png

使用特权

评论回复
板凳
aozima| | 2017-4-13 23:48 | 只看该作者
你的程序中大量使用了 __FILE__
一般在debug或是assert里面

使用特权

评论回复
地板
buzhichi|  楼主 | 2017-4-14 08:39 | 只看该作者
我把编译器设置能不打勾的都取消了,还是有。
调用那个库函数内的文件,生成的hex文件里面就会有包含这个库文件所在的目录的数据存入flash。

使用特权

评论回复
5
xyz549040622| | 2017-4-15 09:54 | 只看该作者
这个还真是个问题,我没测试过。这大小能差多少呢?

使用特权

评论回复
6
buzhichi|  楼主 | 2017-4-15 11:44 | 只看该作者
xyz549040622 发表于 2017-4-15 09:54
这个还真是个问题,我没测试过。这大小能差多少呢?

不弄了,我调用了三个库文件,目录占用的字节数有几百,这个就看你把库放到了多少目录底下了。放的比较深,上面的截图是我拷贝到桌面编译的,实际的目录很深。
1.你每调用一个库文件,它就会生成这个库文件所在目录的信息,我调用了三个,结果hex里面就生成了三个目录信息。
2.当工程编译完后,更改目录,只要不重新编译库文件函数,生成的hex目录信息不变,如果是在新目录内选择所有都重新编译,目录信息就更新了。这个应该是库文件编译的时候生成的,移动目录,只改用户文件,最后的hex目录还是之前的。
3.不研究了,我现在的办法是在c盘直接编译一下库文件,然后在拷贝到项目内修改,这样生成的目录信息最简洁的。还有就是不使用库函数,或者把用到的库函数都拷贝到应用函数,就是不用库就没这个,懒人笨人的办法,不过也能解决。
4.我自身对建立一个新project不熟悉,对编译器也不熟悉。我现在用的是三四年前建立的,以后弄新的就直接复制一个老的修改,有高手能指点迷津的话,请不吝赐教啊。

使用特权

评论回复
评分
参与人数 1威望 +10 收起 理由
xyz549040622 + 10 很给力!
7
xyz549040622| | 2017-4-15 13:17 | 只看该作者
buzhichi 发表于 2017-4-15 11:44
不弄了,我调用了三个库文件,目录占用的字节数有几百,这个就看你把库放到了多少目录底下了。放的比较深 ...

果然差下了不少,这个确实是个问题。

使用特权

评论回复
8
yiy| | 2017-4-16 18:44 | 只看该作者
竟然还有这么回事,之前没人关注过吧

使用特权

评论回复
9
maxking| | 2017-4-18 08:39 | 只看该作者
在c盘直接编译一下库文件,然后在拷贝到项目内修改,这样生成的目录信息最简洁的。
请问这个步骤是怎样的?
是否把库文件存放在c盘目录下?

使用特权

评论回复
10
Xflyan| | 2017-4-18 12:55 | 只看该作者
STM8我都是直接操作寄存器的,不调用库文件,没遇到过
如果编译是包含调试信息的话,HEX文件可能会包含目录信息
可以试一下生成文件不包含调试信息,看看有没有变化
project -> options -> c/c++ compiler -> output

使用特权

评论回复
11
buzhichi|  楼主 | 2017-5-24 12:11 | 只看该作者
本帖最后由 buzhichi 于 2017-5-24 12:12 编辑
maxking 发表于 2017-4-18 08:39
在c盘直接编译一下库文件,然后在拷贝到项目内修改,这样生成的目录信息最简洁的。
请问这个步骤是怎样的? ...

我是把整个工程拷贝到C盘下的,每个工程都有库文件。
你的意思是你的库文件放在一个固定位置,然后所有工程都去调用那个库文件是吧,这样应该把库文件放在c盘就行了。 程序量够的话其实放哪里问题都不大。就是换个位置重新编译,发现生成的hex文件大小变了,心里就不踏实了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

65

帖子

1

粉丝