777777 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба Она действительно такая никудышняя или можно повысить какими-то ключами? Вот пример: 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 и грузит ее заново. Такой тупой компиляции я никак не ожидал, может надо где-то включить оптимизацию? Да и хелпа я что-то нигде не найду :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба 2 777777 - какие ключи использовали ?? .. там в принципе ключик -Os - генерит более менее правильный код.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба 2 777777 - какие ключи использовали ?? То, что AVR поставил по умолчанию: -Wall -gdwarf-2 -O0 Кстати, на означает ли последний ключ отключение оптимизации? Где бы про них почитать, а то хелп только на AVR Studio, а на сишный компилятор нигде не найду :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 7 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба -O0 - Do not optimize Ключи описаны в файле gcc.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба там в принципе ключик -Os - генерит более менее правильный код.. Классно, код сразу сокранился почти в 2 раза. С таким уже можно работать. :) И еще вопрос: а есть ли там bool? Редактор подсвечивает bool, true и false, а компилер на них ругается. Может их тоже включать надо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 17 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба Классно, код сразу сокранился почти в 2 раза. С таким уже можно работать. :) И еще вопрос: а есть ли там bool? Редактор подсвечивает bool, true и false, а компилер на них ругается. Может их тоже включать надо? надо подключить stdbool.h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 7 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба надо подключить stdbool.h Или ключ -xc++ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба надо подключить stdbool.h Э, это не то! там они просто дефайнятся, а я хотел поддержки со стороны компилятора, причем чтобы bool имел размер в 1 бит, как в 51 (правда, там этот тип называется bit). И если объявить такую функцию, то она будет возвращать свое значениев не в регистре, а в бите переноса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 7 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба Э, это не то! там они просто дефайнятся, а я хотел поддержки со стороны компилятора, причем чтобы bool имел размер в 1 бит, как в 51 (правда, там этот тип называется bit). И если объявить такую функцию, то она будет возвращать свое значениев не в регистре, а в бите переноса. И, зачем это Вам? AVR - это не МК51, битовоадресуемой памяти нет, битовых операций тоже ( SBI, CBI, BST, BLD - невсчет). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mse 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба И, зачем это Вам? AVR - это не МК51, битовоадресуемой памяти нет, битовых операций тоже ( SBI, CBI, BST, BLD - невсчет). Есть, есть...;О) Мало, не везде, но есть. GPIOR0...2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obama 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба -O0 - Do not optimize Ключи описаны в файле gcc.pdf А где его найти ? У меня в инсталяции WinAVR только 6 .pdf файлов и среди них нету - gcc.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 7 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc.pdf P.S. Свежее: gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба После инсталляции: C:\WinAVR-20071221\doc\gcc\HTML\gcc-4.2.2 и посмотреть ... :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба Я в шоке. Какой код можно сгенерировать на такую строку: 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 тоже ничего... А я уж было обрадовался что компилятор заработал... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 21 апреля, 2008 Опубликовано 21 апреля, 2008 · Жалоба А все потому, что константа F0BIT описана следующим образом: const int F0BIT = (1<<F0); const int F1BIT = (1<<F1); А зачем было описывать константу столь затейливым образом? Компилятор не работает, как же. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться