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

 
 
> IAR: вопрос типа "глазам не верю"
ARV
сообщение Jan 20 2012, 07:08
Сообщение #1


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Неужели правда в IAR в результате такого кода
Код
volatile unsigned char v1 = 1;
volatile unsigned char  v2 = 255;
volatile unsigned char  v3 = 2;


if (v1 == (v2+v3))
   PORTB = 0;
else
   PORTB = 1;
в PORTB действительно будет выведен 0? наткнулся на тему на другом форуме - говорят, таки да...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Jan 20 2012, 09:27
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Promotion можно не выполнять (удалять в процессе оптимизации) только тогда, когда observable behavior не изменяется.
Т.е. если результат у «абстрактной машины», которая медленно и печально делает все строго по стандарту, и у реального кода не отличается.
В случае присваивания c3 = c1 + c2; результат (содержимое c3, которое будет из него прочитано следующими операторами) с promotion и без оного не отличается, это известно заранее, поэтому можно и не делать.
В случае if ( а тут вычисления ) — не так. Поэтом делать обязательно.

Ну и на закуску — этот пример на codepad (там можно набирать любой код, жать кнопку submit и смотреть результат компиляции и выполнения)

avr-gcc иногда страдает недовыбрасыванием promotion при оптимизации. Как я недавно где-то писал — пусть лучше так, чем он мне что-то не пос тандарту сделает, а я буду сидеть и думать в чём дело.

Цитата(ARV @ Jan 20 2012, 11:15) *
если выражение справа вычислять отдельно, то
...
в то время как в первом случае promotion делается так же для обоих сторон выражения, но при этом слева к переменной приписывается 0 в старший байт, а справа - старший байт ВЫЧИСЛЯЕТСЯ.
Именно так.
На мой взгляд, IAR перестарался с оптимизацией. Так таки всё нормально? Это кто-то где-то недоразобравшись бочку покатил?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ARV
сообщение Jan 20 2012, 09:29
Сообщение #3


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(ReAl @ Jan 20 2012, 13:17) *
Ну и на закуску — этот пример на codepad (там можно набирать любой код, жать кнопку submit и смотреть результат компиляции и выполнения)
а доверять такой проверке можно ВСЕГДА? то есть там механизм строко по стандарту делает просчет?

кстати, ReAl, если не затруднит, еще один вопрос по стандарту...

что стандарт говорит по поводу порядка вычисления выражения? имеем выражение вида A # B # C # D, где A,B,C и D - любые допустимые выражения, а # - любые допустимые операции/операторы с одинаковым приоритетом. что стандарт говорит по поводу порядка вычисления A,B,C и D? или даже чуть иначе: в выражении
Код
(A # B) == (C # D)
определена очередность выражения слева и справа, а так же что будет "первее" вычислено: A или B (С или D) ?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ARV   IAR: вопрос типа "глазам не верю"   Jan 20 2012, 07:08
- - MrYuran   Цитата(ARV @ Jan 20 2012, 11:08) Неужели ...   Jan 20 2012, 07:12
- - ARV   ну потому, что как бы 1 должно выводиться... WinAV...   Jan 20 2012, 07:13
- - arttab   ff это 255 т.е. максимальное значение. 255 + 1 = 0...   Jan 20 2012, 07:27
- - ARV   а как же быть с тем, что по стандарту языка Си в в...   Jan 20 2012, 07:39
|- - MrYuran   Цитата(ARV @ Jan 20 2012, 11:39) а как же...   Jan 20 2012, 07:48
- - ARV   я не супер-знаток стандарта, и тем более его пункт...   Jan 20 2012, 07:59
|- - MrYuran   Цитата(ARV @ Jan 20 2012, 11:59) я не суп...   Jan 20 2012, 08:14
||- - ARV   Цитата(MrYuran @ Jan 20 2012, 12:14) Ну в...   Jan 20 2012, 08:21
|- - Сергей Борщ   QUOTE (ARV @ Jan 20 2012, 09:59) собствен...   Jan 20 2012, 08:22
||- - Палыч   Цитата(Сергей Борщ @ Jan 20 2012, 12:22) ...   Jan 20 2012, 08:34
|- - Genadi Zawidowski   Цитата(ARV @ Jan 20 2012, 11:59) но точно...   Jan 20 2012, 16:28
- - sparcmaster   Цитата из Шилдта: ЦитатаПреобразования типов в выр...   Jan 20 2012, 08:22
- - ARV   ну, если я рассуждаю верно - это меня сильно успок...   Jan 20 2012, 08:31
- - ARV   ваша цитата четко подтверждает 2 вещи: 1. int prom...   Jan 20 2012, 08:49
|- - Палыч   Цитата(ARV @ Jan 20 2012, 12:49) для вари...   Jan 20 2012, 09:06
- - ARV   лично я совсем не усматриваю того, что вы. если в...   Jan 20 2012, 09:15
|- - Палыч   Цитата(ARV @ Jan 20 2012, 13:15) лично я ...   Jan 20 2012, 09:34
|- - ReAl   Цитата(Палыч @ Jan 20 2012, 11:34) Может ...   Jan 20 2012, 09:48
- - demiurg_spb   OFF:Не понимаю, почему народ не пишет КодPORTB = ...   Jan 20 2012, 09:17
|- - ReAl   Цитата(ARV @ Jan 20 2012, 11:29) а доверя...   Jan 20 2012, 09:59
|- - ARV   Цитата(ReAl @ Jan 20 2012, 13:59) p.s. ид...   Jan 20 2012, 10:06
- - _Ivana   Насколько я ничего не знаю в стандарте С, то тут и...   Jan 20 2012, 09:27
|- - ReAl   Цитата(_Ivana @ Jan 20 2012, 11:27) Наско...   Jan 20 2012, 09:39
- - Idle   предлагаю, наконец, _проверить_ в IAR   Jan 20 2012, 09:38
- - Rst7   QUOTE наткнулся на тему на другом форуме - говорят...   Jan 20 2012, 09:40
|- - ARV   Цитата(Rst7 @ Jan 20 2012, 13:40) А прове...   Jan 20 2012, 09:48
- - sonycman   Прогнал этот код в IAR 6.30.4 для ARM: Код volatil...   Jan 20 2012, 09:41
- - Rst7   QUOTE Прогнал этот код в IAR 6.30.4 для ARM: Ну в...   Jan 20 2012, 09:44
|- - ARV   Цитата(Rst7 @ Jan 20 2012, 13:44) Ну вооб...   Jan 20 2012, 09:51
|- - sonycman   Цитата(Rst7 @ Jan 20 2012, 13:44) Это Вам...   Jan 20 2012, 09:53
- - Rst7   QUOTE я не использую IAR по религиозным принципам ...   Jan 20 2012, 10:06
|- - ARV   Цитата(Rst7 @ Jan 20 2012, 14:06) Тогда, ...   Jan 20 2012, 10:10
|- - sonycman   Цитата(Rst7 @ Jan 20 2012, 14:06) Версия ...   Jan 20 2012, 10:17
- - _Ivana   ReAl, спасибо за наводку, попозже внимательно прош...   Jan 20 2012, 10:06
- - Rst7   QUOTE я надеялся, что Си в любом компиляторе одина...   Jan 20 2012, 10:09
- - Rst7   QUOTE а тут - такое... Какое - такое? Сами Вы про...   Jan 20 2012, 10:13
|- - ARV   Цитата(Rst7 @ Jan 20 2012, 14:13) Какое -...   Jan 20 2012, 10:19
- - zombi   off Хотите чтоб всё работало правильно п...   Jan 20 2012, 23:03
- - _Артём_   Цитата(zombi @ Jan 21 2012, 01:03) off ...   Jan 21 2012, 01:24
- - zombi   Цитата(_Артём_ @ Jan 21 2012, 05:24) ... ...   Jan 21 2012, 07:05


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

 


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


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