嵌入天地

----->>>>>嵌入式 文学 管理 米国 卡通 以及其他

公益广告:你可知道,看帖回复和评论是一种美德!

另,兄弟姐妹们,假如有技术问题交流,请直接发送到我的信箱!

博客园 首页 新随笔 联系 订阅 管理

问题描述:
定义如下数据结构
    typedef struct tagStdMacInfo    /*待学MAC信息,微码提供给驱动,驱动提供给协议均使用该数据结构*/
    {
        UINT32 macValid            : 1;  /*mac信息是否被学习标志*/
        UINT32 isLocal                : 1;  /*本地标志*/
        UINT32 isSmartGroup   : 1;  /*接口类型是否为smartGroup*/    
        UINT32 reserved0          : 1;   
        UINT32 vpnId                   :12;  /*VPLS实例表示 即vpnid*/ 
       .......................
    }VPLS_STD_MAC_INFO;
实际使用:
     VPLS_STD_MAC_INFO MacStdElement = {0};
     MacStdElement.vpnId=0x1;

  1.      MacStdElement.isSmartGroup      =0x1;
         ................

    问题:
        在如上的结构中,定义为一个位域的字节,在赋值为0时候,无任何问题;当赋值为1的时候,显示为0xffffffff,当取的时候也是同样显示。

    解决:
            首先,怀疑是否是编写的函数有问题,因为其他定义的12位的没有问题,查看定义发现先前定义对于1bit的,冒号后边有空格,尝试去掉空格,无作用。
            其次,查看实际物理内存,发觉实际写的值是真确的,说明写的过程可以放心,是显示问题,可是在取的过程和赋予其他值的过程是否正 确呢?
            再次,查看相关部分的汇编代码,如下: 
             写内存过程
                 MacStdElement.isSmartGroup      =0x1;
                     0x1c4e14       +0x0a0:                 LDRB     r3,[r11,#-0x2c]
                     0x1c4e18       +0x0a4:               ORR      r2,r3,#4
                     0x1c4e1c       +0x0a8:                 MOV      r3,r2
                     0x1c4e20       +0x0ac:                 STRB     r3,[r11,#-0x2c]
            向上层赋值过程(isLocal为UINT32)
                     isLocal = pElement->isLocal;
                     0xe58f8       +0x118:                 LDR      r3,[r11,#-0x28]
                     0xe58fc       +0x11c:                 LDRB     r2,[r3,#0]
                     0xe5900       +0x120:                 AND      r3,r2,#0xff
                     0xe5904       +0x124:                 MOV      r2,r3,LSR #1
                     0xe5908       +0x128:                 AND      r3,r2,#0xff
                     0xe590c       +0x12c:                 AND      r2,r3,#1

                     0xe5910       +0x130:                 STR      r2,[r11,#-0x40]      


    结论:
            是tornado的显示问题,不会对程序造成影响!!至此,遂大松一口气
posted on   嵌入专栏  阅读(562)  评论(0)    收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示