首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

codewarrior 8.0 pe生成代码问题

codewarrior 8.0 pe生成代码问题

我在使用codewarrior 8.0中的pe时,初始化后在pe_types.h中定义了下面这个函数,不知道是怎么操作的,里面的#是什么用法,这个函数对寄存器是怎么操作的,有没有关于这种语法的说明啊?请版主指教!
#define setRegBitGroup(reg, bits, val) (reg = (word)((reg & ~reg##_##bits##_##MASK) | ((val) << reg##_##bits##_##BITNUM)))
连字符
能说详细点么?

就是说实际上把函数参数里面的某些值直接当作字符出现在了程序里,比如你如果这样调用这个函数

setRegBitGroup(GPIOBDDR, 2, 0);

那么在执行的时候,按照函数的定义,相当于执行了这样的语句

reg = (word)((GPIOBDDR & ~GPIOBDDR_2_MASK) | ((0) << GPIOBDDR_bits_BITNUM))

估计其中的MASK和BITNUM应该是事先付了值的变量

经常在CW的SDK或PE里看到这种形式的宏定义,其中##的作用是连字符,这样的话传入的参数就不光代表一个值,加上##以后就可以当作字符串出现在命令里了,从而实现了一些更直观的功能。

返回列表