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

 
 
> Эффективность кода WinAVR
777777
сообщение Apr 21 2008, 07:06
Сообщение #1


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Она действительно такая никудышняя или можно повысить какими-то ключами?
Вот пример:
Код
40:           if(chng != 0)
+00000074:   8189        LDD     R24,Y+1          Load indirect with displacement
+00000075:   2388        TST     R24              Test for Zero or Minus
+00000076:   F179        BREQ    PC+0x30          Branch if equal
42:               if(chng & (1<<IN1_INC))
+00000077:   8189        LDD     R24,Y+1          Load indirect with displacement
               ...

В следующей строке компилятор уже не помнит, что переменная уже лежит в R24 и грузит ее заново. Такой тупой компиляции я никак не ожидал, может надо где-то включить оптимизацию? Да и хелпа я что-то нигде не найду sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mdmitry
сообщение Apr 21 2008, 14:21
Сообщение #2


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



После инсталляции:
C:\WinAVR-20071221\doc\gcc\HTML\gcc-4.2.2 и посмотреть ... smile.gif


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 21 2008, 14:43
Сообщение #3


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Я в шоке. Какой код можно сгенерировать на такую строку:
Код
if(v & F0BIT)

Вот результат:
Код
               if(v & F0BIT)
+0000003B:   2F24        MOV     R18,R20          Copy register
+0000003C:   2733        CLR     R19              Clear Register
+0000003D:   2F93        MOV     R25,R19          Copy register
+0000003E:   2F82        MOV     R24,R18          Copy register
+0000003F:   E063        LDI     R22,0x03         Load immediate
+00000040:   9596        LSR     R25              Logical shift right
+00000041:   9587        ROR     R24              Rotate right through carry
+00000042:   956A        DEC     R22              Decrement
+00000043:   F7E1        BRNE    PC-0x03          Branch if not equal
+00000044:   7081        ANDI    R24,0x01         Logical AND with immediate
+00000045:   7090        ANDI    R25,0x00         Logical AND with immediate
+00000046:   2388        TST     R24              Test for Zero or Minus
+00000047:   F011        BREQ    PC+0x03          Branch if equal

А все потому, что константа F0BIT описана следующим образом:
Код
const int F0BIT    = (1<<F0);    
const int F1BIT    = (1<<F1);

И вот вместо того, чтобы на этапе компиляции вычислить это выражение и сделать логическое И с переменной, компилятор решает сдвинуть переменную на F0 битов! Особенно порадовала строка ANDI R25,0x00. Впрочем, CLR R19 с последующей MOV R25,R19 тоже ничего...

А я уж было обрадовался что компилятор заработал... sad.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 21 2008, 15:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(777777 @ Apr 21 2008, 18:43) *
А все потому, что константа F0BIT описана следующим образом:
Код
const int F0BIT    = (1<<F0);    
const int F1BIT    = (1<<F1);

А зачем было описывать константу столь затейливым образом? Компилятор не работает, как же.
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 21 2008, 15:42
Сообщение #5


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(aaarrr @ Apr 21 2008, 19:06) *
А зачем было описывать константу столь затейливым образом? Компилятор не работает, как же.


Тот же результат наблюдается если написать const int F0BIT = 8;
И ничего затейливого в этом нет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 777777   Эффективность кода WinAVR   Apr 21 2008, 07:06
- - Kuzmi4   2 777777 - какие ключи использовали ?? .. там в пр...   Apr 21 2008, 07:07
|- - 777777   Цитата(Kuzmi4 @ Apr 21 2008, 11:07) 2 777...   Apr 21 2008, 07:12
||- - Палыч   -O0 - Do not optimize Ключи описаны в файле gcc.p...   Apr 21 2008, 07:18
||- - Obama   Цитата(Палыч @ Apr 21 2008, 11:18) -O0 - ...   Apr 21 2008, 09:48
|- - 777777   Цитата(Kuzmi4 @ Apr 21 2008, 11:07) там в...   Apr 21 2008, 07:21
|- - MrYuran   Цитата(777777 @ Apr 21 2008, 11:21) Класс...   Apr 21 2008, 07:28
|- - Палыч   Цитата(MrYuran @ Apr 21 2008, 10:28) надо...   Apr 21 2008, 08:06
|- - 777777   Цитата(MrYuran @ Apr 21 2008, 11:28) надо...   Apr 21 2008, 08:54
|- - Палыч   Цитата(777777 @ Apr 21 2008, 11:54) Э, эт...   Apr 21 2008, 09:03
|- - mse   Цитата(Палыч @ Apr 21 2008, 13:03) И, зач...   Apr 21 2008, 09:24
- - Палыч   gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc.pdf P.S. Све...   Apr 21 2008, 09:59
|- - singlskv   Цитата(777777 @ Apr 21 2008, 19:42) Тот ж...   Apr 21 2008, 15:46
|- - Палыч   Цитата(777777 @ Apr 21 2008, 18:42) Тот ж...   Apr 21 2008, 15:48
|- - 777777   Цитата(Палыч @ Apr 21 2008, 19:48) Что, т...   Apr 21 2008, 16:44
- - Qwertty   GCC 3.4.6 Код#define F0 5 const int F0BIT = (1...   Apr 21 2008, 17:11
|- - 777777   Цитата(Qwertty @ Apr 21 2008, 21:11) GCC ...   Apr 22 2008, 04:31
|- - Qwertty   Цитата(777777 @ Apr 22 2008, 08:31) У мен...   Apr 22 2008, 07:05
|- - 777777   Цитата(Qwertty @ Apr 22 2008, 11:05) Нико...   Apr 22 2008, 07:30
|- - IgorKossak   Цитата(777777 @ Apr 22 2008, 10:30) Правд...   Apr 22 2008, 07:39
- - Aesthete Animus   Вопрос конечно совсем не в тему... Но не скажите к...   Apr 21 2008, 17:36
|- - Qwertty   Цитата(Aesthete Animus @ Apr 21 2008, 21...   Apr 21 2008, 17:50
|- - Aesthete Animus   Цитата(Qwertty @ Apr 21 2008, 21:50) Я за...   Apr 21 2008, 18:24
- - west329_   извеняюсь за оффтоп, что ето значит volatile, встр...   Apr 22 2008, 07:17


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

 


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


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