你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

更改ld文件中的Flash偏移和中断向量表的宏VECT_TAB_OFFSET后,编译出来的bin文件与之前不同

[复制链接]
仲裁者 提问时间:2023-4-24 20:00 / 已解决

我用的是stm32cubeide,芯片为STM32G491,修改了ld文件的Flash偏移和中断向量表的宏VECT_TAB_OFFSET,对比修改前后的bin文件,发现有部分地方不同,请问这个是正常的吗?

对比.png

收藏 评论9 发布时间:2023-4-24 20:00

举报

9个回答
废鱼 最优答案 回答时间:2023-4-25 14:23:10

仲裁者 发表于 2023-4-25 14:18
你好,我这个项目是双芯片的,需要通过上面的MCU去升级下面的MCU,因此需要将下板MCU的app程序放在上 ...

[md]这样只能将文件都合成为BIN文件的格式,将下板的程序放到固定的地址,这个地址会被别的代码占用。通过bin文件烧写到上板,上板通过读取指定地址开始给下板升级。

用bin文件就不用考虑下板的程序地址了。

废鱼 回答时间:2023-4-25 08:40:10

这里存放的是中断函数地址,可以通过map文件看一下默认的函数地址和.BIN文件中的是否一致。因为地址的变更,会导致中断函数地址的变更。我认为这个是正常的。

xmshao 回答时间:2023-4-25 09:27:51
这跟编译器的动作有关系,生成的2个文件有些差异可以理解。


只要你修改的参数都生效了、功能也正常就可以。
仲裁者 回答时间:2023-4-25 09:47:29

我现在有上下两块板子,上板存放了自己的boot、app程序以及下板的app程序。我想把这三个程序合成一个hex,将来产线烧程序就只需烧录一次(否则至少要烧两次)。

上板的boot和app合成一个hex很容易,但下板app的起始地址和其在上板存放位置是不同的(例如实际下面板子的app起始地址是0x08005000,而在上板存放地址为0x0804E000),因此不能直接将下板app的hex与上面进行合成。

我现在想到的办法就是,将下板程序的ld文件中Flash的起始偏移量以及中断向量偏移宏改为0x0804E000,然后跟上板两个程序进行hex合成,但实际烧录到机器中后,程序运行异常。

请问大家,有没有其他办法实现我的功能?

仲裁者 回答时间:2023-4-25 09:48:21

xmshao 发表于 2023-4-25 09:27
这跟编译器的动作有关系,生成的2个文件有些差异可以理解。</p>
<p>

你好,我新增了附加说明,麻烦帮忙看看,十分感谢

仲裁者 回答时间:2023-4-25 09:48:45

废鱼 发表于 2023-4-25 08:40
这里存放的是中断函数地址,可以通过map文件看一下默认的函数地址和.BIN文件中的是否一致。因为地址的 ...

[md]你好,我新增了附加说明,麻烦帮忙看看,十分感谢

废鱼 回答时间:2023-4-25 13:18:12

仲裁者 发表于 2023-4-25 09:47
我现在有上下两块板子,上板存放了自己的boot、app程序以及下板的app程序。我想把这三个程序合成一个he ...

[md]我不太理解楼主的意思,上板和下板是两个独立的mcu是吗?如果是独立的,应该是两个独立的程序,为什么还要写到一个程序里面呢?

仲裁者 回答时间:2023-4-25 14:18:46

废鱼 发表于 2023-4-25 13:18
我不太理解楼主的意思,上板和下板是两个独立的mcu是吗?如果是独立的,应该是两个独立的程序,为什 ...

[md]你好,我这个项目是双芯片的,需要通过上面的MCU去升级下面的MCU,因此需要将下板MCU的app程序放在上板MCU里面

xiyu_dang 回答时间:2023-4-28 10:41:05

生成两个文件的不同是中断向量表的不同,你想要将多个bin文件通过J-Falsh将文件=放在合适的地址当中。若是使用keil编译,两个bin文件的不同应该是在编译的时候选择的on-chip的地址不同导致,所以你可以将on-chip地址修改为对应需要的地址

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版