Hi, I'm an mixing assembly with C code using Keil uV 4.6 When I have optimization Level 3 (-O3) turned on, the compiler skips alot of assembly function memory reads & writes. I need every line to be executed for this particular function.
__asm { MOV r1,#0x0041000 MOV r2,#0x0040000 ... }
I have tried intrinsic commands like __nop(), __force_store(), __schedule_barrier, etc, and have tried to make variables volatile. I know i must be missing something... Any suggestions
Thanks for the great suggestions. #pragma O0 (letter O, zero) did fix it.
I would like to learn how to do an separate asm function call. I have been doing a little searching and haven't found any good examples how to call a function in a separate asm file from C. I've looked in the dissassembly and its pretty easy to pass the variable back through R0. I just don't know what the file header or other steps to take to make it work.
Thanks, Ben
Using -O0 may work "by accident" with your current code and current compiler, but it's not guaranteed to leave inline asm alone.
There are examples of mixing C and asm in the documentation: infocenter.arm.com/.../Babjhjbd.html