在我必须理解的嵌入式代码中,有这行代码:
*((void (**) ()) 0x01) = c_int01; /* Write the interrupt routine entry */
我能理解你用函数指针 c_int01
设置了中断 vector ,但我不知道是哪种类型的转换 (void (**) ())
指的是。我知道标准函数指针表示法 (void (*)())
但不知道另一个。
我尝试重构代码,使其看起来更具可读性,如下所示:
// header
typedef void (*interrupt_handler)(); // prototype of an interruption handler
#define INTERRUPT_VECTOR 0x01
#define SET_INTERRUPT_HANDLER( handler ) *((interrupt_handler) INTERRUPT_VECTOR) = (handler)
// code
SET_INTERRUPT_HANDLER( c_int01 );
但是嵌入式编译器提示 LHS 不是一个对象。
有人知道这个符号是什么意思吗? (无效(**)())
//编辑:
对于那些感兴趣的人,我会更好地理解这一点:
*( (void (*)())* 0x01) = c_int01;
最佳答案
这是一个指向函数指针的指针。
所以转换将整数 0x01
转换为类型为 (void (*)())
的函数指针的地址
你可以重写它:
typedef void (*interrupt_handler)();
*((interrupt_handler*) 0x01) = c_int101;
关于c - 什么是 (void (**) ()) 以及如何对它进行类型定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16276540/