реклама на сайте
подробности

 
 
> Нарвался на глючище в ИАРе. Негодую... :-о
Dr.Alex
сообщение Jul 3 2015, 17:59
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



В цикле проверяется значение элемента структуры dev_state.

Как видите, ИАР 7.40 загружает содержимое элемента в R0, потом сравнивает R0 с тройкой (это USBD_STATE_CONFIGURED),
а на следующем цикле прыгает НЕ НА ЗАГРУЗКУ R0 (LDRB.W R0, ...), а сразу на сравнение (CMP R0, #3)!!!

Удивляюсь, что у меня всё остальное вообще работает, с таким-то качеством компилёжки.

Конечно, если снизить оптимизацию или объявить элемент dev_state как volatile, то компилит правильно, но это же не решение! :-о :-о

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SSerge
сообщение Jul 3 2015, 20:19
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Dr.Alex @ Jul 4 2015, 00:59) *
Конечно, если снизить оптимизацию или объявить элемент dev_state как volatile, то компилит правильно, но это же не решение! :-о :-о

Это именно что решение.
Как это ни покажется странным, но компилятор не обязан заново считывать значение переменной, если она не volatile.
Более того, в некоторых случаях, когда значение dev_state точно известно на момент компиляции (например незадолго до того ей присвоили константное знасение и, стало быть, результат сравнения заранее известен), имеет право заоптимизировать всё вплоть до вечного цикла из одной команды перехода.
Это просто ещё один способ выстрелить себе в ногу.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jul 3 2015, 20:37
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(SSerge @ Jul 3 2015, 23:19) *
Это именно что решение.
Как это ни покажется странным, но компилятор не обязан заново считывать значение переменной, если она не volatile.


Вы думаете я не знаю этих банальностей?
Я утверждаю лишь то что компилятор скомпилил бесмысленный код.
Он именно что "не обязан" проверять, но только в том случае если это даёт выигрыш.
А в данном случае он не сэкономил НИ БАЙТА и НИ ТАКТА.
Он ПЫТАЛСЯ проверять, но неправильно. Стоило прыгнуть на 1 инструкцию выше (чтение из памяти), и всё было бы логично.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 3 2015, 20:46
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Dr.Alex @ Jul 3 2015, 23:37) *
Он именно что "не обязан" проверять, но только в том случае если это даёт выигрыш.
А в данном случае он не сэкономил НИ БАЙТА и НИ ТАКТА.
Он ПЫТАЛСЯ проверять, но неправильно. Стоило прыгнуть на 1 инструкцию выше (чтение из памяти), и всё было бы логично.

Спасибо, поржал. Жаловаться на компилятор за то, что он не сэкономил байт в ошибочном коде - это пять :-)
Если приведёте пример, где проверка не-volatile переменной в бесконечном цикле - это не ошибочный код, тогда, возможно, передумаю.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jul 3 2015, 20:54
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(scifi @ Jul 3 2015, 23:46) *
Спасибо, поржал. Жаловаться на компилятор за то, что он не сэкономил байт в ошибочном коде - это пять :-)
Если приведёте пример, где проверка не-volatile переменной в бесконечном цикле - это не ошибочный код, тогда, возможно, передумаю.


Я бы привёл, а толку? Вы ж читать не умеете. Где я жаловался на несэкономленный байт?
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jul 3 2015, 21:03
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Поскольку начинает происходить то же что и всегда - в тему набивается хамящая школота, самоутверждающаяся за чужой счёт (не все конечно), то придётся разъяснить на примере (иначе они не понимают), и закрыть тему.

Идёте в магаз и покупаете новый пульт для ящика.
А он без батареек. Ну и ладно, имеют право.
Но вместо батареек в пульте добротно сделанные муляжи из металла, тяжёленькие.
Я спрашиваю: нафига? Они же дороже плохоньких батареек.
А мне отвечают: как почему без батареек? Право имеем!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dr.Alex   Нарвался на глючище в ИАРе. Негодую... :-о   Jul 3 2015, 17:59
- - krux   ЦитатаВ цикле проверяется значение элемента структ...   Jul 3 2015, 18:09
|- - Dr.Alex   Цитата(krux @ Jul 3 2015, 21:09) или вы в...   Jul 3 2015, 18:13
- - Golikov A.   Цитатаонечно, если снизить оптимизацию или объявит...   Jul 3 2015, 18:13
|- - Dr.Alex   Цитата(Golikov A. @ Jul 3 2015, 21:13) Эт...   Jul 3 2015, 18:16
|- - krux   Цитата(Golikov A. @ Jul 3 2015, 21:13) В ...   Jul 3 2015, 18:20
- - Golikov A.   докторишка как всегда в своем репертуаре, отдохнул...   Jul 3 2015, 18:15
- - Golikov A.   снизойдите скажите ответ, сил нет понять где сглуп...   Jul 3 2015, 18:18
|- - Dr.Alex   Цитата(Golikov A. @ Jul 3 2015, 21:18) сн...   Jul 3 2015, 18:22
|- - alag57   Цитата(Dr.Alex @ Jul 3 2015, 23:22) Если ...   Jul 3 2015, 18:55
||- - Dr.Alex   Цитата(alag57 @ Jul 3 2015, 21:55) Компил...   Jul 3 2015, 18:58
||- - alag57   Цитата(Dr.Alex @ Jul 3 2015, 23:58) :-)))...   Jul 3 2015, 19:01
||- - Dr.Alex   Цитата(alag57 @ Jul 3 2015, 22:01) Да, ле...   Jul 3 2015, 19:53
|- - scifi   Цитата(Dr.Alex @ Jul 3 2015, 21:22) А зде...   Jul 3 2015, 20:25
- - Golikov A.   ЦитатаТо есть, сгенерённый код бессмыслен. Ну тогд...   Jul 3 2015, 18:26
|- - Dr.Alex   Цитата(Golikov A. @ Jul 3 2015, 21:26) Ну...   Jul 3 2015, 18:29
- - Golikov A.   одну ошибку я определенно сегодня сделал....   Jul 3 2015, 18:35
- - Aner   Эти ваши какашки из куба, такого там оч много. Эта...   Jul 3 2015, 20:05
|- - IgorKossak   Цитата(Dr.Alex @ Jul 4 2015, 00:03) Поско...   Jul 4 2015, 08:23
- - scifi   Цитата(Dr.Alex @ Jul 3 2015, 23:54) Где я...   Jul 3 2015, 21:01


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 01:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016