Structure bit field

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Structure bit field

462 次查看
Aswin_5232
Contributor II
Hi, I am using CodeWarrior 5.2 and the controller is MC9S12DG256B.
When I am assigning each structure element with values and finally reading the overall value using union it is giving different values. how to solve this issue. I think there is difference in byte ordering.
typedef union
{
  unsigned long  w;
struct  {
    unsigned long disp_comp_cal : 2;//0
    unsigned long disp_home     : 2;//2
    unsigned long disp_trips    : 2;//4
    unsigned long disp_fuel     : 2;//6
    unsigned long disp_hours    : 2;//8
    unsigned long disp_service  : 2;//10
    unsigned long disp_diags    : 2;//12
    unsigned long disp_slftst   : 2;//14   
    unsigned long disp_cust_set : 2;//16
   
  }b;
}attrib2;
0 项奖励
回复
3 回复数

283 次查看
Aswin_5232
Contributor II

Hi Lama, when I am changing the project settings this issue get resolved but values read from different PORTS are also getting reversed. Any other solution for this. 

0 项奖励
回复

415 次查看
Aswin_5232
Contributor II

Hi Lama,

Thanks it is working now.

0 项奖励
回复

424 次查看
lama
NXP TechSupport
NXP TechSupport
 
 
 

Hi,

look into attached file to see solution.

You should think about compiler setup .... look into the help or manuals ... keyword=bitfield.

Your issue is order of bits in the bitfield.

Best regards,

Ladislav

 

My test code:


#include "derivative.h"      /* derivative-specific definitions */
 
//******************************************************************************
typedef union
{
  unsigned long  w;
struct  
  {
    unsigned char disp_comp_cal : 2;//0
    unsigned char disp_home     : 2;//2
    unsigned char disp_trips    : 2;//4
    unsigned char disp_fuel     : 2;//6
    unsigned char disp_hours    : 2;//8
    unsigned char disp_service  : 2;//10
    unsigned char disp_diags    : 2;//12
    unsigned char disp_slftst   : 2;//14   
    unsigned char disp_cust_set : 2;//16
    unsigned int  dummy         : 14;
   
  }b;
}attrib2;
//******************************************************************************
 
void main(void) 
{
 
  attrib2 attrib22;
 
  attrib22.w = 0x00UL;
 
  attrib22.b.disp_comp_cal =2;
  attrib22.b.disp_home     =1;
  attrib22.b.disp_trips    =3;
  attrib22.b.disp_fuel     =1;
  attrib22.b.disp_hours    =2;
  attrib22.b.disp_service  =1;
  attrib22.b.disp_diags    =3;
  attrib22.b.disp_slftst   =1;
  attrib22.b.disp_cust_set =1;  
  attrib22.b.dummy         =0x3FFFF;  
 
  // expected 0B1001 1101 1001 1101 0111 1111 1111 1111
  //          0x9D9D 7FFF 
 
  DDRAB = 0xFFFF;
 
  //------------------------
  for(;;)
   {
    attrib22.b.disp_comp_cal +=1;
    attrib22.b.disp_home     +=1;
    attrib22.b.disp_trips    +=1;
    attrib22.b.disp_fuel     +=1;
    attrib22.b.disp_hours    +=1;
    attrib22.b.disp_service  +=1;
    attrib22.b.disp_diags    +=1;
    attrib22.b.disp_slftst   +=1;
    attrib22.b.disp_cust_set +=1;  
      
    PORTAB = (unsigned int) (attrib22.w & 0xFFFFUL);
    PORTAB = (unsigned int) ((attrib22.w >> 16)  & 0xFFFFUL);
   }
 
 
  //------------------------
EnableInterrupts;
  //------------------------
  for(;;) 
   {
     _FEED_COP(); /* feeds the dog */
   }
  //------------------------
}
//******************************************************************************
%3CLINGO-SUB%20id%3D%22lingo-sub-2339110%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E7%BB%93%E6%9E%84%E4%BD%8D%E5%AD%97%E6%AE%B5%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2339110%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CDIV%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%E6%88%91%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%20CodeWarrior%205.2%EF%BC%8C%E6%8E%A7%E5%88%B6%E5%99%A8%E6%98%AF%20MC9S12DG256B%E3%80%82%3C%2FDIV%3E%3CDIV%3E%E5%BD%93%E6%88%91%E4%B8%BA%E6%AF%8F%E4%B8%AA%E7%BB%93%E6%9E%84%E5%85%83%E7%B4%A0%E8%B5%8B%E5%80%BC%EF%BC%8C%E6%9C%80%E5%90%8E%E4%BD%BF%E7%94%A8%E8%81%94%E5%90%88%E5%99%A8%E8%AF%BB%E5%8F%96%E6%95%B4%E4%BD%93%E5%80%BC%E6%97%B6%EF%BC%8C%E5%BE%97%E5%88%B0%E7%9A%84%E5%80%BC%E6%98%AF%E4%B8%8D%E5%90%8C%E7%9A%84%E3%80%82%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%E8%BF%99%E4%B8%AA%E9%97%AE%E9%A2%98%E3%80%82%E6%88%91%E8%AE%A4%E4%B8%BA%E5%AD%97%E8%8A%82%E9%A1%BA%E5%BA%8F%E6%9C%89%E5%8C%BA%E5%88%AB%E3%80%82%3C%2FDIV%3E%3CDIV%3E%E7%B1%BB%E5%9E%8B%E5%8C%96%E8%81%94%E7%9B%9F%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20W%EF%BC%9B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%E7%BB%93%E6%9E%84%20%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_comp_cal%20%3A%202%3B%2F%2F0%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_home%20%3A%202%3B%2F%2F2%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_trips%20%3A%202%3B%2F%2F4%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_fuel%20%3A%202%3B%2F%2F6%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_hours%20%3A%202%3B%2F%2F8%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_service%20%3A%202%3B%2F%2F10%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_diags%20%3A%202%3B%2F%2F12%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_slftst%20%3A%202%3B%2F%2F14%20%20%20%3C%2FDIV%3E%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20disp_cust_set%20%3A%202%3B%2F%2F16%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%20%20%7Db%3B%3C%2FDIV%3E%3CDIV%3E%7Dattrib2%EF%BC%9B%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2339904%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Structure%20bit%20field%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2339904%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CDIV%20id%3D%22tinyMceEditor_1441f989c2379flama_0%22%20class%3D%22mceNonEditable%20lia-copypaste-placeholder%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%20id%3D%22tinyMceEditor_1441f989c2379flama_1%22%20class%3D%22mceNonEditable%20lia-copypaste-placeholder%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%20id%3D%22tinyMceEditor_1441f989c2379flama_2%22%20class%3D%22mceNonEditable%20lia-copypaste-placeholder%22%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CP%3E%E6%82%A8%E5%A5%BD%EF%BC%8C%3C%2FP%3E%0A%3CP%3E%E6%9F%A5%E7%9C%8B%E9%99%84%E4%BB%B6%EF%BC%8C%E4%BA%86%E8%A7%A3%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E3%80%82%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E5%BA%94%E8%AF%A5%E8%80%83%E8%99%91%E4%B8%80%E4%B8%8B%E7%BC%96%E8%AF%91%E5%99%A8%E8%AE%BE%E7%BD%AE%20....%20%E6%9F%A5%E7%9C%8B%E5%B8%AE%E5%8A%A9%E6%88%96%E6%89%8B%E5%86%8C%20...%20keyword%3Dbitfield%E3%80%82%3C%2FP%3E%0A%3CP%3E%E4%BD%A0%E7%9A%84%E9%97%AE%E9%A2%98%E6%98%AF%E4%BD%8D%E5%9F%9F%E4%B8%AD%E6%AF%94%E7%89%B9%E7%9A%84%E9%A1%BA%E5%BA%8F%E3%80%82%3C%2FP%3E%0A%3CP%3E%E9%A1%BA%E7%A5%9D%E5%95%86%E7%A5%BA%EF%BC%81%3C%2FP%3E%0A%3CP%3E%E6%8B%89%E5%90%89%E6%96%AF%E6%8B%89%E5%A4%AB%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E6%88%91%E7%9A%84%E6%B5%8B%E8%AF%95%E4%BB%A3%E7%A0%81%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%0A%3CDIV%3E%23include%22derivative.h%22%20%2F*%20%E7%89%B9%E5%AE%9A%E4%BA%8E%E6%B4%BE%E7%94%9F%E8%AF%8D%E7%9A%84%E5%AE%9A%E4%B9%89%20*%2F%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%2F%2F******************************************************************************%3C%2FDIV%3E%0A%3CDIV%3E%E7%B1%BB%E5%9E%8B%E5%8C%96%E8%81%94%E7%9B%9F%3C%2FDIV%3E%0A%3CDIV%3E%7B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%E9%95%BF%20W%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%E7%BB%93%E6%9E%84%20%20%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%20%7B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_comp_cal%20%3A%202%3B%2F%2F0%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_home%20%3A%202%3B%2F%2F2%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_trips%20%3A%202%3B%2F%2F4%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_fuel%20%3A%202%3B%2F%2F6%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_hours%20%3A%202%3B%2F%2F8%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_service%20%3A%202%3B%2F%2F10%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_diags%20%3A%202%3B%2F%2F12%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_slftst%20%3A%202%3B%2F%2F14%20%20%20%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20unsigned%20char%20disp_cust_set%20%3A%202%3B%2F%2F16%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20%E6%97%A0%E7%AC%A6%E5%8F%B7%20int%20dummy%20%3A%2014%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%7Db%3B%3C%2FDIV%3E%0A%3CDIV%3E%7Dattrib2%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%2F%2F******************************************************************************%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3Evoid%20main(void)%20%3C%2FDIV%3E%0A%3CDIV%3E%7B%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%E5%B1%9E%E6%80%A72%20%E5%B1%9E%E6%80%A722%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.w%20%3D%200x00UL%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_comp_cal%20%3D2%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_home%20%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_trips%20%3D3%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_fuel%20%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_hours%20%3D2%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_service%20%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_diags%20%3D3%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_slftst%20%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.disp_cust_set%20%3D1%EF%BC%9B%20%20%3C%2FDIV%3E%0A%3CDIV%3E%20%20attrib22.b.dummy%20%3D0x3FFFF%EF%BC%9B%20%20%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%2F%2F%20%E9%A2%84%E6%9C%9F%200B1001%201101%201001%201101%200111%201111%201111%201111%3C%2FDIV%3E%0A%3CDIV%3E%20%20%2F%2F%200x9D9D%207FFF%20%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20DDRAB%20%3D%200xFFFF%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%2F%2F------------------------%3C%2FDIV%3E%0A%3CDIV%3E%20%20for(%3B%3B)%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_comp_cal%20%2B%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_home%20%2B%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_trips%20%2B%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_fuel%20%2B%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_hours%20%2B%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_service%20%2B%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_diags%20%2B%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_slftst%20%2B%3D1%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20attrib22.b.disp_cust_set%20%2B%3D1%EF%BC%9B%20%20%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%26nbsp%3B%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20PORTAB%20%3D%20(unsigned%20int)%20(attrib22.w)%26amp%3B%200xFFFFUL%EF%BC%89%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20PORTAB%20%3D%20(unsigned%20int)%20((attrib22.w)%26gt%3B%26gt%3B%2016)%26amp%3B%200xFFFFUL%EF%BC%89%EF%BC%9B%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%2F%2F------------------------%3C%2FDIV%3E%0A%3CDIV%3E%3CSPAN%3E%20EnableInterrupts%3B%3C%2FSPAN%3E%3C%2FDIV%3E%0A%3CDIV%3E%20%20%2F%2F------------------------%3C%2FDIV%3E%0A%3CDIV%3E%20%20for(%3B%3B)%20%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%20%26nbsp%3B%20%7B%3C%2FDIV%3E%0A%3CDIV%3E%20%20%20%20%20_FEED_COP()%3B%20%2F*%20%E5%96%82%E7%8B%97%20*%2F%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%26nbsp%3B%20%7D%3C%2FDIV%3E%0A%3CDIV%3E%20%20%2F%2F------------------------%3C%2FDIV%3E%0A%3CDIV%3E%7D%3C%2FDIV%3E%0A%3CDIV%3E%2F%2F******************************************************************************%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2340231%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Structure%20bit%20field%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2340231%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%97%A8%EF%BC%8C%E5%96%87%E5%98%9B%E3%80%81%3C%2FP%3E%3CP%3E%E8%B0%A2%E8%B0%A2%EF%BC%8C%E7%8E%B0%E5%9C%A8%E5%8F%AF%E4%BB%A5%E7%94%A8%E4%BA%86%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2345582%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20Structure%20bit%20field%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2345582%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%97%A8%EF%BC%8C%E5%96%87%E5%98%9B%EF%BC%8C%E5%BD%93%E6%88%91%E6%9B%B4%E6%94%B9%E9%A1%B9%E7%9B%AE%E8%AE%BE%E7%BD%AE%E6%97%B6%EF%BC%8C%E8%BF%99%E4%B8%AA%E9%97%AE%E9%A2%98%E5%BE%97%E5%88%B0%E4%BA%86%E8%A7%A3%E5%86%B3%EF%BC%8C%E4%BD%86%E4%BB%8E%E4%B8%8D%E5%90%8C%E7%AB%AF%E5%8F%A3%E8%AF%BB%E5%8F%96%E7%9A%84%E5%80%BC%E4%B9%9F%E8%A2%AB%E9%A2%A0%E5%80%92%E4%BA%86%E3%80%82%E8%BF%98%E6%9C%89%E5%85%B6%E4%BB%96%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E5%90%97%EF%BC%9F%20%3C%2FP%3E%3C%2FLINGO-BODY%3E