Board logo

标题: codewarrior 8.0 pe生成代码问题 [打印本页]

作者: flying1983    时间: 2007-7-18 16:21     标题: 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)))
作者: b08623    时间: 2007-8-8 11:05

连字符
作者: flying1983    时间: 2007-8-10 10:02

能说详细点么?
作者: csjedi    时间: 2009-2-18 21:46

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

setRegBitGroup(GPIOBDDR, 2, 0);

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

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

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

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






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0