如何解决从 ARM (Keil uVIsion) 的 C 代码生成部分并获取开始和结束符号,并防止链接器删除它们
我正在用 C 为 ARM 开发一个嵌入式项目。我想在代码中创建一个部分,在其中定义一些函数,然后 init
函数将遍历它们以执行它们。类似的东西:
void f1(void) { ... } __section("some_section")
void f2(void) { ... } __section("some_section")
...
...
[In a different module]
typedef void (*funptr)(void);
void init_func(void) {
funptr iter = &__some_section_start;
do {
*iter();
iter++;
} while (iter <= &__some_section_end);
}
我知道可以通过修改项目链接器脚本来完成这样的事情,但是我想知道是否可以在没有链接器脚本的情况下这样做。
我也试过 __attribute__((section("ARM.at.<address>")))
但这行不通,因为这会使一个函数与另一个函数重叠。
此外,我尝试使用典型的 __attribute__((section(...)))
并反汇编生成的文件,以查看 Keil 编译器是否生成任何类型的符号来指示该部分的开头和结尾。不仅没有这样做,很多时候我在特定部分创建的变量并没有生成。我怀疑链接器正在将其剥离,甚至使用 volatile
和 attribute(used)
(应该正是这样做的)。 如何防止链接器执行此操作?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。