Yahoo Groups archive

Lpc2000

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

Message

Un-aligned data access on ARM7 core

2005-12-16 by Marko Panger

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.

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

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.