Why didn't that work before, then?

Anyway, I suggest lighting the LED only and just once. Recompile your program every time so you can see where execution stops. You can then narrow it down. It's not really reliable to do it like this, because you might not see how many times it blinks and some code may be skipped so that some light/dark switches may never be executed. Even then, I suggest adding a delay, since other code may turn the LED off again (this could also be happening in Startup, for example). Just make a simple loop which does about ten million iterations of nothing, maybe more, maybe less (figure that out yourself) and turn the LED off after the loop finishes. If you're working in ASM, you should do something like
STMFD SP!, {R0,R1}
LDR R0, =0xC0220000
LDR R1, =0x48
STR R1, [R0]
LDR R1, =10000000
loop:
NOP
NOP
SUBS R1, R1, #1
BNE loop
LDR R1, =0x44
STR R1, [R0]
LDMFD SP!, {R0,R1}Response to last post:
1. Code is likely to execute very fast so you might not see the LED turning on or off
2. It's possible that some functions (tasks) don't return until they finish. Maybe it contains some sort of infinite loop to ensure certain things happen
And as I said, the LED is also controlled by the OS so you'll need the delays to be sure.
By the way, I don't know what your code looks like or how experienced you are, so I may be saying things you already know.