Hi everyone

 

While working with low-power modes on STM32L1, we found a bug (?) in gcc
with -Os optimization - somehow it "optimizes" rather simple
periph_clk_en(bus_t bus, uint32_t mask) function in
cpu/stm32_common/cpu_common.c, so using it right after waking up from STOP
mode results in Hard Fault (for some reasons, in our firmware it is called
from clk_init(), and clk_init() is called right after __WFI() in LPM code,
as we need to switch MCU from 2 MHz MSI clock back to our default clock
settings).

 

Didn't dig it any deeper yet, but just for everyone to know:

 

-void periph_clk_en(bus_t bus, uint32_t mask)

+void __attribute__((optimize("O3"))) periph_clk_en(bus_t bus, uint32_t
mask)

 

fixes it.

 

--

Oleg Artamonov

+7 (916) 631-34-90

www.unwds.com

 

_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel

Reply via email to