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

STM32 编译静态库问题

[复制链接]
fengx 提问时间:2024-1-17 17:54 / 未解决

编译器:GCC

MCU:STM32H563

问题:将MCU驱动和应用进行分离,生成一个drv.a,然后主工程引用drv.a,这将会导致程序异常进入

HardFault。

解决办法:将中断相关的函数移出drv.a,放入主工程中。

虽然解决了,但是还是不清楚原因,而且将中断移出drv.a 失去原先设计的驱动隔离意义。

收藏 评论4 发布时间:2024-1-17 17:54

举报

4个回答
watershade 回答时间:2024-1-18 11:10:17

还真不知道,基本上没编译过静态库。关注一下这个问题

butterflyspring 回答时间:2024-1-18 17:50:05
是不是有可能中断发生时,是芯片硬件的跳转,并非是执行了函数的调用引起的?
没有调用,生成的应用代码里就没有中断部分的内容呢~~~
fengx 回答时间:2024-1-19 18:14:56

butterflyspring 发表于 2024-1-18 17:50
是不是有可能中断发生时,是芯片硬件的跳转,并非是执行了函数的调用引起的?
没有调用,生成的应用代码里 ...

经过多次尝试,使用很简单的代码,使用TIM实现的systemtick。这个调用是在HAL_init里面;其中TIM3_IRQHandler,HAL_InitTick在drv.a;根据正常逻辑编译成.a文件时,这些函数都会编译进去,在生成BIN文件时链接进来。

从测试来看,似乎最后编译成bin文件的时候是没有链接进来。其中解析库文件是可以查看到对应的函数符号的。

但是,将中断实现移动到最外层工程,一切都正常了,并没有改动代码

butterflyspring 回答时间:2024-1-22 15:21:03
fengx 发表于 2024-1-19 18:14
[md]经过多次尝试,使用很简单的代码,使用TIM实现的systemtick。这个调用是在HAL_init里面;其中`TIM3_I ...

很有可能就是之前推测的那样,中断是跳转进去的,并不是调用关系。
所以最后没有链接上。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版