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

 
 
> при компиляции Keil C игнорирует функцию -что делать?
NikP
сообщение Nov 25 2014, 05:32
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 25-08-05
Пользователь №: 7 944



Для МК STM32F207(на отладочной плате) в микровижене4 на базе примера STM322xG-EVAL написал небольшую программку - формирование импульсов разной длительности с переменным интервалом на соседних выводах. Формируются импульсы в модуле usbd_cdc_vcp.c:
Код
......
    {                
     GPIOD->BSRRH =GPIO_Pin_10;  //
     Delay (t1);
     GPIOD->BSRRL =GPIO_Pin_10;  //
     }

     Delay (t2);

    {                
     GPIOD->BSRRH =GPIO_Pin_15;  //
     Delay (t1);
     GPIOD->BSRRL =GPIO_Pin_15;  //
     }    
.....


Функция Delay ( ) определена в модуле арр.с
Код
void Delay(int Del)
{
  while(Del)
  {
   Del--;    
  }
}

t1 и t2 - параметры задающие длительность импульсов и паузы между ними, передаются в МК через vcp .

Когда откомпилировал программу и запустил её, по осциллографу увидел, что импульсы РАЗНОЙ длительности, т.е компилятор что-то добавил в формирование импульса на Pin_10. Попытался изменить уровень оптимизации с О3 на О0 - не помогло. Решил попробовать задать длительность первого импульса по другому:
Код
{                
GPIOD->BSRRH =GPIO_Pin_10;  //
__NOP();    
__NOP();
GPIOD->BSRRL =GPIO_Pin_10;  //
}


при этом компилятор вообще стал игнорировать функцию Delay . В чём засада?
И дополнительно вопрос - можно ли выбирать степень оптимизации для отдельного модуля ( например, у всего проекта О3, а у конкретного модуля - О0) и если можно, то как? Просто при изменении уровня оптимизации происходит перекомпиляция всего проекта, ждать долго.
Go to the top of the page
 
+Quote Post



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

 


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


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