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.
Message
Re: [lpc2000] Non-aligned access?
2005-11-08 by Charles Manning
Attachments
- No local attachments were found for this message.