printf("Addr %08x\n",*((unsigned int *)164));*((unsigned int *)164) = 12;asm volatile ("dmb");printf("Addr2 %08x\n",*((unsigned int *)164));printf("Addr3 %08x\n",*((unsigned int *)164));
Addr 0008080dAddr2 0000000cAddr3 0000000c
Addr 0008080dAddr2 0000000cAddr3 0008080d
Addr 0008080d Addr2 0008080d Addr3 0008080d
Addr 0008080dAddr2 0008080dAddr3 0008080d
... 135 0080 1A4F ldr r7, .L12+48 83:sensor_test.c **** printf("%u %i\n",time(), SE); // unrelated 136 .loc 1 83 0 137 0082 8022 movs r2, #128 138 0084 0146 mov r1, r0 139 0086 1A48 ldr r0, .L12+52 140 0088 A047 blx r4 141 .loc 1 96 0 142 008a 3B68 ldr r3, [r7, #0] 143 008c 1948 ldr r0, .L12+56 144 008e 1968 ldr r1, [r3, #0] 145 0090 A047 blx r4 99:sensor_test.c **** *paddr = 12; // HERE 146 .loc 1 99 0 147 0092 3B68 ldr r3, [r7, #0] 148 0094 0C22 movs r2, #12 149 0096 1A60 str r2, [r3, #0] 100:sensor_test.c **** printf("Addr2 %08x\n",*paddr); 150 .loc 1 100 0 151 0098 1968 ldr r1, [r3, #0] 152 009a 1748 ldr r0, .L12+60 153 009c A047 blx r4 101:sensor_test.c **** printf("Addr3 %08x\n",*paddr); ...
196 00ec 00000000 .word .LANCHOR1
r0 = "Addr1.." r1 = [164] BL printf // r0 = "Addr1...", r1 = [164] r1 = 12; [164] = r1; dmb r0 = "Addr2..." BL printf // r0 = "Addr2...", r1 = 12 r0 = "Addr3..." r1 = [164] BL printf // r0 = "Addr3...", r1 = [164]
int* pAddr = (int*)0x8000;
*pAddr = 0x12345678;
printf("%d", *pAddr);
volatile unsigned int*
You may use volatile keyword or compiler optimization level can be changed to O0