Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Оптимизация программы для NIOS II
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Artemvvv
Имеется простой кусок кода:
Код
while (1)
{
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, count & 0x01);
    delay = 0;
    while (delay < 10000000) {
        delay++;
    }        
    count++;
}

По идее должно меняться значение count через некоторую задержку, создаваемую выполнением цикла. Когда выбрана опция оптимизации Off (оптимизация выключена), то программа работает как и должна. Если включить любой тип отпимизации - Level1,2,3, Size, то компилятор выкашивает из программы цикл, типа его результат нигде не используется:
Код
delay = 0;
while (delay < 10000000) {
    delay++;
}

Получается, что в каждой итерации цикла count выводится в порт и увеличивается на 1, без задержки.
Вопрос в том, как правильно сделать программную задержку при включенной оптимизации, чтобы компилятор ее не удалил?
andrew_b
Компилятор видит, что delay нигде дальше не используется, поэтому и выкидывает цикл. Либо используйте новое значение переменной, либо объявите переменную delay как volatile.
Либо делайте задержку по-другому. Таймером, например.
Artemvvv
Цитата(andrew_b @ Jul 8 2011, 13:58) *
Компилятор видит, что delay нигде дальше не используется, поэтому и выкидывает цикл. Либо используйте новое значение переменной, либо объявите переменную delay как volatile.
Либо делайте задержку по-другому. Таймером, например.

Большое спасибо, сделал volatile, теперь при оптимизации цикл остается.
WitFed
Сейчас компиляторы настолько хитрые пошли, что код типа
Код
  delay = 0;
  while (delay < 10000000) delay++;
  count = count + 1 + delay - delay;

Тоже оптимизируют напрочь. Хотя delay как бы используется после вычисления, хотя и сокращается.
А вот это:
Код
  delay = 0;
  while (!(delay & 0x1000)) delay++;
  count = count + 1 + delay - delay;

им еще пока не под силу просчитать, хотя интеллекта примерно столько же требует wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.