打印
[STM32]

C语言关于位段的操作

[复制链接]
1366|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wang12zhe|  楼主 | 2014-5-22 18:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wang12zhe 于 2014-5-22 20:44 编辑

typedef struct
{        struct
        {                 
                u16 ZoomLev:3;          //数据的放大倍数 00 -- 0倍, 01 -- 10倍,10 -- 100倍,11
-- 1000倍,
                u16 ChangePro:2;  // 数据修改属性,0 -- 不可以修改, 1 -- 可以任何时刻修改,
10 -- 运行时不能修改,11 -- 在特定状态下才能修改
        u16 ParHide:2;    //参数是否隐藏  0:显示 2:用户不可见 1:用户设置可见
        u16 DigBit:7;
                u16 LowLmtPro: 1; //取值范围:0--1如果为0:LowLmt是被设置参数的下限;如果为1:
LowLmt为索引的另外一个参数
                u16 UpLmtPro: 1;  //取值范围:0--1如果为0:LowLmt是被设置参数的上限;如果为1:
LowLmt为索引的另外一个参数
        }ParaPro[2];
        u16 LowLmt;        //被设置参数的下限置,或者下限值的索引
        u16 UpLmt;        //被设置参数的上限值,或者上限值的索引
}PARA_ATTR;




const PARA_ATTR  SysParaAttrChar[]=
{
//P0
  {{{2,0,0,1,0},{3,0,0,1,0}},    0,65535},//P00.00
  {{{2,0,0,1,0},{3,0,0,1,0}},    0,65535},//P00.01
  {{{2,0,0,1,0},{3,0,0,1,0}},    0,65535},//P00.02
  {{{0,0,0,7,0},{0,0,0,7,0}},    0,65535},//P00.03
  {{{2,0,0,3,0},{2,0,0,3,0}},    0,65535},//P00.04
  {{{0,0,0,0,0},{1,0,0,0,0}},    0,65535},//P00.05
  {{{0,0,0,0,0},{0,0,0,0,0}},    0,65535},//P00.06
  {{{0,0,0,0,0},{1,0,0,0,0}},    0,65535},//P00.07
  {{{0,0,0,0,0},{0,0,0,0,0}},    0,65535},//P00.08
  {{{0,0,0,7,0},{0,0,0,7,0}},    0,65535},//P00.09
  {{{0,0,0,0,0},{0,0,0,0,0}},    0,65535},//P00.10
  {{{0,0,0,0,0},{0,0,0,0,0}},    0,65535},//P00.11
  {{{0,0,0,8,0},{0,0,0,8,0}},    0,65535},//P00.12
  {{{0,0,0,0,0},{0,0,0,0,0}},    0,65535},//P00.13
  {{{0,0,0,7,0},{0,0,0,7,0}},    0,65535},//P00.14
  {{{0,0,0,7,0},{0,0,0,7,0}},    0,65535},//P00.15
  {{{0,0,0,7,0},{0,0,0,7,0}},    0,65535},//P00.16
……
初始化部分我只截取了一部分

这样初始化为什么没报错啊,IAR编译的没报错
结构体定义部分一个六个位段,初始化只有五个啊

相关帖子

沙发
ayb_ice| | 2014-5-22 19:25 | 只看该作者
一对一的初始化不会有问题的

使用特权

评论回复
板凳
wang12zhe|  楼主 | 2014-5-22 20:44 | 只看该作者
ayb_ice 发表于 2014-5-22 19:25
一对一的初始化不会有问题的

怎么可能是一对一啊  大哥 再仔细看看

使用特权

评论回复
地板
ayb_ice| | 2014-5-23 08:06 | 只看该作者
typedef struct
{
        struct{
                u16 ZoomLev:3;            //数据的放大倍数 00 -- 0倍, 01 -- 10倍,10 -- 100倍,11
                u16 ChangePro:2;          // 数据修改属性,0 -- 不可以修改, 1 -- 可以任何时刻修改,
                u16 ParHide:2;            //参数是否隐藏  0:显示 2:用户不可见 1:用户设置可见
                u16 DigBit:7;
                u16 LowLmtPro: 1;         //取值范围:0--1如果为0owLmt是被设置参数的下限;如果为1:
                u16 UpLmtPro: 1;          //取值范围:0--1如果为0owLmt是被设置参数的上限;如果为1:
        }ParaPro[2];

        u16 LowLmt;                        //被设置参数的下限置,或者下限值的索引
        u16 UpLmt;                        //被设置参数的上限值,或者上限值的索引
}PARA_ATTR;




const PARA_ATTR SysParaAttrChar[2] =
{
//______________________
// SysParaAttrChar[0]
        {
                {
                        {        // ParaPro[0]
                                1,
                                1,
                                1,
                                1,
                                1,
                                1,
                        },
                        {        // ParaPro[1]
                                0,
                                0,
                                0,
                                0,
                                0,
                                0,
                        },
                },

                0x1234,                // LowLmt
                0x5678,                // UpLmt
        },

//______________________
// SysParaAttrChar[1]
        {
                {
                        {        // ParaPro[0]
                                1,
                                1,
                                1,
                                1,
                                1,
                                1,
                        },
                        {        // ParaPro[1]
                                0,
                                0,
                                0,
                                0,
                                0,
                                0,
                        },
                },

                0x1234,                // LowLmt
                0x5678,                // UpLmt
        },

//______________________
// SysParaAttrChar[...]
// ...

};

使用特权

评论回复
5
wang12zhe|  楼主 | 2014-5-23 16:30 | 只看该作者
ayb_ice 发表于 2014-5-23 08:06
typedef struct
{
        struct{

{{{2,0,0,1,0},{3,0,0,1,0}},    0,65535},//P00.0
这个的ParaPro[0]和ParaPro[1]只有5个元素的啊,莫非第六个元素默认为0?

使用特权

评论回复
6
ayb_ice| | 2014-5-23 17:27 | 只看该作者
wang12zhe 发表于 2014-5-23 16:30
{{{2,0,0,1,0},{3,0,0,1,0}},    0,65535},//P00.0
这个的ParaPro[0]和ParaPro[1]只有5个元素的啊,莫非 ...

是的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

205

帖子

1

粉丝