This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

packed array of bitfileds with gcc


Hi there. 

Problem:   I get data from an external interface with an organisation/granularity of 20bit-blocks. For buffering and processing I'd like to have an array of 20bit width elements.

Two Ideas:   

a)   a "packed" array of elements with 20bits width. So in  32Bit word there is a variable boundary to the next  array index. 
For a better understand here is a graphic about the memory - placement : 

#  |<----32bit------>|
==============
..
3  |-B5-|-----B4-----|
2  |-----B3-----|-B1-| 
1  |---B2---|---B1---|
0  |-B1-|-----B0-----|

Is this possible in c /gcc ? The Advance will be a generic type and easy handling for processing, instead of idea b. How to get those type defined ?

The following code did not work because the array elements will not be packed, so memory is lost unused: 

typedef struct __attribute__ ((__packed__))
{
  uint32_t bl:20;
} block_t;

block_t buffer[30];



b) I define a union about 5 Bytes and two blocks - but handling will be bad, because of the two blocks as an elementary type.

typedef union 
{
  uint8_t  B[5];
  struct __attribute__ ((__packed__))
  {
    uint32_t block0: 20; 
    uint32_t block1: 20; 
  };
} block2_byte5_t;


Machine:   32bit  (small) embedded  CPU (Freescale Coldfire),   processing time low priority / efficient RAM  usage high prio.  

So I hope there is a wise guy helping me .. Thanks to your attention.  
 Tobias  


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]