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

 
 
 
Reply to this topicStart new topic
> IAR прикалываеться
dimitryl
сообщение Jun 21 2007, 08:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 13-11-05
Пользователь №: 10 786



IAR Atmel AVR C/C++ Compiler V4.21A/W32, Evaluation Version

btTemp далее не используется.
компилировалось с ключом -s2 (Best debug support)

листинг:

1)
Код
129             Uart1_context.bTxCount=  btTemp + 1;
   \   00000084   2F08               MOV     R16, R24
   \   00000086   9503               INC     R16
   \   00000088   9300....           STS     (Uart1_context + 2), R16


2)
Код
129             Uart1_context.bTxCount=   ++btTemp;
   \   00000084   9583               INC     R24
   \   00000086   2F08               MOV     R16, R24
   \   00000088   2F80               MOV     R24, R16
   \   0000008A   9300....           STS     (Uart1_context + 2), R16
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 21 2007, 08:08
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Ну и к чему это сообщение?
Вы знаете почему это так или как этого избежать или как это может помешать работе программы, или просто поприкалываться решили?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 21 2007, 08:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А в чем тут прикол?
В данном случае операция btTemp + 1 аналогична btTemp++, т.е. постинкременту.
Во втором же случае использован прединкремент. Отсюда и разница в исходнике. Никакого прикола нет.
Go to the top of the page
 
+Quote Post
dimitryl
сообщение Jun 21 2007, 10:32
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 13-11-05
Пользователь №: 10 786



В этом конкретном примере не совсем правильная работа с регистровыми переменными, приводящая к появлению лишней команды копирования из регистра в регистр.
Ну а в виде
MOV R16, R24
MOV R24, R16
по моему заставляет улыбнуться.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 21 2007, 12:45
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(dimitryl @ Jun 21 2007, 11:01) *
btTemp далее не используется.

Что такое "далее не используется"? Программа линейная и потом останавливается? Переменная где определена?
1) Было изменено значение переменной и вполне естественно, что компилятор сохраняет ее значение. На каком основании он ее должен кинуть? Только если переменная определена внутри функции.
2) Даже если она так определена, то Вы, как программист, зачем ее модифицируете, если потом не используете? Хотите, чтобы компилятор был умнее Вас? smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

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

 


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


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