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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Эффективность кода 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
Kuzmi4
сообщение Apr 21 2008, 07:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 777777 - какие ключи использовали ??
..
там в принципе ключик -Os - генерит более менее правильный код..
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 21 2008, 07:12
Сообщение #3


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

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



Цитата(Kuzmi4 @ Apr 21 2008, 11:07) *
2 777777 - какие ключи использовали ??


То, что AVR поставил по умолчанию:
-Wall
-gdwarf-2
-O0

Кстати, на означает ли последний ключ отключение оптимизации? Где бы про них почитать, а то хелп только на AVR Studio, а на сишный компилятор нигде не найду sad.gif
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 21 2008, 07:18
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



-O0 - Do not optimize

Ключи описаны в файле gcc.pdf
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 21 2008, 07:21
Сообщение #5


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

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



Цитата(Kuzmi4 @ Apr 21 2008, 11:07) *
там в принципе ключик -Os - генерит более менее правильный код..


Классно, код сразу сокранился почти в 2 раза. С таким уже можно работать. smile.gif
И еще вопрос: а есть ли там bool? Редактор подсвечивает bool, true и false, а компилер на них ругается. Может их тоже включать надо?
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 21 2008, 07:28
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(777777 @ Apr 21 2008, 11:21) *
Классно, код сразу сокранился почти в 2 раза. С таким уже можно работать. smile.gif
И еще вопрос: а есть ли там bool? Редактор подсвечивает bool, true и false, а компилер на них ругается. Может их тоже включать надо?

надо подключить stdbool.h


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 21 2008, 08:06
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(MrYuran @ Apr 21 2008, 10:28) *
надо подключить stdbool.h
Или ключ -xc++
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 21 2008, 08:54
Сообщение #8


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

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



Цитата(MrYuran @ Apr 21 2008, 11:28) *
надо подключить stdbool.h


Э, это не то! там они просто дефайнятся, а я хотел поддержки со стороны компилятора, причем чтобы bool имел размер в 1 бит, как в 51 (правда, там этот тип называется bit). И если объявить такую функцию, то она будет возвращать свое значениев не в регистре, а в бите переноса.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 21 2008, 09:03
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(777777 @ Apr 21 2008, 11:54) *
Э, это не то! там они просто дефайнятся, а я хотел поддержки со стороны компилятора, причем чтобы bool имел размер в 1 бит, как в 51 (правда, там этот тип называется bit). И если объявить такую функцию, то она будет возвращать свое значениев не в регистре, а в бите переноса.
И, зачем это Вам? AVR - это не МК51, битовоадресуемой памяти нет, битовых операций тоже ( SBI, CBI, BST, BLD - невсчет).
Go to the top of the page
 
+Quote Post
mse
сообщение Apr 21 2008, 09:24
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата(Палыч @ Apr 21 2008, 13:03) *
И, зачем это Вам? AVR - это не МК51, битовоадресуемой памяти нет, битовых операций тоже ( SBI, CBI, BST, BLD - невсчет).

Есть, есть...;О) Мало, не везде, но есть. GPIOR0...2
Go to the top of the page
 
+Quote Post
Obama
сообщение Apr 21 2008, 09:48
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 14-04-08
Из: Москва
Пользователь №: 36 755



Цитата(Палыч @ Apr 21 2008, 11:18) *
-O0 - Do not optimize

Ключи описаны в файле gcc.pdf


А где его найти ? У меня в инсталяции WinAVR только 6 .pdf файлов и среди них нету - gcc.pdf
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 21 2008, 09:59
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc.pdf

P.S. Свежее: gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc.pdf
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 21 2008, 14:21
Сообщение #13


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

Группа: Свой
Сообщений: 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
Сообщение #14


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

Группа: Участник
Сообщений: 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
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 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

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

 


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


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