Yahoo Groups archive

Lpc2000

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

Message

Re: [lpc2000] Un-aligned data access on ARM7 core

2005-12-16 by Tom Walsh

Marko Panger wrote:

>Hello all,
>
>I have a general programming question. Me and my co-workers had an 
>discussion about data alignment and non-aligned accesses. Please 
>consider the following situation where an un-aligned access was made 
>resulting in wrong value.
>
>char buf[5] = {1,2,3,4,5};     
>
>unsigned short tmp;
>
>tmp = *(unsigned short*)&buf[1];       /* &buf[1] is on a odd address
>
>My co-workers expected that tmp will contain the value0x0203, but the 
>value was 0x02. I understand that, because ARM7 core does not support 
>un-aligned accesses and the compiler was forced to use a word access on 
>a odd address. This code was ported from an 8-bit machine where it was, 
>off course, working. My question is if all 32-bit devices would have the 
>same problem with this code and why when we tested the same situation on 
>a PC using Borland Builder compiler it was working as my co-workers 
>expected. Is this a CPU(+cpu bus) issue or it is also compiler dependent
>
X86 is about the only 32bit processor that I know of that will access 
longs / words on uneven boundries.  Almost all other families of 32bit 
processors have the limitation of accessing longs / words on their 
respective boundries.  The X86 is the oddball of the computer world.

Regards,

TomW

>.
>
>Although I thing this is bad programming practice and it calls for 
>errors I am asking if it is possible to enable a warning for such 
>situations.
>
>Regards,
>Marko
>
>
>
>
>
> 
>Yahoo! Groups Links
>
>
>
> 
>
>
>  
>


-- 
Tom Walsh - WN3L - Embedded Systems Consultant
http://openhardware.net, http://cyberiansoftware.com
"Windows? No thanks, I have work to do..."
----------------------------------------------------

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.