|
Фрагмент кода, GCC оптимизация |
|
|
|
Nov 19 2014, 08:38
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 25-10-06
Пользователь №: 21 651

|
Простейший фрагмент, а не нравится: Код static unsigned char key_pressed;
778: 80 b3 in r24, 0x10; 16 if (key_pressed != (PIND & 1)) { 77a: 40 91 6a 00 lds r20, 0x006A 77e: 80 b3 in r24, 0x10; 16 780: 24 2f mov r18, r20 782: 30 e0 ldi r19, 0x00; 0 784: 90 e0 ldi r25, 0x00; 0 786: 81 70 andi r24, 0x01; 1 788: 90 70 andi r25, 0x00; 0 78a: 28 17 cp r18, r24 78c: 39 07 cpc r19, r25 78e: 59 f0 breq .+22 ; 0x7a6 <KeyExe+0x2e> Отчего расширяемся к int? Можно, конечно, так: Код static unsigned char key_pressed; unsigned char s = PIND & 1; 778: 80 b3 in r24, 0x10; 16 if (key_pressed != s) { 77a: 90 91 6a 00 lds r25, 0x006A 77e: 81 70 andi r24, 0x01; 1 780: 98 17 cp r25, r24 782: 59 f0 breq .+22 ; 0x79a <KeyExe+0x22> Но, как-то, не аккуратненько... Какие мысли?
Сообщение отредактировал OKF - Nov 19 2014, 08:45
|
|
|
|
|
 |
Ответов
|
Nov 19 2014, 08:57
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(OKF @ Nov 19 2014, 10:38)  Какие мысли? Включайте оптимизацию. Код 58:main.cpp **** static volatile unsigned char key_pressed;
62:main.cpp **** if(key_pressed != (PINC & 1)) 85 .loc 1 62 0 86 0000 9091 0000 lds r25,_ZL11key_pressed 87 0004 86B1 in r24,0x6 88 0006 8170 andi r24,lo8(1) 89 0008 9817 cp r25,r24 90 000a 01F0 breq .L10 63:main.cpp **** asm volatile ("nop" ::); 91 .loc 1 63 0 92 /* #APP */ 93 ; 63 "main.cpp" 1 94 000c 0000 nop 95 ; 0 "" 2 96 /* #NOAPP */ 97 .L10:
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 19 2014, 09:33
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 25-10-06
Пользователь №: 21 651

|
Цитата(Сергей Борщ @ Nov 19 2014, 11:57)  Включайте оптимизацию. # Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s Не? Только c.
|
|
|
|
|
Nov 19 2014, 10:03
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(OKF @ Nov 19 2014, 11:33)  Не? Только c. Ну не знаю... Код avr-gcc -mmcu=atmega48 -Wall -gdwarf-2 -DF_CPU=4000000UL -Os -MD -MP -MT ./release/obj/main.o -MF ./release/dep/main.o.d -ffunction-sections -fdata-sections -Wa,-ahlmsd=./release/lst/main.lst -c main.cpp -o release/obj/main.o
$ avr-gcc --version avr-gcc (GCC) 4.8.2
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 19 2014, 10:18
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 25-10-06
Пользователь №: 21 651

|
Код avr-gcc (WinAVR 20100110) 4.3.3 Неужто это так важно?
|
|
|
|
|
Nov 19 2014, 10:28
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(OKF @ Nov 19 2014, 12:18)  Неужто это так важно? Разумеется. Попробуйте что-нибудь посвежее. Я давно не слежу за выпуском сборок под виндовс, возможно вы найдете и более свежие.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
OKF Фрагмент кода Nov 19 2014, 08:38 Genadi Zawidowski Я пользуюсь 4.9.2 отсюда: http://sourceforge.net/p... Nov 19 2014, 11:04 OKF Цитата(Genadi Zawidowski @ Nov 19 2014, 14... Nov 19 2014, 14:07  Genadi Zawidowski Лениво... а оптимизацию включили? Целиком ИСХОДНИК... Nov 19 2014, 15:40 Сергей Борщ и команду вызова компилятора. Nov 19 2014, 16:58 OKF Нет, на самом деле в последнем случае было:
Код i... Nov 20 2014, 06:46 Genadi Zawidowski Что такое key_pressed - какого оно типа? НУ что не... Nov 20 2014, 20:08 OKF Цитата(Genadi Zawidowski @ Nov 20 2014, 23... Nov 21 2014, 01:19  OKF Кстати, с 4.9.2 размер увеличился, как это ни стра... Nov 22 2014, 12:01   acrix в С результат логической операции имеет тип int, о... Nov 23 2014, 19:51    OKF Цитата(acrix @ Nov 23 2014, 22:51) в С ре... Nov 24 2014, 17:41     kolobok0 Цитата(OKF @ Nov 24 2014, 20:41) ...какие... Nov 24 2014, 21:28     acrix Цитата(OKF @ Nov 25 2014, 00:41) Ну, а еж... Nov 25 2014, 10:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|