Перейти к содержанию

Viacheslav Ohinskyi

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Винница

Электроника

  • Стаж в электронике
    Более 20 лет
  • Сфера радиоэлектроники
    Микроконтроллеры
  • Оборудование
    С-112

Достижения Viacheslav Ohinskyi

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Сделал через макрос 1 такт = 13.8 наносекунд, при частоте 72МГц 13.8 * 36 = 500 наносекунд #define NS_500 36U #define DELAY_NS(VAR) for (uint32_t count = DWT->CYCCNT; (DWT->CYCCNT - count) < VAR; __nop())
  2. Здравствуйте Необходимо сделать задержку на несколько тиков в 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 тоже самое значение. Как решить эту проблему? Получается понизить оптимизацию невозможно?
×
×
  • Создать...