|
Нарвался на глючище в ИАРе. Негодую... :-о |
|
|
|
Jul 3 2015, 17:59
|
Профессионал
    
Группа: Свой
Сообщений: 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, то компилит правильно, но это же не решение! :-о :-о
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jul 3 2015, 20:19
|
Профессионал
    
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Jul 3 2015, 20:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(SSerge @ Jul 3 2015, 23:19)  Это именно что решение. Как это ни покажется странным, но компилятор не обязан заново считывать значение переменной, если она не volatile. Вы думаете я не знаю этих банальностей? Я утверждаю лишь то что компилятор скомпилил бесмысленный код. Он именно что "не обязан" проверять, но только в том случае если это даёт выигрыш. А в данном случае он не сэкономил НИ БАЙТА и НИ ТАКТА. Он ПЫТАЛСЯ проверять, но неправильно. Стоило прыгнуть на 1 инструкцию выше (чтение из памяти), и всё было бы логично.
|
|
|
|
|
Jul 3 2015, 20:46
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(Dr.Alex @ Jul 3 2015, 23:37)  Он именно что "не обязан" проверять, но только в том случае если это даёт выигрыш. А в данном случае он не сэкономил НИ БАЙТА и НИ ТАКТА. Он ПЫТАЛСЯ проверять, но неправильно. Стоило прыгнуть на 1 инструкцию выше (чтение из памяти), и всё было бы логично. Спасибо, поржал. Жаловаться на компилятор за то, что он не сэкономил байт в ошибочном коде - это пять :-) Если приведёте пример, где проверка не-volatile переменной в бесконечном цикле - это не ошибочный код, тогда, возможно, передумаю.
|
|
|
|
|
Jul 3 2015, 20:54
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(scifi @ Jul 3 2015, 23:46)  Спасибо, поржал. Жаловаться на компилятор за то, что он не сэкономил байт в ошибочном коде - это пять :-) Если приведёте пример, где проверка не-volatile переменной в бесконечном цикле - это не ошибочный код, тогда, возможно, передумаю. Я бы привёл, а толку? Вы ж читать не умеете. Где я жаловался на несэкономленный байт?
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|