这个宏定义如下(TI Z-Stack的hal_defs.h文件中):#define st(x) do { x } while (__LINE__ == -1)。这个宏定义被其它的宏定义用来构建一个完全有效的C声明。如果没有这个宏定义,那么在if/else条件语句中可能得不到预期的结果。
例如,以下的应用
#define SET_REGS() st( ioreg1 = 0; ioreg2 = 0; )
代替#define SET_REGS() { ioreg1 = 0; ioreg2 = 0; }
或 #define SET_REGS() ioreg1 = 0; ioreg2 = 0;
最后这个宏定义在if/else条件句中将不能得到预期的结果,倒数第二个宏将导致编译器错误在某些使用if/else结构时。
#define st(x) do { x } while (__LINE__ == -1)语句分析:
__LINE__是C/C++的内部宏定义,得到当前代码的行号.
do{x} while(__LINE__==-1) 因行号肯定是大于-1的,所以这个循环只执行一次。
以上内容摘自:http://blog.21ic.com/user1/6121/archives/2010/76525.html
下面是自己的看代码时的一些内容:
HAL_BOARD_INIT()中调用了->HAL_TURN_OFF_LED1()
而#define HAL_TURN_OFF_LED1() st( LED1_SBIT = LED1_POLARITY (0); )
补充:#define st(x) do { x } while (__LINE__ == -1)
#define LED1_SBIT P1_0
#define LED1_POLARITY ACTIVE_HIGH
#define ACTIVE_HIGH !! //注意:这里使用了两个“!!”表示双重取反,很有意思吧。
绕了一圈终于知道其LED是接在P1.0口了。先记到这里
例如,以下的应用
#define SET_REGS() st( ioreg1 = 0; ioreg2 = 0; )
代替#define SET_REGS() { ioreg1 = 0; ioreg2 = 0; }
或 #define SET_REGS() ioreg1 = 0; ioreg2 = 0;
最后这个宏定义在if/else条件句中将不能得到预期的结果,倒数第二个宏将导致编译器错误在某些使用if/else结构时。
#define st(x) do { x } while (__LINE__ == -1)语句分析:
__LINE__是C/C++的内部宏定义,得到当前代码的行号.
do{x} while(__LINE__==-1) 因行号肯定是大于-1的,所以这个循环只执行一次。
以上内容摘自:http://blog.21ic.com/user1/6121/archives/2010/76525.html
下面是自己的看代码时的一些内容:
HAL_BOARD_INIT()中调用了->HAL_TURN_OFF_LED1()
而#define HAL_TURN_OFF_LED1() st( LED1_SBIT = LED1_POLARITY (0); )
补充:#define st(x) do { x } while (__LINE__ == -1)
#define LED1_SBIT P1_0
#define LED1_POLARITY ACTIVE_HIGH
#define ACTIVE_HIGH !! //注意:这里使用了两个“!!”表示双重取反,很有意思吧。
绕了一圈终于知道其LED是接在P1.0口了。先记到这里