0800010c : volatile unsigned int oneMsTick=0; void TIM3_IRQHandler(void) { //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; 800010c: f44f 6200 mov.w r2, #2048 ; 0x800 8000110: f2c4 0201 movt r2, #16385 ; 0x4001 8000114: 2108 movs r1, #8 GPIOA->BRR = GPIO_Pin_3; TimeTick++; 8000116: f240 0314 movw r3, #20 volatile unsigned int oneMsTick=0; void TIM3_IRQHandler(void) { //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; 800011a: 6111 str r1, [r2, #16] GPIOA->BRR = GPIO_Pin_3; TimeTick++; 800011c: f2c2 0300 movt r3, #8192 ; 0x2000 void TIM3_IRQHandler(void) { //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; GPIOA->BRR = GPIO_Pin_3; 8000120: 6151 str r1, [r2, #20] TimeTick++; 8000122: 6819 ldr r1, [r3, #0] oneMsTick++; 8000124: f240 0218 movw r2, #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: 6019 str r1, [r3, #0] oneMsTick++; 800012c: f2c2 0200 movt r2, #8192 ; 0x2000 8000130: 6810 ldr r0, [r2, #0] TIM3->SR = (uint16_t)~TIM_IT_Update; 8000132: f44f 6180 mov.w r1, #1024 ; 0x400 //debugging: one high-pulse on GPIO A3 GPIOA->BSRR = GPIO_Pin_3; GPIOA->BRR = GPIO_Pin_3; TimeTick++; oneMsTick++; 8000136: 3001 adds r0, #1 8000138: 6010 str r0, [r2, #0] TIM3->SR = (uint16_t)~TIM_IT_Update; 800013a: f2c4 0100 movt r1, #16384 ; 0x4000 800013e: f64f 72fe movw r2, #65534 ; 0xfffe 8000142: 820a strh r2, [r1, #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: 681b ldr r3, [r3, #0] } 8000146: 4770 bx lr