Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 27.03.2009, 17:11  
kison
Почётный гражданин KAZUS.RU
 
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
kison на пути к лучшему
По умолчанию

Сообщение от SwanSwan
Спасибо за обстоятельный ответ. Но не понял, что изменится при подключении файлов a и b через IDE, а не через инклюд? Разве там не встанет вопрос об очередности подключений? И потом после компиляции отладку в любом случае будем вести по одному сборному файлу.
Там вопрос не встанет. Модули компилируются по отдельности! Просто b берет заголовок от a и наоборот.
Насчет отладки - попробуйте в студии запустить симулятор. Все файлы как были отдельными, так и остались. И точки останова в них ставить можно.
Сообщение от SwanSwan
Ссылка выдает ошибку 404.
Там b в скобках прилепилась. Исправил.
Реклама:
kison вне форума  
Непрочитано 24.06.2011, 23:22  
MaxiMuz79
Гражданин KAZUS.RU
 
Аватар для MaxiMuz79
 
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
MaxiMuz79 на пути к лучшему
По умолчанию Re: Оптимизация в AVR GCC

Сообщение от kison Посмотреть сообщение
Еще одно уточнение - файлы исходного текста, с расширением c, не подключаются через инклюд! Это противоречит одному из основных принципов языка - раздельной компиляции. Подсоединяйте такой файл в проект средствами используемой IDE, либо через Makefile, если работаете из командной строки. Иначе в будущем будут вылезать неприятные проблемы.
Ненашел ни в одном описании , оригинальном примере описательный файл *.h , наподобие main.h в Билдере Си , видимо вся компановка делается посредствам Makefile
MaxiMuz79 вне форума  
Непрочитано 24.02.2018, 18:17  
xlr8
Частый гость
 
Регистрация: 29.02.2008
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
xlr8 на пути к лучшему
По умолчанию 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
Что я не так делаю?
xlr8 вне форума  
Непрочитано 25.02.2018, 19:12  
МВА
Гражданин KAZUS.RU
 
Регистрация: 15.08.2010
Адрес: Днепр
Сообщений: 842
Сказал спасибо: 74
Сказали Спасибо 199 раз(а) в 174 сообщении(ях)
МВА на пути к лучшему
По умолчанию Re: Оптимизация в AVR GCC

Сообщение от xlr8 Посмотреть сообщение
Имею конструкцию
И что? Только одни определения? А что написано в главной функции?
МВА вне форума  
Непрочитано 25.02.2018, 20:54  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Оптимизация в AVR GCC

Так как бы всё верно оптимизирует.
Зачем делать кучу операций, если есть ассемблерная команда Set Bit I/o - SBI
Собственно:
Код:
PORTA |= (1 ‹‹ 2)
прекрасно оптимизируется в
Код:
SBI 0x1B, 2
Попробуйте поискать проблему в другом месте кода.
-Alan- вне форума  
Непрочитано 25.02.2018, 23:20  
xlr8
Частый гость
 
Регистрация: 29.02.2008
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
xlr8 на пути к лучшему
По умолчанию 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
Собственно:
Код:
PORTA |= (1 ‹‹ 2)
прекрасно оптимизируется в
Код:
SBI 0x1B, 2
Попробуйте поискать проблему в другом месте кода.
Я не могу пока писать без пошаговой отладки, а она адекватна только при выключенной оптимизации.
В моем скудном понимании тупая команда
Код:
PORTA |= (1 ‹‹ 2)
должна компилироваться в одну строку БЕЗ ИСПОЛЬЗОВАНИЯ оптимизации. Или оптимизатор работает по принципу: сначала мы создадим много проблем а потом их виртуозно порешаем!?
xlr8 вне форума  
Непрочитано 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  
xlr8
Частый гость
 
Регистрация: 29.02.2008
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
xlr8 на пути к лучшему
По умолчанию Re: Оптимизация в AVR GCC

Это не моя студия, а официальный микрочиповский инструмент. Честно говоря Ваш код меня тоже не вдохновил. В чем компилировали?

Блин а как люди пишут? Все такие умные, с первого раза, без пошагового прогона (не ну я пойму если есть готовые библиотеки, но с нуля ...)?

Поделитесь люди добрые, в чем простые смертные пишут, чтоб и отладка работала и дизасм человечий был.
xlr8 вне форума  
Непрочитано 26.02.2018, 08:53  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: Оптимизация в AVR GCC

Сообщение от xlr8 Посмотреть сообщение
в чем простые смертные пишут, чтоб и отладка работала и дизасм человечий был.
В машинных кодах на листке бумаги! Не нравится что-то? Займитесь тогда выпиливанием лобзиком или вязанием.
Отладка работает всегда, надо только уметь ею пользоваться, а дизасм всегда будет согласно политике оптимизатора.
STM32F0 вне форума  
Непрочитано 26.02.2018, 16:09  
xlr8
Частый гость
 
Регистрация: 29.02.2008
Сообщений: 10
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
xlr8 на пути к лучшему
По умолчанию Re: Оптимизация в AVR GCC

Сообщение от STM32F0 Посмотреть сообщение
В машинных кодах на листке бумаги! Не нравится что-то?
Писал, не нравится. Если мы на каждой кочке будем назад оглядываться, то следующим этапом начнем заменять мк жесткой логикой, а потом и ее делать на рассыпухе. Умные люди уже все придумали, осталось только понять ход их мыслей.
Благодарен за Ваше профессиональное мнение.
xlr8 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot