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

 
 
2 страниц V   1 2 >  
Closed TopicStart new topic
> Нарвался на глючище в ИАРе. Негодую... :-о
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
krux
сообщение Jul 3 2015, 18:09
Сообщение #2


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



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

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

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

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



А что вам говорит техподдержка IAR ?

или вы в очередной раз хотите чтобы ваши проблемы с платным компилятором решал "почтальон Печкин"?


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 18:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

В смысле?!!!!

объявить переменную изменчивой, для того чтобы компилятор каждый раз грузил ее значение заново не решение? А нафига тогда нужно такое объявление иначеsm.gif?


Цитата
А что вам говорит техподдержка IAR ?

Это шутка?
int i = 0;
while(i != 5); практически все оптимизаторы сделают тут вечный висяк, если даже i где то в прерываниях меняется... для этого volatile и придумано....
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jul 3 2015, 18:13
Сообщение #4


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

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



Цитата(krux @ Jul 3 2015, 21:09) *
или вы в очередной раз хотите чтобы ваши проблемы с платным компилятором решал "почтальон Печкин"?


От вас мне никаких "решений" не требуется, так что можете быть свободны.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 18:15
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



sm.gif докторишка как всегда в своем репертуаре, отдохнул недельку и опять за старое взялсяsm.gif))))
Задает вопрос, а на любой ответ всех обкладываетsm.gif)))....
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jul 3 2015, 18:16
Сообщение #6


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

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



Цитата(Golikov A. @ Jul 3 2015, 21:13) *
Это шутка?
int i = 0;
while(i != 5); практически все оптимизаторы сделают тут вечный висяк, если даже i где то в прерываниях меняется... для этого volatile и придумано....


А если подумать головой?
Даю вам на это несколько минут. Каждый может сглупить, главное вовремя исправиться и признать свою ошибку.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 18:18
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



снизойдите скажите ответ, сил нет понять где сглупил....
Go to the top of the page
 
+Quote Post
krux
сообщение Jul 3 2015, 18:20
Сообщение #8


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата(Golikov A. @ Jul 3 2015, 21:13) *
В смысле?!!!!

объявить переменную изменчивой, для того чтобы компилятор каждый раз грузил ее значение заново не решение? А нафига тогда нужно такое объявление иначеsm.gif?

Это шутка?
int i = 0;
while(i != 5); практически все оптимизаторы сделают тут вечный висяк, если даже i где то в прерываниях меняется... для этого volatile и придумано....

конечно.
ТС живёт в категории "ниасилил".
ему плевать, что он сделал, - висяк, или не очень.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jul 3 2015, 18:22
Сообщение #9


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

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



Цитата(Golikov A. @ Jul 3 2015, 21:18) *
снизойдите скажите ответ, сил нет понять где сглупил....


ОК.

Если компилятор считает, что переменная не меняется, он не станет её проверять в цикле.

А здесь проверяет (цикл есть), но делает это неправильно, потому что после сравнения прыгает не на загрузку регистра, а сразу на его сравнение.
То есть, сгенерённый код бессмыслен.

А нужно ли было объявлять элемент структуры (или всю структуру) как volatile или нет, это уже другой вопрос, и он к писателям STM (как вы могли заметить, это Cube).
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 18:26
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
То есть, сгенерённый код бессмыслен.

Ну тогда я думаю krux прав, вам следует срочно написать об этом в службу поддержки IAR. У них там как раз утро, прям баг репорт сразу пишите.

Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jul 3 2015, 18:29
Сообщение #11


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

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



Цитата(Golikov A. @ Jul 3 2015, 21:26) *
Ну тогда я думаю krux прав, вам следует срочно написать об этом в службу поддержки IAR. У них там как раз утро, прям баг репорт сразу пишите.


Таки я не понял, вы признали свою ошибку?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 18:35
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



одну ошибку я определенно сегодня сделал....
Go to the top of the page
 
+Quote Post
alag57
сообщение Jul 3 2015, 18:55
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(Dr.Alex @ Jul 3 2015, 23:22) *
Если компилятор считает, что переменная не меняется, он не станет её проверять в цикле.

Компилятор проверяет не переменную, а значение регистра R0, который наверняка где-то
объявлен как volatile, как и все регистры IO.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Jul 3 2015, 18:58
Сообщение #14


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

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



Цитата(alag57 @ Jul 3 2015, 21:55) *
Компилятор проверяет не переменную, а значение регистра R0, который наверняка где-то
объявлен как volatile, как и все регистры IO.


:-))))))))))))))))) Вы начинающий, так что не стану ругаться.. :-о
Go to the top of the page
 
+Quote Post
alag57
сообщение Jul 3 2015, 19:01
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(Dr.Alex @ Jul 3 2015, 23:58) *
:-))))))))))))))))) Вы начинающий, так что не стану ругаться.. :-о

Да, лет так 30 программирую, так что до вас мне далеко.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 6th July 2025 - 20:55
Рейтинг@Mail.ru


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