gcc - 使用 #pragma 将 __attribute__((section(".dflash_code"))) 应用于整个源文件
Posted
技术标签:
【中文标题】gcc - 使用 #pragma 将 __attribute__((section(".dflash_code"))) 应用于整个源文件【英文标题】:gcc - use #pragma to apply __attribute__((section(".dflash_code"))) to entire source file 【发布时间】:2017-11-21 16:06:07 【问题描述】:我真的不想将__attribute__((section(".dflash_code")))
复制粘贴到给定源文件中的每个函数。
有没有办法使用#pragma
告诉编译器将该属性应用于源文件中的每个函数?
【问题讨论】:
你昨天已经问过了。从那以后一切都没有改变。 @EugeneSh。该问题不涉及使用#pragma
这个问题是关于 GCC 的。这是关于 GCC 中特定的#pragma。
【参考方案1】:
我认为您不能在源代码中执行此操作,但您可以在目标文件上使用objcopy --rename-section .text=.dflash_code
以获得大致相同的效果。有关如何使用 objcopy
的更多建议,请参阅 GNU Binutils manual。
【讨论】:
谢谢,我会试试的。我还想使用链接器命令but my attempts are unsuccessful 让它工作。你知道为什么吗? @Adrian 对不起,据我所知,你在那里尝试的应该有效。除非您愿意向我们展示您的整个链接器脚本,可能还有您的整个 Makefile 以及有关构建环境的更多详细信息,否则我认为没有人能进一步帮助您。跨度> 这是有道理的。如果你的方法在这里有效,它会一样好。 它不起作用:objcopy -I binary --rename-section .text=.dflash_code ..\orig\compile.doj .\compile.doj
给出相同的二进制文件
-I binary
告诉 objcopy 将其输入解释为 没有内部结构。试试没有那个。如果它仍然不起作用,我需要确切知道您实际使用的目标文件格式,主机和目标 CPU 和操作系统也会有所帮助。【参考方案2】:
也许它不会使您免于在函数声明中包含某些内容,但实际上我更愿意知道特定函数(甚至全部)不在 .text 部分中。我通常#define
更短的,比如
#define DFC __attribute__((section(".dflash_code")))
并在代码中使用它。当我在一段时间后回到代码中时,它也记得我,这个函数在声明中有一些特殊的东西。
【讨论】:
以上是关于gcc - 使用 #pragma 将 __attribute__((section(".dflash_code"))) 应用于整个源文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 gcc 的特定部分中放置一组变量,arm 是不是有类似 #pragma default_variable_attributes 的东西