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

 
 
> Фрагмент кода, GCC оптимизация
OKF
сообщение Nov 19 2014, 08:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Nov 19 2014, 08:57
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- OKF   Фрагмент кода   Nov 19 2014, 08:38
|- - OKF   Цитата(Сергей Борщ @ Nov 19 2014, 11:57) ...   Nov 19 2014, 09:33
|- - Сергей Борщ   Цитата(OKF @ Nov 19 2014, 11:33) Не? Толь...   Nov 19 2014, 10:03
|- - OKF   Кодavr-gcc (WinAVR 20100110) 4.3.3 Неужто ...   Nov 19 2014, 10:18
|- - Сергей Борщ   Цитата(OKF @ Nov 19 2014, 12:18) Неужто э...   Nov 19 2014, 10:28
- - 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


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

 


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


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