0800010c : volatile unsigned int oneMsTick=0; void TIM3_IRQHandler(void) { //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; 800010c: f44f 6300 mov.w r3, #2048 ; 0x800 8000110: f2c4 0301 movt r3, #16385 ; 0x4001 8000114: 2108 movs r1, #8 GPIOA->BRR = GPIO_Pin_3; TimeTick++; 8000116: f240 0214 movw r2, #20 volatile unsigned int oneMsTick=0; void TIM3_IRQHandler(void) { //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; 800011a: 6119 str r1, [r3, #16] GPIOA->BRR = GPIO_Pin_3; TimeTick++; 800011c: f2c2 0200 movt r2, #8192 ; 0x2000 void TIM3_IRQHandler(void) { //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; GPIOA->BRR = GPIO_Pin_3; 8000120: 6159 str r1, [r3, #20] TimeTick++; 8000122: 6811 ldr r1, [r2, #0] oneMsTick++; 8000124: f240 0318 movw r3, #24 { //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; GPIOA->BRR = GPIO_Pin_3; TimeTick++; 8000128: 3101 adds r1, #1 800012a: 6011 str r1, [r2, #0] oneMsTick++; 800012c: f2c2 0300 movt r3, #8192 ; 0x2000 8000130: 6819 ldr r1, [r3, #0] TIM3->SR = (uint16_t)~TIM_IT_Update; 8000132: f44f 6280 mov.w r2, #1024 ; 0x400 //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; GPIOA->BRR = GPIO_Pin_3; TimeTick++; oneMsTick++; 8000136: 3101 adds r1, #1 8000138: 6019 str r1, [r3, #0] TIM3->SR = (uint16_t)~TIM_IT_Update; 800013a: f2c4 0200 movt r2, #16384 ; 0x4000 800013e: f64f 73fe movw r3, #65534 ; 0xfffe 8000142: 8213 strh r3, [r2, #16] //statement with no effect (but on volatile variable , so it cannot be optimized out completely) //does not change target size, but changes behaviour for optimization O3 (not for O0) --> gcc optimization bug?? //TimeTick; } 8000144: 4770 bx lr 8000146: bf00 nop