25.09.2023, 10:42
|
#1
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Кривая оптимизация 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 но оптимизатор все равно режет как то странно.
Кто нибудь знает как можно договорится с оптимизатором??
|
|
|
|
25.09.2023, 11:22
|
#2
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,945 раз(а) в 5,992 сообщении(ях)
|
Re: Кривая оптимизация XC16
Сообщение от worldmasters
|
ScreenRefreshTime = ms_counter;
...
delta = ms_counter - ScreenRefreshTime;
|
Ну. Ноль. Что тут странного?
Возможно, что-то с областями видимости. Попробуйте обойти этот момент.
Сообщение от worldmasters
|
(volatile unsigned int msec)
|
Какой смысл в таком объявлении?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 25.09.2023 в 11:28.
|
|
|
|
25.09.2023, 12:03
|
#3
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Кривая оптимизация XC16
Сообщение от akegor
|
Возможно, что-то с областями видимости. Попробуйте обойти этот момент.
|
Как обойти то?? объявления перенести?
Сообщение от akegor
|
Какой смысл в таком объявлении?
|
Это уже в порядке бреда. Где то прочитал что такие переменные оптимизатор не трогает.
Сообщение от akegor
|
Ноль. Что тут странного?
|
750-480 = 0
Действительно чего тут странного.
|
|
|
|
25.09.2023, 12:28
|
#4
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,945 раз(а) в 5,992 сообщении(ях)
|
Re: Кривая оптимизация XC16
Сообщение от worldmasters
|
750-480 = 0
|
Ну да, только это если нет косяка с "областью видимости".
Не видно объявления ms_counter.
Сообщение от worldmasters
|
Как обойти то??
|
Как вариант, сделайте
Сообщение от worldmasters
|
ScreenRefreshTime = ms_counter;
|
через промежуточную глобальную переменную.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
25.09.2023, 14:23
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,549
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Кривая оптимизация XC16
Сообщение от worldmasters
|
как можно договорится с оптимизатором
|
Никаких кривых оптимизаций, всё по правилам.
ms_counter в цикле не изменяется, поэтому компилятор вправе оптимизировать постоянное чтение этой переменной. Отладчик же читает реальное значение. Чтобы показать компилятору, что переменная может изменяться извне служит директива volatile.
Остальные "volatile" в приведённом куске кода не нужны.
|
|
|
Сказали "Спасибо" AJScorp
|
|
|
25.09.2023, 15:44
|
#6
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Кривая оптимизация XC16
AJScorp
Заработало. Спасибо ))
Последний раз редактировалось mike-y-k; 25.09.2023 в 17:55.
Причина: 7.15
|
|
|
|
25.09.2023, 15:52
|
#7
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,121
Сказал спасибо: 2,569
Сказали Спасибо 11,945 раз(а) в 5,992 сообщении(ях)
|
Re: Кривая оптимизация XC16
Сообщение от worldmasters
|
Заработало
|
worldmasters, при параноидальной валотилизации незаволотилить ms_counter...
А ведь намякивал
Сообщение от akegor
|
Не видно объявления ms_counter.
|
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
25.09.2023, 15:59
|
#8
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: Кривая оптимизация XC16
Сообщение от akegor
|
worldmasters, при параноидальной валотилизации незаволотилить ms_counter...
|
ну бывает, че.. )))
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:07.
|
|