|
Фрагмент кода, 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 21 2014, 01:19
|
Участник

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

|
Цитата(Genadi Zawidowski @ Nov 20 2014, 23:08)  Что такое key_pressed - какого оно типа? НУ что не привести ещё пару строк? Ну как же, всё указано: Код static unsigned char key_pressed; Как я понимаю, тут лог. отрицание приводится к int-у. А этого не хотелось бы...
|
|
|
|
|
Nov 22 2014, 12:01
|
Участник

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

|
Кстати, с 4.9.2 размер увеличился, как это ни странно.
|
|
|
|
|
Nov 23 2014, 19:51
|
Группа: Новичок
Сообщений: 2
Регистрация: 23-11-14
Пользователь №: 83 803

|
в С результат логической операции имеет тип int, отсюда и расширение до int который по умолчанию для avr 2 байта, можно использовать опцию -mint8 но тогда потеряете бинарную совместимость при линковке с кодом который такую опцию не использует в частности сразу теряете бинарную совместимость с avr-libc, такой проблемы нет в C++ в котором для архитектуры avr встроенный тип bool равен одному байту и соответственно логические операции имеют тип bool, кстати интересно узнать, какой смысл использовать компилятор С если для таргет архитектуры существует хорошо реализованный компилятор С++?
|
|
|
|
|
Nov 24 2014, 17:41
|
Участник

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

|
Цитата(acrix @ Nov 23 2014, 22:51)  в С результат логической операции имеет тип int, отсюда и расширение до int который по умолчанию для avr 2 байта, можно использовать опцию -mint8 но тогда потеряете бинарную совместимость при линковке с кодом который такую опцию не использует в частности сразу теряете бинарную совместимость с avr-libc, такой проблемы нет в C++ в котором для архитектуры avr встроенный тип bool равен одному байту и соответственно логические операции имеют тип bool, кстати интересно узнать, какой смысл использовать компилятор С если для таргет архитектуры существует хорошо реализованный компилятор С++? Ну, а ежели С хватает. Не из-за bool-а же переходить. А вообще, какие нужны телодвижения что бы перевести проект на С++? Какие основные отличия в оформлении, если плюшками ++ не пользоваться? При том что все наработки на С.
|
|
|
|
Сообщений в этой теме
OKF Фрагмент кода Nov 19 2014, 08:38 Сергей Борщ Цитата(OKF @ Nov 19 2014, 10:38) Какие мы... Nov 19 2014, 08:57 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     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
|
|
|