Easyelectronics.ru

Электроника для всех
Текущее время: 18 июл 2019, 09:59

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Eclipse + AVR Eclipse + WINAVR
СообщениеДобавлено: 22 фев 2010, 20:26 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 22 фев 2010, 19:44
Сообщения: 86
Откуда: Челябинск
Начал изучать программирование AVR на Cи, для разработки проектов выбрал eclipse в связке с WinAVR. Установил, работает нормально, вроде без глюков. Есть возможность руссификации, правда не полной. Ксати в Eclipse есть ГУИ для AVRdude, у меня получилось прикрутить программатор на FT232RL. Вообщем на мой взгляд удобная среда. Вопрос в следующем может есть у кого русское руководство по данной среде, особенно интересует возможность отладки из данной среды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Eclipse + AVR Eclipse + WINAVR
СообщениеДобавлено: 23 фев 2010, 01:45 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 18 янв 2010, 22:48
Сообщения: 71
Откуда: Germany
Немного инфы есть тут http://www.ibm.com/developerworks/ru/li ... index.html

Ну и на сайте AVR плагина хороший мануал по отладке с картинками http://avr-eclipse.sourceforge.net/wiki ... /Debugging (на английском).

Теперь добавлю от себя: я тоже юзаю Eclipse + WinAVR, хорошая среда разработки, но при попытке отладки в симуляторе Simulavr + gdbserver ничего не вышло, симулятор жудко глючил (хотя под линуксом говорят не глючит, но сам не пробовал еще). Щас буду заказывать AVRDRAGON и пробовать связку AVaRICE + gdbserver, судя по отзывам в инете, это работает без глюков.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Eclipse + AVR Eclipse + WINAVR
СообщениеДобавлено: 03 апр 2010, 22:47 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 22 фев 2010, 19:44
Сообщения: 86
Откуда: Челябинск
Не могу собрать (скомпилировать) проект состоящий из нескольких файлов. Я так понял проблема в том, что компилятор не может найти путь к файлам, пробовал при подключении файла задать полный путь, не помагает. Кто пользуется данной средой помогите с настройками для многостраничных проектов. Кстати пробовал связку CodeBlocks + WinAVR там тоже такая же проблема.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Eclipse + AVR Eclipse + WINAVR
СообщениеДобавлено: 03 апр 2010, 22:55 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2010, 02:32
Сообщения: 564
Откуда: Рязань
Mega_Volt писал(а):
Кстати пробовал связку CodeBlocks + WinAVR там тоже такая же проблема.

Год пользую. Никаких проблем

_________________
После нас - хоть потоп (с) Лойсо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Eclipse + AVR Eclipse + WINAVR
СообщениеДобавлено: 03 апр 2010, 23:15 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 22 фев 2010, 19:44
Сообщения: 86
Откуда: Челябинск
bevice писал(а):
Год пользую. Никаких проблем

А можно по подробнее про настройку для многостраничных проектов, как указать компилятору путь к файлам?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Eclipse + AVR Eclipse + WINAVR
СообщениеДобавлено: 03 апр 2010, 23:22 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2010, 02:32
Сообщения: 564
Откуда: Рязань
C::B скармливает все C/C++ файлы включенные в проект. Когда добавляет файл, надо поставить галки в тагетах (debug/release) если надо, чтобы компилился. (а если уже добавлены - найти их можно в свойствах на вкладке "билд")
В эклипсе не скажу, потому как это тормозное яваподелие кроме стойкого отвращения ничего у меня не вызывает

_________________
После нас - хоть потоп (с) Лойсо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Eclipse + AVR Eclipse + WINAVR
СообщениеДобавлено: 04 апр 2010, 10:40 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 22 фев 2010, 19:44
Сообщения: 86
Откуда: Челябинск
bevice писал(а):
C::B скармливает все C/C++ файлы включенные в проект. Когда добавляет файл, надо поставить галки в тагетах (debug/release) если надо, чтобы компилился. (а если уже добавлены - найти их можно в свойствах на вкладке "билд")
В эклипсе не скажу, потому как это тормозное яваподелие кроме стойкого отвращения ничего у меня не вызывает

С файлами с расширением .с или .срр понятно, они сразу включаются в проект, а файлы с раширением .h (хидеры) у меня в проект не включаются, пробовал при подключении прописывать полный путь типа I:/AVR/FSM.h, результат нулевой. Вот мне инетересно, где собака зарыта?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Компиляция С
СообщениеДобавлено: 04 апр 2010, 17:33 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2010, 02:32
Сообщения: 564
Откуда: Рязань
А хидеры и не включаются в проект.
gcc --help -v писал(а):
-I <dir> Add <dir> to the end of the main include path

где dir - это папка с хедерами. Обычно используется для подключения библиотек
сам файл подключается дериктивой #include в самих исходниках.
Вообще, чтобы не было вопросов где-то я уже описывал процесс компиляции линковки, повторю и тут
собс-но получение бинарника (.exe, .elf, .hex, .dll, .so, .a) в любом компиляторе С/С++ почти всегда состоит из трех действ -
препроцессинга, компиляции и линковки.
Препроцессинг - это (как можно догадаться из название) раскрытие деректив препроцессора (#define,#include, #ifdef итд) - на этом этапе происходит включение хедеров, подстановка макросов, вырезание ненужных участков кода (если есть дериктивы #ifdef #ifndef)
Компиляция - преобразование исходных текстов в промежуточный (объектный) код - в нем содержатся откомпилированные функции и классы. Но связи между ними никакой нет. Каждый c/cpp файл компилируется отдельно от основных и соответственно про остальные файлы компилятор на этом этапе ничего не знает.
Линковка - создание на основе объектных файлов исполнимых.
В препроцессигне может возникнуть одна единственная сложность - #define действует только там, где определен. т.е. если вы определили
Код:
#define F_CPU 16000000UL
в main.cpp
то скажем в файле uart.c (где на основе этого F_CPU определяется UBRR) никаких упоминаний про этот define нет. Решается тремя способами - определением в каждом файле - неправильный (захотели поменять частоту, приходится ковыряться во всех исходниках).
Созданием и подключением хидера с #define в каждый файл где используется - правильный.
И определением глобальных макросов/определения (ключ компиляции -D для gcc) - тоже правильный, но используется немного в другом контексте. Например для быстрой конфигурации программы (./configure думаю знаком многим *никсоидам, помимо всего именно эти ключи он и задает в Makefile). Многие среды разработки поддерживают несколько конфигураций (targets), по-умолчанию обычно их две debug и release. При сборе debug-версии установлен глобальный define DEBUG, в release - не установлен. т.е. код
Код:
#ifdef DEBUG
// блабла
#endif
будет выполнятся только при сборке отладочной версии (DEBUG), при сборке релиза, отладочный код помеченный этими дерективами компилироваться вообще не будет.
По скольку макросы раскрываются еще до компиляции - от этого возможны бонусы и проблемы: константы определенные в #define будут подставляться как числа (не будет обращения к памяти). Если под #define стоит выражение - оно тоже посчитается (если возможно) на этапе компиляции и в программе будет уже не выражением, а числовой константой. Проблемы - в синтаксисе. Надо учитывать, что дифайн подставляется в исходник "как есть"
например
Код:
#define X a+b

в выражение 2*X подставится как 2*a+b и даст совсем не тот результат 2*(a+b) на который хочется рассчитывать - поэтому макросы заключают в скобки.

Компиляция. По скольку компилятор совершенно ничего не знает о функциях определенных в других файлах - ему надо о них рассказать. Делается это тоже по средствам хедеров (header, *.h). В них находятся только определение функций и классов, т.е. название, количесво и тип параметров, возвращаемое значение - для компилятора это все что нужно знать.
А еще компилятор читает текст программы сверху вниз и в один проход, поэтому если функция объявлена ниже, чем используется - случится ошибка. Объявление в заголовочном файле и подключение его в начало текста помогает (как я уже говорил - компилятору плевать на внутренности вызываемых функций, главное знать как эту функцию вызвать). Отсюда рождаются пары uart.h uart.c
Для того, чтобы один и тот же заголовочный файл не включился несколько раз его защищают дерективами препроцессора:
Код:
#ifndef BLAHBLAH_H
#define BLAHBLAH_H 1
// код файла
#endif

т.е. если не определен BLAHBLAH_H - он определяется и включается код файла, если уже определен - весь файл пропускается.

С линковкой все просто - на основе скомпилированных файлов, подключенных библиотек создается исполнимый файл. Именно в этот момент вычисляются все адреса и подставляются в программу. Возможных проблем очень дофига, но все сводятся к тому, что линковщик не знает, где взять адрес запрошенной функции (не подключена библиотека, использовались разные заголовки для подключения и описания идт)

Собсно этого должно хватить для понимания работы GCC (и прочих С компиляторов)

_________________
После нас - хоть потоп (с) Лойсо


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB