Код
......
{
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; //
}
.....
{
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--;
}
}
{
while(Del)
{
Del--;
}
}
t1 и t2 - параметры задающие длительность импульсов и паузы между ними, передаются в МК через vcp .
Когда откомпилировал программу и запустил её, по осциллографу увидел, что импульсы РАЗНОЙ длительности, т.е компилятор что-то добавил в формирование импульса на Pin_10. Попытался изменить уровень оптимизации с О3 на О0 - не помогло. Решил попробовать задать длительность первого импульса по другому:
Код
{
GPIOD->BSRRH =GPIO_Pin_10; //
__NOP();
__NOP();
GPIOD->BSRRL =GPIO_Pin_10; //
}
GPIOD->BSRRH =GPIO_Pin_10; //
__NOP();
__NOP();
GPIOD->BSRRL =GPIO_Pin_10; //
}
при этом компилятор вообще стал игнорировать функцию Delay . В чём засада?
И дополнительно вопрос - можно ли выбирать степень оптимизации для отдельного модуля ( например, у всего проекта О3, а у конкретного модуля - О0) и если можно, то как? Просто при изменении уровня оптимизации происходит перекомпиляция всего проекта, ждать долго.