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

          作用如下:

  1. 强制包含所有对象文件:该选项告诉链接器无论是否满足当前需求,都要包含静态库中的所有对象文件。

  2. 解决符号未引用问题:这在处理某些特定情况下很有用,例如,当您需要确保某个静态库中的所有函数都被链接,而不管它们是否在当前代码路径中被引用。这对于某些库的初始化或构造函数等情况可能特别有用

 

4、编译参数 

     start-groupend-group是一对特殊的编译选项,用于控制链接多个共享库(或静态库)时的依赖关系和链接顺序。这对选项的主要目的是解决库之间的循环依赖问题,并确保所有的库都能正确链接

     

 

posted @ 2023-02-05 12:05  cogitoergosum  阅读(62)  评论(0编辑  收藏  举报