Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: winAVR и С++
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
zaman
Как сконфигурировать makefile, чтобы компилятор понимал программу для мк не на С, а на С++.
Начал писать программу на С++, с использванием классов, а компилятор выдал, что не понимает классы.
Tiro
Открыть файл winavr/doc/gcc/gcc.pdf и прочитать раздел 3.2,
где написано, что :

file.cc
file.cp
file.cxx
file.cpp
file.CPP
file.c++
file.C

C++ source code which must be preprocessed. Note that in ‘.cxx’, the last two letters must both be literally ‘x’. Likewise, ‘.C’ refers to a literal capital C.

Или чуть дальше :

You can specify the input language explicitly with the ‘-x’ option:

-x language

Specify explicitly the language for the following input files (rather than letting the compiler choose a default based on the filename suffix). This option applies to all following input files until the next ‘-x’ option. Possible values for language are:

c c-header cpp-output c++ c++-header c++-cpp-output
objective-c objective-c-header objc-cpp-output assembler assembler-with-cpp ada f77 f77-cpp-input ratfor java treelang

То есть, либо переименуйте исходный файл, либо добавьте ключ -x c++ в строку вызова компилятора. Переименовать исходник предпочтительнее, поскольку вы сможете использовать как "с", так и "срр" исходные файлы в одном проекте.
bullit
А как настроить AVRStudio на работу с С++(GCC(WinAvr)). Везь уже извелся.
Не ужели нельзя что-то сделать?
Если нет, то это как минимум очень странно, а максимум - плохо.
Уж больно эта среда мне понравилась.

Заранее большое спасибо!
Dibor
Незнаю как другие, но у меня не получилось сконфигурировать AVRStutio напрямую для работы с файлами .cpp , потому что AVRStutio по дифолту создает файл .с.
Я делал проект без "Create initial file" , только имя проекта.
Потом создавал пустые файлы с расширением .срр и добавлял в проект.
Но это пол беды, компайлер конечно же не будет работать с make файлом который делает AVRStutio,
поэтому пришлось сделать make файл с помощью MFile который входит в пакет WinAVR, подправить его под свой сорсе файл,сказать в AVRStudio - "Use External Makefile" и все заработало.
Может это и не самый короткий путь!

Всего доброго.
mdmitry
Цитата(Dibor @ May 9 2007, 23:38) *
Незнаю как другие, но у меня не получилось сконфигурировать AVRStutio напрямую для работы с файлами .cpp , потому что AVRStutio по дифолту создает файл .с.
Я делал проект без "Create initial file" , только имя проекта.
Потом создавал пустые файлы с расширением .срр и добавлял в проект.
Но это пол беды, компайлер конечно же не будет работать с make файлом который делает AVRStutio,
поэтому пришлось сделать make файл с помощью MFile который входит в пакет WinAVR, подправить его под свой сорсе файл,сказать в AVRStudio - "Use External Makefile" и все заработало.
Может это и не самый короткий путь!

Всего доброго.

Можно и не использовать AVRStudio для работы. В WINAVR входит редактор PN, почти IDE. Сам использую Eclipse для работы, единственное неудобство, надо отдельно запускать AVRStudio на симуляцию. makefile можно скорректировать как надо для работы с с++, по умолчанию есть поддержка avr-g++.
Вопрос: зачем на контроллере использование с++?
bullit
Не С не С++ я хорошо не знаю. Так основы. На работе все программы писались на С++(по крайней мере расширение файлов *.cpp) вот и надо мне их изучить и поддерживать дальнейшее развитие.
Встречный вопрос: есть ли отличия между С и С++ для WinAVR при програмировании для AVR? Если нет отличия то даже заморачиваться с этим вопросом не стану, просто на С писать буду и всё. И AVRStudio использовать буду.
PS Сам я отличия между С и С++ не знаю.
forever failure
Отличия между C и C++ достаточно велики, независимо от того под какую платформу на них писать.
Если хотите писать программы на С++ - изучите общие, платформонезависимые различия языков, а потом решайте, какому из них отдать предпочтение.
dxp
Цитата(mdmitry @ May 10 2007, 03:17) *
Вопрос: зачем на контроллере использование с++?

А зачем вообще нужен С++?
IgorKossak
mdmitry, dxp, не начинайте религиозный спор.

--------------------------------
Здоровому физзарядка не нужна, а больному уже не поможет.
bullit
А некто не знает почему в AVRStudio нет поддержки С++?
Вродь как им должно быть до фени.

И еще Есть ли преимущество С++ перед С при програмировании именно для AVRов? Или это чисто определяется преимуществами одного из языков, но не как для АВРов не кретичны?
mdmitry
>mdmitry, dxp, не начинайте религиозный спор.
Религиозные споры не люблю!

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

На мой взгляд, обрабатывать файл С компилятором С++ не эффективно из-за отсутствия конструкций языка, ориентированного на компилятор.
Идеология разработки обеспечения на С и С++ сильно различается (процедурно и объекто-ориентированные языки)(IMHO).
IgorKossak
Цитата(bullit @ May 10 2007, 20:15) *
А некто не знает почему в AVRStudio нет поддержки С++?
Вродь как им должно быть до фени.

А ей и есть до фени. По крайней мере проекты, собранные в ИАР, поддерживаются (выходной формат ubrof8).
В формате elf (coff, dwarf или что у него там ещё), выдаваемом WinAVR, поддержка С++ тоже должна быть.
Цитата(bullit @ May 10 2007, 20:15) *
И еще Есть ли преимущество С++ перед С при програмировании именно для AVRов? Или это чисто определяется преимуществами одного из языков, но не как для АВРов не кретичны?

mdmitry в частности ответил. От себя добавлю, C++ для AVR не помеха (и наоборот).
bullit
Цитата(IgorKossak @ May 11 2007, 02:23) *
А ей и есть до фени. По крайней мере проекты, собранные в ИАР, поддерживаются (выходной формат ubrof8).
В формате elf (coff, dwarf или что у него там ещё), выдаваемом WinAVR, поддержка С++ тоже должна быть.

mdmitry в частности ответил. От себя добавлю, C++ для AVR не помеха (и наоборот).

Но почему же она относится к файлам *.cpp как other. Я хочу использовать AVRStudio как программу разработки и прошивки. А не через сторонние программы. Написал в ней, собрал проект и прошил - ВСЁ. А она не позволяет (по крайней мере в явном виде) работать с С++, на котором я надумал писать программы.
Кто может помочь?
Или запопробывать ИАР?
dxp
Цитата(mdmitry @ May 11 2007, 03:04) *
>mdmitry, dxp, не начинайте религиозный спор.
Религиозные споры не люблю!

Аналогично. beer.gif Просто расставим точки над 'i'.

Цитата(mdmitry @ May 11 2007, 03:04) *
1. С++ можно использовать как расширенный вариант С (сам так делал на этапе изучения С++).

Согласен, на начальном этапе перехода от С к С++ можно. Но лучше уже и тут вникать в идеологию ++ и долго не засиживаться на "улучшенном С".

Цитата(mdmitry @ May 11 2007, 03:04) *
2. Использовать собственно С++, то есть особенности языка, а именно, классы, исключения и др.

Вот исключения в МК - это определенно лишнее. Еще можно поспорить про RTTI, но остальное прекрасно ложится на любой МК, который дружит с С.

Цитата(mdmitry @ May 11 2007, 03:04) *
Надежность разработки выше из-за наличия механизмов защиты данных. Возникнут накладные расходы (пример, таблицы виртуальных функций), если скорость работы устраивает , то все в порядке. НО в контроллерах обычно с запасом ресурсов не все благополучно.

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

Цитата(mdmitry @ May 11 2007, 03:04) *
Идеология разработки обеспечения на С и С++ сильно различается (процедурно и объекто-ориентированные языки)(IMHO).

С++ не является только лишь объектно-ориентированным - он поддерживает различные способы/методы (парадигмы) программирования - в какой-то книжке так и было написано "мультипарадигменный ЯП" (книжку точно не скажу, насколько помню, это "Дизайн и эволюция С++" Б.Срауструпа, но могу ошибаться). Т.е. на С++ можно одновременно использовать и процедурное программирование, и объектно-ориентированное и даже в каком-то виде функциональное, хотя напрямую сам ЯП это не поддерживает и достигается это с помощью сторонних библиотек.
forever failure
Уже ведь сказали выше - создаёте в проекте свой Makefile, а в опциях проекта выбирает - "use external makefile".
В Makefile пишете чо-нить навроде:

all: main.cpp
avr-g++ -mmcu=atmega128 main.cpp -o avr-g++.elf

А в проект добавляете main.cpp. И всё работает/компилируется/прошивается.
mdmitry
2 dxp
Сказано было: пример, таблицы виртуальных функций.
Указывать тонкости языка для bullit на мой взгляд пока не стоит.> PS Сам я отличия между С и С++ не знаю.

Я пытался дать ответ человеку, который начинает работать , а не профессионалу.

bullit, у Вас же установлен WINAVR. forever failure уже дал ответ.
Можете создать makefile прилагаемой к пакету утилитой MFILE или скопируйте и откорректируйте имеющийся шаблон. Есть отдельная секция, посвященная настройкам avr-g++ (с указанием расширений целевых файлов).
С помощью makefile файла можно запускать и программатор командной строки (AVRDUDE, avreal и другие). Использую сам эту возможность в среде разработки eclipse.
> Я хочу использовать AVRStudio как программу разработки и прошивки.
Чем привлекает Вас AVRStudio как IDE?
bullit
Цитата(mdmitry @ May 12 2007, 02:26) *
2 dxp
Сказано было: пример, таблицы виртуальных функций.
Указывать тонкости языка для bullit на мой взгляд пока не стоит.> PS Сам я отличия между С и С++ не знаю.

Я пытался дать ответ человеку, который начинает работать , а не профессионалу.

bullit, у Вас же установлен WINAVR. forever failure уже дал ответ.
Можете создать makefile прилагаемой к пакету утилитой MFILE или скопируйте и откорректируйте имеющийся шаблон. Есть отдельная секция, посвященная настройкам avr-g++ (с указанием расширений целевых файлов).
С помощью makefile файла можно запускать и программатор командной строки (AVRDUDE, avreal и другие). Использую сам эту возможность в среде разработки eclipse.
> Я хочу использовать AVRStudio как программу разработки и прошивки.
Чем привлекает Вас AVRStudio как IDE?

Меня привлекает отсутствие нужды применения стороних программ. Написал в ней программу, собрал проект, отладил и прошил. А чего еще надо-то? Вроде для начала там всё есть.
Незнаю конечно правильно ли её называть IDE, но по этим рамкам Википедия о IDE AVRStudio вроде проходит как IDE.
Или чего-то в AVRStudio нехватает?

PS Тема мной конечно была выбранна не верно, тема о WinAVR и С++, а я о AVRStudio и С++, простите!
dxp
Цитата(mdmitry @ May 12 2007, 03:26) *
2 dxp
Сказано было: пример, таблицы виртуальных функций.

И отвечено было: попробуйте реализовать ту же самую функциональность, которую дают виртуальные функции в С++, на С - у Вас появятся ровно те же самые таблицы указателей на функции, только создавать их (таблицы), инициализировать значениями и осуществлять доступ придется вручную, что чревато ошибками и кодом, далеким от идеала читабельности. Итого, по накладным расходам выйдет то же самое.
mdmitry
Цитата(dxp @ May 13 2007, 16:53) *
И отвечено было: попробуйте реализовать ту же самую функциональность, которую дают виртуальные функции в С++, на С - у Вас появятся ровно те же самые таблицы указателей на функции, только создавать их (таблицы), инициализировать значениями и осуществлять доступ придется вручную, что чревато ошибками и кодом, далеким от идеала читабельности. Итого, по накладным расходам выйдет то же самое.

Согласен.
> пример, таблицы виртуальных функций.
Говорилось о возможных накладных расходах для С++ и не более. Дискуссию на эту тему можно закрывать.

2bullit
>Или чего-то в AVRStudio нехватает?
В вопросе только вопрос.
Разные IDE имеют разную функциональность, каждый выбирает то, что нравится.
Лично мне не нравиться сам редактор в AVRStudio, поэтому использую другую IDE. Возможно я склонен к использованию продуктов под GPL. crying.gif
bullit
Цитата
>Или чего-то в AVRStudio нехватает?
В вопросе только вопрос.

Вопрос был связан с тем, что нет ли где-то в сторонних продуктах чего-то еще, более удобного или продвинутого.
Цитата
Разные IDE имеют разную функциональность, каждый выбирает то, что нравится.

Вот я и выбрал AVRStudio по своим запросам.

Думаю дальнейшую дискусию по этому поводу можно закрыть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.