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

 
 
> Эффективность кода 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
Ответов
Qwertty
сообщение Apr 21 2008, 17:11
Сообщение #2


Местный
***

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



GCC 3.4.6
Код
#define    F0    5
const int F0BIT    = (1<<F0);
uint16_t v;

int    main(void)
{
if(v & F0BIT) PORTD = 0; else PORTD = 0xFF;

while(1){};
}


Код
---- main.c ---------------------------------------------------------------------------------------
23:       if(v & F0BIT) PORTD = 0; else PORTD = 0xFF;
+00000032:   91800062    LDS     R24,0x0062       Load direct from data space
+00000034:   91900063    LDS     R25,0x0063       Load direct from data space
+00000036:   FF85        SBRS    R24,5            Skip if bit in register set
+00000037:   C002        RJMP    PC+0x0003        Relative jump
+00000038:   BA12        OUT     0x12,R1          Out to I/O location
+00000039:   C002        RJMP    PC+0x0003        Relative jump
+0000003A:   EF8F        SER     R24              Set Register
+0000003B:   BB82        OUT     0x12,R24         Out to I/O location
33:       while(1){};
+0000003C:   CFFF        RJMP    PC-0x0000        Relative jump

Никто ничего не вычисляет smile.gif
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 22 2008, 04:31
Сообщение #3


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

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



Цитата(Qwertty @ Apr 21 2008, 21:11) *
GCC 3.4.6


У меня была 3.4.5


Цитата(777777 @ Apr 21 2008, 20:44) *
... Впрочем, я уже скачал новую версию, 20080411 (4.3.0), там это место генерируется весьма эффективно, через SBRS, но там в другом месте глюк - часть кода не транслируется вообще, завтра буду разбираться.


После уменьшения кода до минимально необходимого для повторения глюка, удалось понять его причину. Дело в том, что gcc - компилятор "настоящий" (в отличие от Keil, напимер), поэтому volatile нужно писать всегда, где это надо smile.gif
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Apr 22 2008, 07:05
Сообщение #4


Местный
***

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



Цитата(777777 @ Apr 22 2008, 08:31) *
У меня была 3.4.5

Попробовал в 4.2.2 - тоже нормально, почти оптимальный результат.
Цитата(777777 @ Apr 22 2008, 08:31) *
После уменьшения кода до минимально необходимого для повторения глюка, удалось понять его причину. Дело в том, что gcc - компилятор "настоящий" (в отличие от Keil, напимер), поэтому volatile нужно писать всегда, где это надо smile.gif

Никогда не видел, что бы отсутствие волатила препятствовало компиляции. Обычно это совсем не мешает, просто программа работает не совсем так, как надо. Или совсем не так smile.gif
Можно примерчик кода не собирающегося без волатила?
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
- - mdmitry   После инсталляции: C:\WinAVR-20071221\do...   Apr 21 2008, 14:21
|- - 777777   Я в шоке. Какой код можно сгенерировать на такую с...   Apr 21 2008, 14:43
|- - aaarrr   Цитата(777777 @ Apr 21 2008, 18:43) А все...   Apr 21 2008, 15:06
|- - 777777   Цитата(aaarrr @ Apr 21 2008, 19:06) А зач...   Apr 21 2008, 15:42
|- - 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
|- - 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 - 16:20
Рейтинг@Mail.ru


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