问题一?/p>
IAR
中如何做位定义,位操?/p>
以前?/p>
STVD
中,使用如下语句做位定义
_Bool L1 @PA_ODR : 6; //
数码管个?/p>
,
低电平点?/p>
_Bool L2 @PA_ODR : 5; //
数码管十?/p>
,
低电平点?/p>
_Bool L3 @PA_ODR : 4; //
数码管百?/p>
,
低电平点?/p>
但是同样的语句在
IAR
中不能用了,编译时报错?/p>
后来,查?/p>
IAR
中的头文?/p>
"iostm8s207rb.h"
,看到如下语?/p>
/*-------------------------------------------------------------------------
* Port A bit fields
*-----------------------------------------------------------------------*/
#ifdef __IAR_SYSTEMS_ICC__
#define PA_ODR_ODR0 PA_ODR_bit.ODR0
#define PA_ODR_ODR1 PA_ODR_bit.ODR1
想想看:
既然可以?/p>
PA_ODR_ODR1
来指定某个位,那么我再将某个位用
define
重新
定义为我想要的名字不就可以了?/p>
?心动不如行动,于是写下如下语句?/p>
#define Sound_K PA_ODR_ODR6; //
语音控制
K
原本以为十拿九稳,肯定能编译通过,结果现实狠狠地教训了我一下,报错?/p>
Error
?/p>
Pe029
?/p>
:expected an expression
我百思不得其解,以为
IAR
不支持这种重复定义的方式,于是换?/p>
bool
?/p>
_Bool, _bool,
bit ......
各种方法尝试,结果均以失败告终,事情似乎走到了尽头?/p>
最后,抱着试一试的想法,我把原头文件中的语?/p>
#define PA_ODR_ODR6 PA_ODR_bit.ODR6
换成
#define Sound PA_ODR_ODR6 //
语音控制
K
结果,编译通过了,我真是泪流满面啊,没想到问题解决了?/p>
回过头来,我再检查之前的语句