Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: Struct/Union alignement problem with Crossworks

2005-09-20 by nourson54

here's a part of code :
typedef struct
{
  uint8_t bsjmpBoot[3];
  char 	bsOEMName[8];
  uint16_t bsBytesPerSec;
  ...
}BootSector;

and a buffer FAT16_buffer[512] where I put data frome SD card in.

for example , if I declare a Bootsector struct at same address of
FAT16_Buffer, and read the first sector of my SDcard, I coul read
directly the field of my struct.

bsjmpBoot is 3 bytes and is OK
BsOEMName is 8 bytes and OK
bsByteBytesPerSec is 2 bytes is not OK because bsOEMBoot+bsOEMName =
11 bytes : 1 bytes is 'filled' between bsOEMName and bsBytesPerSec. 
So data becomes buggy.


with the #pramga pack (x) , Can I 'byte align' each field of my struct ?









--- In lpc2000@yahoogroups.com, "Angel Sanchez" <angelsp@a...> wrote:
> In a similar situation I use:
> 
> #pragma pack (2)
> 
> ...
> Structures, etc
> 
> #pragma pack ()
> 
> and this work (align at word boundaries)
> 
> Regards
> Angel Sanchez
> 
> 
> --- In lpc2000@yahoogroups.com, "nourson54" <nourson54@y...> wrote:
> > Hello,
> > 
> > I'm trying a fat16 library that use an union for storing the
> > bootsector data, and it seems the compiler doesn't handle correctly
> > the width of types in memory. 
> > So I searched some help on crossworks (gcc) compiler and found that 
> I
> > have to use this attribute with my concerned unions :
> >  __attribute__ ((__packed__))
> > 
> > But if the compiler doesn't shout at me when compiling , it seems it
> > has no effect : my union is badly aligned.
> > 
> > Have any idea ?

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.