MDK GCC调试
keil gcc 工程生成
1、通过stm32cubemx生成keil工程
openocd调试
https://blog.csdn.net/chunyexixiaoyu/article/details/120448515
https://blog.csdn.net/weixin_36432129/article/details/123354537
https://blog.csdn.net/weixin_45467056/article/details/119886361
https://icspec.com/news/article-details/2095195
https://zhuanlan.zhihu.com/p/41517198
2、生成地址 与 代码的对应关系
arm-none-eabi-objdump -h -S test1.elf > "test1.list"
3、gcc 在链接静态库,存在以下两个问题:
1、如果未引用,不会被编译进来 , 比如stm32f4xx_it.c 文件不会被编译进来,会导致烧写后运行不起来
2、weak 在 GCC 链接静态库时的问题, gcc 在链接静态库时,默认的行为是只要找到第一个(不管是不是弱符号),就会将其链接,然后停止继续寻找,这样一来,如果你的 weak 是被第一个找到的,那么强定义的函数就失效了
参考链接:https://zhuanlan.zhihu.com/p/616109439
3、解决方法:
在链接选项加上 -Wl,--whole-archive -l静态库 -Wl,--no-whole-archive
作用如下:
-
强制包含所有对象文件:该选项告诉链接器无论是否满足当前需求,都要包含静态库中的所有对象文件。
-
解决符号未引用问题:这在处理某些特定情况下很有用,例如,当您需要确保某个静态库中的所有函数都被链接,而不管它们是否在当前代码路径中被引用。这对于某些库的初始化或构造函数等情况可能特别有用
4、编译参数
start-group
和end-group
是一对特殊的编译选项,用于控制链接多个共享库(或静态库)时的依赖关系和链接顺序。这对选项的主要目的是解决库之间的循环依赖问题,并确保所有的库都能正确链接