请教:IAR中如何定义位变量

2019-07-19 20:29发布

请教,在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


1.png


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
kuheye
1楼-- · 2019-07-20 16:02
shark_32 发表于 2016-7-2 08:53
贴一下整个gpio.h的内容吧。
个人怀疑是这个文件被重复包含了。

我把整个项目打包上传,麻烦您帮忙看看

在gpio_init.c调用这些变量,变量字节或位变量均正常
但在main.c中调用,就出错,说为定义变量
pbxywyq
2楼-- · 2019-07-20 18:49
 精彩回答 2  元偷偷看……
pbxywyq
3楼-- · 2019-07-20 20:35
pbxywyq 发表于 2016-7-2 10:31
你的定义就是错了,union中要包含两个变量才有意义
typedef union
{

Character作为整体赋值,bits作为位寻址。
shark_32
4楼-- · 2019-07-21 00:28
 精彩回答 2  元偷偷看……
kuheye
5楼-- · 2019-07-21 02:07
 精彩回答 2  元偷偷看……
shark_32
6楼-- · 2019-07-21 06:50
本帖最后由 shark_32 于 2016-7-2 13:41 编辑

FlagA_bit我也看不到你在哪里声明过。没声明自然是没法调用的

一周热门 更多>