首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >库中的代码可以位于特定的地址吗?

库中的代码可以位于特定的地址吗?
EN

Stack Overflow用户
提问于 2019-12-06 12:22:07
回答 1查看 100关注 1票数 0

我正在做一个cmake C/C++嵌入式项目。我有一个跨平台的应用程序。它将在基于PC的模拟器以及嵌入式(STM32)目标上运行。一个通用的硬件抽象层允许这样做。

理想情况下,我希望有一个针对目标特定硬件抽象层的库,例如,在为STM32编译时创建一个库,在为PC编译时创建另一个库)。这将链接到应用程序。尽管我并不真正需要它成为一个单独的库。

我遇到的问题是STM32的HAL库包含STM32的启动代码(asm)。构建并链接HAL库后,启动代码将消失。我可以直接在应用程序中包含启动代码,并且它是正确链接和定位的,但是如果为STM32构建,现在我需要在应用程序中包含该文件的特殊情况。

项目文件夹结构如下:

代码语言:javascript
复制
- TheProject
 - Applications
  - TheMainApplication
    ApplicationSource.c
    CMakeLists.txt   (add_executable, add sources, link HAL library)
- HAL
 - Embedded
  - STM32
   STM32SpecificCode.c
   STM32StartupCode.s
   CMakeLists.txt (add_library(STM32) target_sources(*.c, *.s))
 - PC
  - PC Specific
 CMakeLists.txt (add_library(HAL) if(STM32) add_subdirectory(STM32) link STM32 library else if PC ...)
CMakeLists.txt (project(myproj) add_subdirectory(HAL) add_subdirectory(Applications/TheMainApplication) )

实际上,有比我在这里提到的更多的目标和选项的组合,但为了简单起见,例如sake。

可能是我缺乏如何使用子文件夹的cmake知识,这让我很难做到这一点,或者是糟糕的项目结构!我非常希望得到一些建议或反馈,告诉我如何组织这段代码,让特定于STM32的文件保留在STM32代码中,如果可能的话,避免在应用程序makefile中出现特殊情况。或任何其他相关的建议。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-12-07 03:27:28

将ARM向量表分配给特定的地址确实是通过gcc风格的工具链上的链接器部分来完成的,正如一些人在评论中提到的那样。在源代码中使用指令标记所需的链接器部分,然后将该部分指向链接器脚本中的特定区域。

链接器脚本几乎总是目标唯一的。即使它们不是,从理论上讲,它们分配未被任何代码使用的部分的位置也不是问题。

退回到你真正想要弄清楚的地方,一个生成本机可执行文件的构建系统总是必须包含目标唯一的部分。不同的工具链和目标需要不同的标志和输入。几乎不变的是,您需要在使用的源文件集中有一定程度的差异。

因此,一般而言,您要做的是组织您的构建系统,将所有目标通用的功能源及其公共依赖项进行分组。

然后,您为每个目标提供了一部分,这些目标提取公共源,添加目标唯一的源,如从源构建的I/O例程(或模拟),并提供适当的构建规则。最后一部分是传递适当的标志、要链接的预构建库,以及指定链接器脚本的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59206837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档