Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
29.12.2008, 00:42
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Оптимизация в AVR GCC
Товарищи!
Кто знает что-нибудь про оптимизацию в AVR GCC, её особенности (какие именно части кода она гробит, как отключать её для конкретных кусков кода, etc.)
Подскажите пожалуйста, а то есть код, рабочий без оптимизации, и никуда не годящийся с.
А оптимизировать надо...
__________________
Sex, Druggs, Rock&Roll
|
|
|
|
29.12.2008, 03:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Отключать ее для участков кода нельзя, только для файла целиком. Гробит она участки кода, которые написаны "кривыми" ручками. Вы бы примерчик выложили, который перестает работать, тогда будет о чем поговорить Ну и версию компилятора сообщите.
Кстати - обычно программы с отключенной оптимизацией в кристалле не работают. Связано с жесткими времянками в некоторых местах - запись в EEPROM, работа с WDT и т.д. Так что разобраться с оптимизатором придется.
|
|
|
|
29.12.2008, 13:58
|
|
Прохожий
Регистрация: 08.10.2007
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
У начинающих работать с gcc(да и с любым другим тоже), самая распространенная проблема с оптимизацией заключается в том, что какая то переменная изменяется в прерывании, а читается в фоновой части.
Вот ту переменную и надо объявить volatile .
|
|
|
|
29.12.2008, 17:16
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
На ручки попрошу не наезжать! Они хоть у меня и не идеальные, но радиус кривизны в соответствии с ГОСТом...
Я не совсем новичок, и подобные штуки насчет прерываний учитываю.
Код вобще без переменных и прерываний - святая простота - драйвер к LCD. Думаю, все дело в гцц-шных задержках (файл delay.h). Но в том и странность, ведь именно из этого файла настоятельно рекомендуют оптимизацию включить...
Юзаю GCC 4.3.0 (из пакета WinAVR b20080610).
__________________
Sex, Druggs, Rock&Roll
|
|
|
|
30.12.2008, 10:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от alberio
|
На ручки попрошу не наезжать! Они хоть у меня и не идеальные, но радиус кривизны в соответствии с ГОСТом...
Я не совсем новичок, и подобные штуки насчет прерываний учитываю.
|
Ну так пример в студию. Как обычно - телепатов нет.
Сообщение от alberio
|
Код вобще без переменных и прерываний - святая простота - драйвер к LCD. Думаю, все дело в гцц-шных задержках (файл delay.h). Но в том и странность, ведь именно из этого файла настоятельно рекомендуют оптимизацию включить...
Юзаю GCC 4.3.0 (из пакета WinAVR b20080610).
|
Код без переменных трудно представить. А для задержек оптимизация необходима, иначе константы будут рассчитываться прямо в функции задержки. А там плавучка. Вместо 10 микросекунд запросто получить 10 миллисекунд.
|
|
|
|
30.12.2008, 11:39
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Вуеля.
Прикрепленный файл: 8446624.rar
__________________
Sex, Druggs, Rock&Roll
|
|
|
|
30.12.2008, 22:21
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Вы бы еще заголовочные файлы приложили. Иначе неясности остаются - что такое Enabler() и где ее искать. Вообще загадочный у Вас lcd.h Там содержится много такого, без чего компиляция невозможна. Кстати, что за индикатор? Уж больно простая инициализация, ни разу такой не видел.
|
|
|
|
01.01.2009, 20:33
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Сообщение от kison
|
Вы бы еще заголовочные файлы приложили. Иначе неясности остаются - что такое Enabler() и где ее искать. Вообще загадочный у Вас lcd.h Там содержится много такого, без чего компиляция невозможна. Кстати, что за индикатор? Уж больно простая инициализация, ни разу такой не видел.
|
Индикатор FDCC2004, но всё это не имеет отношения к вопросу об оптимизации...
Прикрепленный файл: 8297469.rar
__________________
Sex, Druggs, Rock&Roll
|
|
|
|
01.01.2009, 23:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
К вопросу об оптимизации не имеет. Просто интересно было, что за индикатор сразу без инициализации готов к работе.
Кстати, Вы сами пробовали собрать то, что выкладываете? В Вашем примере ни инклюдов с задержками не включено, ни структуры не определены, которые Вы потом в макросах используете.
А от того КАК они определены очень многое зависит.
Откомпилировал я Вашу программу. Никаких проблем с задержками не обнаружено. Пример - оптимизация Os, 16МГц
Код:
|
17: Enabler();
+00000044: 9AAA SBI 0x15,2 Set bit in I/O register
---- f:WinAVRavrincludeutildelay_basic.h -----------------------------------------------------
83: __asm__ volatile (
+00000045: E09A LDI R25,0x0A Load immediate
+00000046: 2F89 MOV R24,R25 Copy register
+00000047: 958A DEC R24 Decrement
+00000048: F7F1 BRNE PC-0x01 Branch if not equal
+00000049: 98AA CBI 0x15,2 Clear bit in I/O register |
Вы проблему поподробней опишите. Неужели с отключенной оптимизацией работает?
Я не просто так о индикаторе спрашивал - у Вас в инициализации LCD_DATA=0b0010; идет как команда.
А LCD_putchar(0b00101000); уже как данные.
|
|
|
|
02.01.2009, 01:10
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
|
Прошу прощения, не тот архив присойденил.
Прикрепленный файл: 3095810.rar
__________________
Sex, Druggs, Rock&Roll
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Оптимизация программы - бортовой компьютер на PIC16F73
|
Hellka |
Микроконтроллеры, АЦП, память и т.д |
6 |
06.09.2010 17:04 |
gcc, iar, code vision AVR ?
|
schotki |
Микроконтроллеры, АЦП, память и т.д |
48 |
26.05.2009 20:15 |
AVR+GCC+jacOS
|
DenisLeonidovich |
Микроконтроллеры, АЦП, память и т.д |
3 |
24.07.2007 14:24 |
GCC AVR не работает printf("Hello word")
|
Kabron |
Proteus, KiCAD и другие ECAD |
8 |
03.03.2007 14:33 |
GNU GCC AVR вопрос по переменным..
|
Mozart |
Микроконтроллеры, АЦП, память и т.д |
3 |
09.02.2007 20:00 |
Часовой пояс GMT +4, время: 02:44.
|
|