Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 22:15

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 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
Сообщения: 565
Откуда: Рязань
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
Сообщения: 565
Откуда: Рязань
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
Сообщения: 565
Откуда: Рязань
А хидеры и не включаются в проект.
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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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