реклама на сайте
подробности

 
 
> Неверная компиляция при высокой оптимизации под ARM
veteq
сообщение May 27 2014, 07:30
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-12-06
Пользователь №: 23 160



Здравствуйте

Есть такая проблема с компиляцией проекта под 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
Причина редактирования: пользуйтесь тэгами
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение May 29 2014, 09:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Осталось ещё добавить, что в наборе инструкций ARM (в том, который полный, а не Thumb и проч.) каждая инструкция может быть условной.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01307 секунд с 7
ELECTRONIX ©2004-2016