作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想实现一种简单的方法来声明/定义函数,这些函数应该在编译时添加到 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/
背景: 我正在使用的 Jenkins 插件是: Bitbucket 插件 Bitbucket Pullrequest Builder 插件 我工作的公司正在使用 Jira + Bitbucket。 我
我是一名优秀的程序员,十分优秀!