这个C宏有什么作用?

Jac*_*lma 0 c

你知道这段代码是什么意思吗?

#define StartEsub (unsigned short   (**) (unsigned short \
                                               AnalogConfigReg, \
                                               unsigned short \
                                               AnalogClockMask)) 0x00502501
Run Code Online (Sandbox Code Playgroud)

Lun*_*din 7

摆脱凌乱的宏,你得到

(unsigned short (**) (unsigned short AnalogConfigReg, 
                      unsigned short AnalogClockMask)) 0x00502501
Run Code Online (Sandbox Code Playgroud)

这是一个从表示地址的整数转换为指向函数指针的指针.指向函数指针的指针如何对您的特定情况有意义,我不知道.

编写相同的更好,更易读的方法是:

typedef unsigned short func_t (unsigned short AnalogConfigReg, 
                               unsigned short AnalogClockMask);

(func_t**) 0x00502501
Run Code Online (Sandbox Code Playgroud)


Pau*_*l R 6

它似乎是为函数定义一个硬编码的向量地址(一个指向函数指针的指针).它将特定于您的特定嵌入式目标,因此您可能希望添加有关使用此代码的系统的详细信息.

更详细地说 - 显然有一个函数在某处看起来像这样:

unsigned short foo (unsigned short AnalogConfigReg,
                    unsigned short AnalogClockMask)
Run Code Online (Sandbox Code Playgroud)

并且指向该功能的指针存储在该地址中0x00502501.

这种事情有时被称为"钩子",它可能允许通过修改此钩子地址来安装用户定义的函数.