Are there any C compiler which supports the unaligned data access of the Cortex-M3 core? Right now I am using the Keil RVMDK. It seems that I have to use the __packed keyword for each variable, structure... to get unaligned data access but how do I get unaligned data access for a entire project? Are there better solutions than using the __packed keyword?
Why do you want unaligned data to be supported on all variables? If the data elements in data structures are arranged carefully, you won't be wasting memory space anyway. Joseph
The following data accesses always generate an alignment fault: • Non halfword-aligned LDREXH and STREXH • Non word-aligned LDREX and STREX • Non word-aligned LDRD, LDM{IA}, LDMDB, POP, and LDC • Non word-aligned STRD, STM{IA}, STMDB, PUSH, and STC. The following data accesses support unaligned addressing, and only generate alignment faults when the CCR.UNALIGN_TRP bit is set (see The System Control Block (SCB) on page B2-7): • Non halfword-aligned LDRH, LDRHT, LDRSH, LDRSHT, STRH and STRHT • Non halfword-aligned TBH • Non word-aligned LDR{T} and STR{T}. Cheers Spen
FWIW, LDM/STM do not work unless word aligned. I suspose that its someplace in some doc file. 'Twaz a pain to rewrite to assure aligned load/store multiple.