We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
RVMDK v3.00a, Hello World sample for RealView compiler #pragma pack(1) unsigned char Buf[40]; int main (void) { *((short int *)&Buf[0]) = 0x77ff; *((int *)&Buf[2]) = 0x12345678; /* initialize the serial interface */ PINSEL0 = 0x00050000; U1LCR = 0x83; U1DLL = 97; U1LCR = 0x03; printf ("Hello World\n"); printf("%x %x %x %x \n", Buf[0],Buf[1],Buf[2],Buf[3]); } Hello World 78 56 34 12 ------------ The same thing is for CARM compiler 2.4, 2.5 What I am wrong ?
It's the compiler's job (actually the linker's) to make sure that multi-byte objects are properly aligned. But once you start taking addresses of individual bytes and manipulating those addresses, you take the responsibility of maintaining proper alignment on yourself. Few RISC processors operate correctly with misaligned data. Most of them take an exception. The ARM core does not, but external memory hardware might.