Здравствуйте
Есть такая проблема с компиляцией проекта под cortex-m3 (stm32l). Если компилировать с уровнем оптимизации medium все компилируется верно.
Но если выставить оптимизацию на high balanced или speed даже если выключить все доступные оптимизации которые доступны при уровне high проект компилируется неверно.
Пробовал на IAR ARM 7.1.3 и 7.2.1
Пример функции которая идет в комплекте драйверов ST
Код
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry)
{
....
/* Select STOP mode entry --------------------------------------------------*/
if(PWR_STOPEntry == PWR_SLEEPEntry_WFI)
{
/* Request Wait For Interrupt */
__WFI();
}
else
{
/* Request Wait For Event */
__WFE();
}
}
PWR_SLEEPEntry_WFI = 1;
PWR_STOPEntry передается 1;
И условие IF ELSE которые по логике должны быть взаимоисключающими выполняются последовательно, т.е. сначала __WFI(); и потом сразу __WFE();
Это видно в отладчике и дизассемблере эти функции идут подряд.
Сообщение отредактировал IgorKossak - May 27 2014, 15:02
Причина редактирования: пользуйтесь тэгами