From mboxrd@z Thu Jan 1 00:00:00 1970 From: Luke Diamand To: jens.ohlund@secrc.abb.se Cc: crossgcc@sourceware.cygnus.com Subject: Re: ARM and padding Date: Tue, 18 Jul 2000 02:38:00 -0000 Message-id: <39742586.345DFC32@virata.com> References: X-SW-Source: 2000-07/msg00096.html Looking at your structure, and noting that the data is not word aligned in the first place, I suspect you may struggle to get this approach to work - won't the ARM end up totally garbling the word access to the int field three quarters of the time? You might prefer to use direct byte reads and manipulations - e.g. inline int getRemainingBytes( unsigned char *bytes ) { unsigned char *ptr = bytes+251; return ptr[0]+(ptr[1]<<8)+(ptr[2]<<16)+(ptr[3]<<24); // or something like that } This also has the virtue that you can cope better if you get endian blues. Just my 2c. jens.ohlund@secrc.abb.se wrote: > > Hi ! > > My problem is the following: > I have an ARM Evaluation Board-1. Rev B. I receive data from a serial line. > this data is placed in a linear buffer, and then i typecast to a struct of some kind. > > This data which i receive I cannot control, and have therefore to work with it as is. > > The structs contains other structs and so on and in the end it's only 16 or 8 bits values a extract. > BUT these values are not aligned, and when I typecast I get the wrong values, since the buffer is "packed". > > How do I tell the compiler that the structs are to be packed ? > > I'm developing on NT4, using cygwin and gcc-2.95.2 (arm-elf-gcc). > > yours > Jens Ohlund > > ------ > Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ > Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com -- Virata http://www.virata.com Cambridge Tel: +44 1223 566919 Fax: +44 1223 566915 ------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sourceware.cygnus.com