Hello.I've been having issues with a program of mine that works perfectly fine while running with optimizations enabled but if I disable it, it doesn't seem to get to main, the only exception being running in debug mode. I have set up the pins using MCUXpresso Config Tools v7, and did not modify any of the generated code except for changing the #pragma push and #pragma pop for #pragma clang diagnostic push and #pragma clang diagnostic pop in the MK22FA12.h header file generated by Keil, as the ARM6 compiler seems not to accept the former.
main
#pragma push
#pragma pop
#pragma clang diagnostic push
#pragma clang diagnostic pop
MK22FA12.h
I have also changed the first line in the scatter file for #!armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m4 -xc (was #! armcc -E) and disabled the "Use Memory Layout from Target Dialog" option in the Linker.
#!armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m4 -xc
#! armcc -E
Using debug mode every optimization setting seems to work fine.
Compiler: ARM V6.13.1
Board: MK22FX512AVLL12
SDK: MCUXpresso 2
IDE: Keil uVision5
I've included a simple project that makes one of the leds blink when it gets to main that reproduces the presented problem. I have tested with all optimization levels and the only one that does not work when I run is -O0*.*It does run, in debug mode only.If anyone could help me, I'd be really glad.
Blink.zip
For anyone else that has this problem, this post helped me: https://community.arm.com/support-forums/f/keil-forum/35398/hardcoded-breakpoint-preventing-program-from-runningBasically, the program was getting stuck at SWI breakpoint - BKPT 0xAB inside __ARM_get_argv function. The __ARM_use_no_argv symbol is added automatically on higher optimization levels when compiling with armclang. That is why the program worked when i used -O1 instead of -O0. It also worked in debug mode because it skipped the breakpoint.
Thanks everyone for the help.