Yahoo Groups archive

Lpc2000

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

Message

Re: [lpc2000] Non-aligned access?

2005-11-08 by Charles Manning

On Tuesday 08 November 2005 14:40, Tom Walsh wrote:
> ee_gary wrote:
> >Hello,
> >
> >I'm having a problem where my code goes into the bushes after ~10
> >seconds.  Running it in the simulator results in a "Non-aligned
> >Access" error, ARM Instruction at 00000200H, Memory Access at
> >40000241H.  Any idea what that means?  Simple code, just an interrupt
> >driven timer and interrupt driven SPI…
>

What instruction was this accessing?

The following things can give you non-aligned accesses:

1) Trying to read a U32 on a non-4-byte boundary or a U16 on a non-2byte 
boundary. This might raise a data abort.

2) Trying to execute an ARM instruction at a non-4-byte location or a thumb 
instruction at a non-2-byte location. This might raise a prefetch abort.



> You can run into this when mixing Thumb with ARM code. When interrupt
> routines are entered, the processor is in ARM mode, either write your
> handlers in ARM or switch to THUMB mode, process the interrupt, then
> exit THUMB mode and return from interrupt.

Yes, this is possible since thumb addresses are marked by setting the least 
significant bit.  If you try executing the address by using a regular branch 
or bl then this will break. You need to use a bx.

>
> FWIW, Thumb, and thumb-internetworking, is too much trouble to deal
> with, I run strictly ARM mode.

To each their own, but I strongly disagree. I use thumb and interworking a 
lot. gcc support for this is great.

I always write all my assembly with interworking (ie using bx) regardless.

For an example you might look at the example stuff I posted on the AT91SAM7 
group.

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.