你知道这段代码是什么意思吗?
#define StartEsub (unsigned short (**) (unsigned short \
AnalogConfigReg, \
unsigned short \
AnalogClockMask)) 0x00502501
答案 0 :(得分:7)
摆脱凌乱的宏,你得到了
(unsigned short (**) (unsigned short AnalogConfigReg,
unsigned short AnalogClockMask)) 0x00502501
这是从表示地址的整数转换为指向函数指针的指针。指向函数指针的指针对于特定情况有何意义,我不知道。
编写相同内容的更好,更易读的方法是:
typedef unsigned short func_t (unsigned short AnalogConfigReg,
unsigned short AnalogClockMask);
(func_t**) 0x00502501
答案 1 :(得分:6)
它似乎是为函数定义了一个硬编码的向量地址(一个指向函数指针的指针)。它将特定于您的特定嵌入式目标,因此您可能希望添加有关使用此代码的系统的详细信息。
更详细地说 - 显然某处的功能看起来像这样:
unsigned short foo (unsigned short AnalogConfigReg,
unsigned short AnalogClockMask)
并且指向此函数的指针存储在地址0x00502501
。
这种东西有时被称为“钩子”,它可能允许通过修改这个钩子地址来安装用户定义的函数。