gpt4 book ai didi

c - 在 GCC 中实现编译时只读函数指针表

转载 作者:太空狗 更新时间:2023-10-29 15:32:55 26 4
gpt4 key购买 nike

我想实现一种简单的方法来声明/定义函数,这些函数应该在编译时添加到 R/O 内存中的函数指针表(特别是使用 GCC 的 AVR 设备上的程序闪存),同时还具有默认值放置在所有未使用条目中的函数指针。例如,如果我有 32 个可能的条目,则如下:

DEFAULTFUNC
void default_handler(...)
{
...
}

FUNC(28)
void handle_foo(...)
{
...
}

将在函数表的第 28 个元素中放置一个指向 handle_foo 的指针,同时将 default_handler 放置在其他 31 个元素中。

我已经查看了 avr-libc 如何为中断 vector 实现 ISR(),但它似乎依赖于一些我尚未发现的用于放置函数指针的内部 GCC 行为在 .vectors 段内。我如何在代码中模仿它以在 .{,rel{,a}.}rodata 段中适本地创建函数指针表?

最佳答案

http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html讨论将变量放入特定的链接器部分。他们给出了一个将 uart 结构放置在可能已配置为硬件地址(名为 DUART_A)的部分的示例:

struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };

在您描述的情况下,我相信您会简单地命名现有的只读部分,以使表格放置在它在那里找到空间的任何地方。

关于c - 在 GCC 中实现编译时只读函数指针表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19845635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com