请教,在IAR中如何定义位变量
例如:我想定义一个字节:FlagA,它的8个bit分别为不同的标志位
在网上找到如下资料,如法炮制,编译时出差,求助
参考:
http://www.07net01.com/2015/10/940607.html
1.在*.h中,写入如下代码:
typedef union
{
struct
{
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
} bits;
} UINT8_VAL;
2.在*.c中定义变量
UINT8_VAL BitFlag1 = {0x00}; //每一个bit初始化为0,如果对某一位置1可用BITx
3.在*.h中,再添加:
extern UINT8_VAL BitFlag1;
#define t1msFlag BitFlag1.bits.b0 // 任务1
编译后出错信息:
Error[Pe256]: invalid redeclaration of type name "UINT8_VAL" (declared at line 20) G:STM8DB6_STM8S105C4_2016-6-29gpio.h 20
你连最起码的位域和union结构都没搞懂,怎么可能那样做呢。union除了初始化,只能对成员进行初始化,不能整体赋值的。
volatile union { unsigned char FlagA; __ByteBit8 FlagA_bit; };
1、你只定义了结构没有定义变量名,应该是:
volatile union { unsigned char FlagA; __ByteBit8 FlagA_bit; } ABC;
2、直接调用union结构成员
FlagA=0;
正确的应该是:
ABC.FlagA=0;
其它的位应该是:
ABC.FlagA_bit.b0等等;
一周热门 更多>