On 10/1/08, Vladimir Sterjantov <[EMAIL PROTECTED]> wrote: > Processor ARM920T, chip Atmel at91rm9200. > > char c[30]; > unsigned short *pN = &c[1]; > > *pN = 0x1234;
Accesses to shorts on ARM need to be aligned to an even address, and longs to a 4-byte address. Otherwise the access returns (eg, for a 4-byte word pointer) is *(p & ~3) >>> *(p & 3) (where >>> is byte rotate, not bit shift). Or causes a memory fault, if that's how your system is configured. If you don't want to make the code portable and your are running a recent Linux, a fast fix is to echo 2 > /proc/cpu/alignment which should make the kernel trap misaligned accesses and fix them up for you, with a loss in performance of course. The real answer is to fix the code... M