Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Закрытая тема
Опции темы
Непрочитано 25.09.2023, 10:42   #1
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Кривая оптимизация XC16

Здравствуйте.
Есть чип PIC24FV32KA302 и компилятор XC16.

Если не использовать оптимизацию компилятора то код работает идеально, но вот хочется мне пожать немного код поскольку реально заметно что оптимизированный код работает быстрее.

Но вот почему то вышел какой то затык.

вот функция задержки по времени. Сам счетчик времени обновляется по таймеру каждые 10мс.

Код:
volatile unsigned int delta = 0;

void BlockDelay(volatile unsigned int msec) {
    ScreenRefreshTime = ms_counter;
    while (1) {
        delta = ms_counter - ScreenRefreshTime;
        //delta = (EllapsedTime(ScreenRefreshTime));
        if (delta ›= msec) {
            break;
        }
        Nop();
    }
}

В отладчике вижу что переменные имеют адекватные значения но delta всегда получается 0.
Уже добавил volatile но оптимизатор все равно режет как то странно.

Кто нибудь знает как можно договорится с оптимизатором??
Миниатюры:
Нажмите на изображение для увеличения
Название: qwe.png
Просмотров: 0
Размер:	13.6 Кб
ID:	178321  
Реклама:
worldmasters вне форума  
Непрочитано 25.09.2023, 11:22   #2
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,945 раз(а) в 5,992 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Кривая оптимизация XC16

Сообщение от worldmasters Посмотреть сообщение
ScreenRefreshTime = ms_counter;
...
delta = ms_counter - ScreenRefreshTime;
Ну. Ноль. Что тут странного?
Возможно, что-то с областями видимости. Попробуйте обойти этот момент.

Сообщение от worldmasters Посмотреть сообщение
(volatile unsigned int msec)
Какой смысл в таком объявлении?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 25.09.2023 в 11:28.
akegor вне форума  
Непрочитано 25.09.2023, 12:03   #3
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Кривая оптимизация XC16

Сообщение от akegor Посмотреть сообщение
Возможно, что-то с областями видимости. Попробуйте обойти этот момент.
Как обойти то?? объявления перенести?


Сообщение от akegor Посмотреть сообщение
Какой смысл в таком объявлении?
Это уже в порядке бреда. Где то прочитал что такие переменные оптимизатор не трогает.

Сообщение от akegor Посмотреть сообщение
Ноль. Что тут странного?
750-480 = 0

Действительно чего тут странного.
worldmasters вне форума  
Непрочитано 25.09.2023, 12:28   #4
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,945 раз(а) в 5,992 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Кривая оптимизация XC16

Сообщение от worldmasters Посмотреть сообщение
750-480 = 0
Ну да, только это если нет косяка с "областью видимости".
Не видно объявления ms_counter.
Сообщение от worldmasters Посмотреть сообщение
Как обойти то??
Как вариант, сделайте
Сообщение от worldmasters Посмотреть сообщение
ScreenRefreshTime = ms_counter;
через промежуточную глобальную переменную.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 25.09.2023, 14:23   #5
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,549
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Кривая оптимизация XC16

Сообщение от worldmasters Посмотреть сообщение
как можно договорится с оптимизатором
Никаких кривых оптимизаций, всё по правилам.

ms_counter в цикле не изменяется, поэтому компилятор вправе оптимизировать постоянное чтение этой переменной. Отладчик же читает реальное значение. Чтобы показать компилятору, что переменная может изменяться извне служит директива volatile.
Остальные "volatile" в приведённом куске кода не нужны.
AJScorp вне форума  
Сказали "Спасибо" AJScorp
worldmasters (25.09.2023)
Непрочитано 25.09.2023, 15:44   #6
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Кривая оптимизация XC16

AJScorp
Заработало. Спасибо ))

Последний раз редактировалось mike-y-k; 25.09.2023 в 17:55. Причина: 7.15
worldmasters вне форума  
Непрочитано 25.09.2023, 15:52   #7
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,945 раз(а) в 5,992 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Кривая оптимизация XC16

Сообщение от worldmasters Посмотреть сообщение
Заработало
worldmasters, при параноидальной валотилизации незаволотилить ms_counter...
А ведь намякивал
Сообщение от akegor Посмотреть сообщение
Не видно объявления ms_counter.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 25.09.2023, 15:59   #8
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Кривая оптимизация XC16

Сообщение от akegor Посмотреть сообщение
worldmasters, при параноидальной валотилизации незаволотилить ms_counter...
ну бывает, че.. )))
worldmasters вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MPlab xc16 настройка осцилятора Dtolok PIC 4 16.10.2015 11:01
Что за оптимизация такая в IAR? Или ошибка компиляции? Arxi Микроконтроллеры, АЦП, память и т.д 12 09.08.2011 13:35
Кривая генерация шим putmannn Электроника - это просто 28 11.02.2011 21:27
Оптимизация кода для термореле neid_nnov Микроконтроллеры, АЦП, память и т.д 10 27.10.2010 17:35
Оптимизация в WinAVR && GCC igor-k Микроконтроллеры, АЦП, память и т.д 1 30.11.2009 17:37


Часовой пояс GMT +4, время: 02:07.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot