arm-none-eabi-gcc C Pointers
arm, assembly, c, disassembly, gcc
Solution
You never change the value of `gpuPointer` and you haven't declared it to point to a `volatile`. So from the compiler's perspective you are overwriting a single memory location (`*gpuPointer`) 768*1024 times, but since you never use the value you are writing into it, the compiler is entitled to optimize by doing a single write at the end of the loop.
Problem
So working with C in the arm-none-eabi-gcc. I have been having an issue with pointers, they don't seem to exists. Perhaps I'm passing the wrong cmds to the compiler. Here is an example. ``` unsigned int * gpuPointer = GetGPU_Pointer(framebufferAddress); unsigned int color = 16; int y = 768; int x = 1024; while(y >= 0) { while(x >= 0) { *gpuPointer = color; color = color + 2; x--; } color++; y--; x = 1024; } ``` and the output from the disassembler. ``` 81c8: ebffffc3 bl 80dc <GetGPU_Pointer> 81cc: e3a0c010 mov ip, #16 ; 0x10 81d0: e28c3b02 add r3, ip, #2048 ; 0x800 81d4: e2833002 add r3, r3, #2 ; 0x2 81d8: e1a03803 lsl r3, r3, #16 81dc: e1a01823 lsr r1, r3, #16 81e0: e1a0300c mov r3, ip 81e4: e1a02003 mov r2, r3 81e8: e2833002 add r3, r3, #2 ; 0x2 81ec: e1a03803 lsl r3, r3, #16 81f0: e1a03823 lsr r3, r3, #16 81f4: e1530001 cmp r3, r1 81f8: 1afffff9 bne 81e4 <setup_framebuffer+0x5c> ``` Shouldn't there be a str cmd around 81e4? To add further the GetGPU_Pointer is coming from an assembler file but there is a declaration as so. ``` extern unsigned int * GetGPU_Pointer(unsigned int framebufferAddress); ``` My gut feeling is its something absurdly simple but I'm missing it.