Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
27.03.2009, 17:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от SwanSwan
|
Спасибо за обстоятельный ответ. Но не понял, что изменится при подключении файлов a и b через IDE, а не через инклюд? Разве там не встанет вопрос об очередности подключений? И потом после компиляции отладку в любом случае будем вести по одному сборному файлу.
|
Там вопрос не встанет. Модули компилируются по отдельности! Просто b берет заголовок от a и наоборот.
Насчет отладки - попробуйте в студии запустить симулятор. Все файлы как были отдельными, так и остались. И точки останова в них ставить можно.
Сообщение от SwanSwan
|
Ссылка выдает ошибку 404.
|
Там b в скобках прилепилась. Исправил.
|
|
|
|
24.06.2011, 23:22
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Оптимизация в AVR GCC
Сообщение от kison
|
Еще одно уточнение - файлы исходного текста, с расширением c, не подключаются через инклюд! Это противоречит одному из основных принципов языка - раздельной компиляции. Подсоединяйте такой файл в проект средствами используемой IDE, либо через Makefile, если работаете из командной строки. Иначе в будущем будут вылезать неприятные проблемы.
|
Ненашел ни в одном описании , оригинальном примере описательный файл *.h , наподобие main.h в Билдере Си , видимо вся компановка делается посредствам Makefile
|
|
|
|
24.02.2018, 18:17
|
|
Частый гость
Регистрация: 29.02.2008
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Оптимизация в AVR GCC
Здравствуйте. Использую Атмел студию 7.0.1645 (что-то версию компилятора не смог найти). Суть проблемы: без оптимизации все работает но дико медленно, с оптимизацией не работает. Давайте начнем с простого.
Имею конструкцию
Код:
|
#include ‹avr/io.h›
//Управление дисплеем
#define LCD_Port PORTA
#define LCD_PortReg DDRA
#define SdaPin PA2
#define setSDA LCD_Port |= (1‹‹SdaPin) //Установть активный уровень на выводе SDA
#define clrSDA LCD_Port &= (~(1‹‹SdaPin)) //Установть неактивный уровень на выводе SDA
int main(void)
{
setSDA;
/* Replace with your application code */
while (1)
{
}
} |
Дизасм без оптимизации:
Код:
|
20: setSDA;
0000003A LDI R24,0x3B Load immediate
0000003B LDI R25,0x00 Load immediate
0000003C LDI R18,0x3B Load immediate
0000003D LDI R19,0x00 Load immediate
0000003E MOVW R30,R18 Copy register pair
0000003F LDD R18,Z+0 Load indirect with displacement
00000040 ORI R18,0x04 Logical OR with immediate
00000041 MOVW R30,R24 Copy register pair
00000042 STD Z+0,R18 Store indirect with displacement |
Дизасм с оптимизацией:
Код:
|
20: setSDA;
00000036 SBI 0x1B,2 Set bit in I/O register |
Что я не так делаю?
|
|
|
|
25.02.2018, 19:12
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Оптимизация в AVR GCC
Сообщение от xlr8
|
Имею конструкцию
|
И что? Только одни определения? А что написано в главной функции?
|
|
|
|
25.02.2018, 20:54
|
|
Прописка
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
|
Re: Оптимизация в AVR GCC
Так как бы всё верно оптимизирует.
Зачем делать кучу операций, если есть ассемблерная команда Set Bit I/o - SBI
Собственно:
прекрасно оптимизируется в
Попробуйте поискать проблему в другом месте кода.
|
|
|
|
25.02.2018, 23:20
|
|
Частый гость
Регистрация: 29.02.2008
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Оптимизация в AVR GCC
Сообщение от МВА
|
И что? Только одни определения? А что написано в главной функции?
|
Мэйн содержал оду строку: setSDA;
Не сочтите, что я докапываюсь, но вот, упростил все до безобразия, результат тот же.
Код:
|
int main(void)
{
DDRA = 0xff;
PORTA |= (1‹‹2);
/* Replace with your application code */
while (1)
{
};
} |
Код:
|
14: PORTA |= (1‹‹2);
0000003F LDI R24,0x3B Load immediate
00000040 LDI R25,0x00 Load immediate
00000041 LDI R18,0x3B Load immediate
00000042 LDI R19,0x00 Load immediate
00000043 MOVW R30,R18 Copy register pair
00000044 LDD R18,Z+0 Load indirect with displacement
00000045 ORI R18,0x04 Logical OR with immediate
00000046 MOVW R30,R24 Copy register pair
00000047 STD Z+0,R18 Store indirect with displacement |
Сообщение от -Alan-
|
Так как бы всё верно оптимизирует.
Зачем делать кучу операций, если есть ассемблерная команда Set Bit I/o - SBI
Собственно:
прекрасно оптимизируется в
Попробуйте поискать проблему в другом месте кода.
|
Я не могу пока писать без пошаговой отладки, а она адекватна только при выключенной оптимизации.
В моем скудном понимании тупая команда
должна компилироваться в одну строку БЕЗ ИСПОЛЬЗОВАНИЯ оптимизации. Или оптимизатор работает по принципу: сначала мы создадим много проблем а потом их виртуозно порешаем!?
|
|
|
|
26.02.2018, 00:08
|
|
Гражданин KAZUS.RU
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
|
Re: Оптимизация в AVR GCC
Честно говоря, что-то Ваша студия без оптимизации компилирует какой-то бред. Непонятно, зачем она адрес грузит в регистры 24 и 25. Затем какого-то черта грузит в R18, R19 для того, чтобы потом перезагрузить в регистр Z. Такая куча пустых телодвижений - это просто уму не постижимо.
У меня без оптимизации компилируется вот в это:
PHP код:
|
10: PORTB |= 1‹‹2; +00000037: E3A8 LDI R26,0x38 Load immediate +00000038: E0B0 LDI R27,0x00 Load immediate +00000039: E3E8 LDI R30,0x38 Load immediate +0000003A: E0F0 LDI R31,0x00 Load immediate +0000003B: 8180 LDD R24,Z+0 Load indirect with displacement +0000003C: 6084 ORI R24,0x04 Logical OR with immediate +0000003D: 938C ST X,R24 Store indirect
|
Хотя можно было обойтись и одним индексным регистром.
Ну, а с оптимизацией, как у Вас, в одну строку через sbi.
Последний раз редактировалось МВА; 26.02.2018 в 00:14.
|
|
|
|
26.02.2018, 00:55
|
|
Частый гость
Регистрация: 29.02.2008
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Оптимизация в AVR GCC
Это не моя студия, а официальный микрочиповский инструмент. Честно говоря Ваш код меня тоже не вдохновил. В чем компилировали?
Блин а как люди пишут? Все такие умные, с первого раза, без пошагового прогона (не ну я пойму если есть готовые библиотеки, но с нуля ...)?
Поделитесь люди добрые, в чем простые смертные пишут, чтоб и отладка работала и дизасм человечий был.
|
|
|
|
26.02.2018, 08:53
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Оптимизация в AVR GCC
Сообщение от xlr8
|
в чем простые смертные пишут, чтоб и отладка работала и дизасм человечий был.
|
В машинных кодах на листке бумаги! Не нравится что-то? Займитесь тогда выпиливанием лобзиком или вязанием.
Отладка работает всегда, надо только уметь ею пользоваться, а дизасм всегда будет согласно политике оптимизатора.
|
|
|
|
26.02.2018, 16:09
|
|
Частый гость
Регистрация: 29.02.2008
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Оптимизация в AVR GCC
Сообщение от STM32F0
|
В машинных кодах на листке бумаги! Не нравится что-то?
|
Писал, не нравится. Если мы на каждой кочке будем назад оглядываться, то следующим этапом начнем заменять мк жесткой логикой, а потом и ее делать на рассыпухе. Умные люди уже все придумали, осталось только понять ход их мыслей.
Благодарен за Ваше профессиональное мнение.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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, время: 16:27.
|
|