Re: Misaligned accesses with MS ARM compiler

From: Michael J. Salamone [eMVP] (mikesa#at#entrek#dot#com)
Date: 04/28/04


Date: Wed, 28 Apr 2004 08:56:15 -0700

Use UNALIGNED in your declararation - which resolves to __unaligned keyword.

-- 
Michael Salamone [eMVP]
Entrek Software, Inc.
www.entrek.com
"Alan Gillespie" <agillesp@qualcomm.com> wrote in message
news:e1TOPcTLEHA.1272@tk2msftngp13.phx.gbl...
>
> Does anyone know of a way to tell the ARM compiler that a WORD or DWORD
pointer addresses an object that is not (or
> might not be) aligned on a 16 or 32 bit boundary?
>
> Effectively what I want to do is this:
>
> BYTE  *pBuffer = malloc(something);
> WORD  *pWord   = (WORD *) &pBuffer[arbitrary_offset];
> DWORD *pDWord  = (DWORD *) &pBuffer[another_arbitrary_offset];
>
> *pWord  = word_value;    /* May be misaligned */
> *pDWord = dword_value;   /* May be misaligned */
>
> I have tried various versions of #pragma pack() without success. I could,
of course, use WORD and DWORD temporaries and
> memcpy() into the array but that is messy. There are other, equally messy,
workarounds involving byte manipulation.
>
> The problem arises because I am porting a large amount of code that was
written for the ARM ADS compiler, which has such
> a facility.
>
> Thanks,
> --Alan Gillespie.
>
>