Здравствуйте
Необходимо сделать задержку на несколько тиков в STM32 чтобы не зависела от оптимизации компилятора
Используется Keil 5
void delay_ns_(void)
{
__nop();
__nop();
__nop();
}
Количество тиков определяю с помощью Data Watchpoint and Trace unit
void DWT_init(void)
{
CoreDebug -> DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; // Включаем TRACE
// DWT->CYCCNT = 0; // Обнуляем счетчик
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk ; // Разрешаем DWT счетчик
}
Сделал проверочный код
start = DWT->CYCCNT;
delay_200ns_72();
finish = DWT->CYCCNT;
different = finish - start;
При уровне оптимизации 0
different = 34
При уровне оптимизации 3
different = 17
При использовании pragma http://www.keil.com/support/docs/3704.htm
#pragma push /* Save existing optimization level */
#pragma O0 /* Optimization level now O0 */
void delay_200ns_72(void)
{
__nop();
__nop();
__nop();
}
#pragma pop /* Restore original optimization level */
При уровне оптимизации 3
different = 17
тоже самое значение.
Как решить эту проблему?
Получается понизить оптимизацию невозможно?