首页 > 解决方案 > 在用户代码中重用引导加载程序中包含的库

问题描述

我目前正在为带有 WizNet W5500 以太网控制器的 STM32F103C8T6 编写自定义以太网引导加载程序。我想将引导加载程序代码与用户代码尽可能分开。

问题是 WizNet 库约占所有可用 ROM 的 25%(仅 64k),所以我不想在引导加载程序和用户代码中都包含该库,而是仅将其包含在引导加载程序中并访问来自用户代码的库。


我目前对一种方法的想法是:

引导加载程序中:

用户代码中:


但是有一些我不知道如何解决的开放要求:

  1. 并非库的所有函数都在引导加载程序中调用,因此它们不会被链接。
    所以在用户代码中,只有已经存在的函数应该通过函数指针调用。
    如果在引导加载程序中不需要的用户代码中调用了库函数,则编译器/链接器必须将该函数放入用户代码中。
  2. 当库在用户代码中编译时,它应该尽可能在内部使用函数指针。
  3. 理想情况下,函数的名称应该保持不变,因此无论通过函数指针使用现有函数还是单独使用库,用户代码都保持兼容。

我对 C 链接的理解不足以完成这项工作。也许我的方法是完全错误的,有更好的方法,或者根本不可能。我希望有人能够在这里帮助我,并且我可以清楚地描述我的问题。

一些额外的限制/信息:

标签: clinkershared-librariesstm32

解决方案


推荐阅读