Forum: Mikrocontroller und Digitale Elektronik ASF und C++ im Atmel Studio 7


von Godi S. (godi22)


Lesenswert?

Hallo,

verwendet jemand das ASF (Atmel Software Framework) und C++ im Atmel 
Studio 7?

Hier wollte schon mal jemand das selbe machen:
Beitrag "AS6, c++, asf"
Jedoch ohne Antwort.

Ich habe schon folgendes versucht:
http://onyxibex.com/2014/07/asf-with-c-project-in-atmel-studio/
Lässt sich dann aber nicht mehr kompilieren und die importierten Dateien 
aus dem ASF werden auch nicht angezeigt. Deshalb habe ich diesen Versuch 
verworfen.

Dann habe ich es über ein C-Projekt als Bibliothek versucht:
http://asf.atmel.com/bugzilla/show_bug.cgi?id=2838#c7

Hier bekomme ich ebenfalls beim Kompilieren einen Fehler:
1
Severity  Code  Description  Project  File  Line
2
Error    Error in generating MakeFile  TestCPP  TestCPP  0
3
4
Severity  Code  Description  Project  File  Line
5
Error    MakeFileGenFailureException captured - Nicht implementiert (Exception from HRESULT: 0x80004001 (E_NOTIMPL))  TestCPP  C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets  5

Bzw. den Output:
1
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "D:\Eigene Datein\Documents\Atmel Studio\7.0\TestCPP\TestCPP\TestCPP.cppproj" (target "Build" depends on it):
2
  Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Studio\7.0\Extensions\Application\AvrGCC.dll".
3
  Task "RunCompilerTask"
4
    Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils
5
C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets(5,5): error: MakeFileGenFailureException captured - Nicht implementiert (Exception from HRESULT: 0x80004001 (E_NOTIMPL))
6
TestCPP(0,0): error: Error in generating MakeFile
7
  Done executing task "RunCompilerTask" -- FAILED.
8
Done building target "CoreBuild" in project "TestCPP.cppproj" -- FAILED.
9
Done building project "TestCPP.cppproj" -- FAILED.

Kennt jemand eine Möglichkeit das ASF mit C++ Projekten im Atmel Studio 
7 zu verwenden?

godi

von Bernd Strobel (Gast)


Lesenswert?

Kennst du das?
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus

Da steht unter anderem:

Exceptions are not supported. Since exceptions are enabled by default in 
the C++ frontend, they explicitly need to be turned off using 
-fno-exceptions in the compiler options. Failing this, the linker will 
complain about an undefined external reference to __gxx_personality_sj0.

Ich persönlich habe das mit C++ auf einem 8bit MCU gelassen bzw gar 
nicht erst angefangen.

von Godi S. (godi22)


Lesenswert?

Danke für deine Antwort.
Gilt das ganze für die SAM Familie auch?
Das würde ich extrem schade finden denn die Leistung des SAM4E8C ist ja 
echt der Hammer und warum sollte man auf die Vorzüge von C++ überhaupt 
beim 11er bzw 14er Standard verzichten?

Naja wenn es wirklich nicht anders geht dann muss ich wohl C verwenden.

von Bernd Strobel (Gast)


Lesenswert?

Godi S. schrieb:
> Gilt das ganze für die SAM Familie auch?

Das weiß ich leider nicht. Als ich vor ein paar Wochen in die 
MCU-Programmierung eingestiegen bin, hab ich erstmal mit den 8-bit AVRs 
angefangen. Die verlinkte Seite ist für die avr-libc bzw. avr-gcc. Womit 
die SAM-Software gebaut wird, weiß ich leider nicht.

Das wäre aber mal interessant, es herauszufinden. Atmel macht da sicher 
kein Geheimnis draus.

von Bernd Strobel (Gast)


Lesenswert?

Vielleicht solltest du mal hier fragen: 
http://community.atmel.com/forums/atmel-cortex-m-mcus-0

von Godi S. (godi22)


Lesenswert?

Danke für deinen Hinweis auf das Atmel Forum,
ich habe dort einen Thread erstellt.
http://community.atmel.com/forum/atmel-studio-7-asf-and-c

von Godi S. (godi22)


Lesenswert?

Hallo,

ich habe es jetzt einmal geschafft, dass ich ein CPP Projekt kompilieren 
kann.

Dazu habe ich ein C und CPP Projekt erstellt und mal aus dem ASF Wizard 
die selben Pakete geladen. Danach habe ich die Einstellungen der 
Toolchains miteinander verglichen und im CPP angepasst. Die zusätzlichen 
Dateien die bei einem CPP Projekt angelegt werden habe ich entfernt und 
die main.c in main.cpp geändert. Die asf.h habe ich mit extern "C" 
aufgerufen.

So funktioniert es zum kompilieren, mehr habe ich noch nicht probiert, 
da ich noch keine Hardware dazu habe. Aber wenn ich dann die ersten 
LED's und FreeRTOS zum laufen gebracht habe, melde ich mich noch einmal.

godi

von MitLeserin (Gast)


Lesenswert?

C++ mit Templates für AVR / ARM / MSP430
*******************************************
https://github.com/KonstantinChizhov/Mcucpp

/examples mit vielen Beispielen

Kompilierbar in AtmelStudio6.2: GCC C++ executable project
**********************************************************
für AVR uC:
**********
Proj-Eigenschaften / Toolchain
******************************
Symbols                    F_CPU= 1234567U
Directories                /../../mcucpp
                           /../../mcucpp/AVR
Miscellaneous other flags -std=c++11

Beitrag "Re: DCF77 Uhr in C mit ATtiny26"

von Godi S. (godi22)


Lesenswert?

Hallo MitLeserin,

danke für den Link zu der Bibliothek, da werde ich mir sicher Ideen 
holen können.

Jedoch möchte ich schon das ASF verwenden, da es hierfür doch alles an 
Hardwareabstraktion gibt, was ich benötige (USB, SD-Card, RTC, USART, 
FreeRTOS, ...) und auch gute Beispiele dabei sind.

von Godi S. (godi22)


Lesenswert?

Bernd Strobel schrieb:
> Kennst du das?
> http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus
>
> Da steht unter anderem:
>
> Exceptions are not supported.

Godi S. schrieb:
> Gilt das ganze für die SAM Familie auch?

Meine Selbstantwort:
Gilt für die SAM Familie nicht. Also damit können in C++ Exceptions 
geworfen werden.

Da es mich aber ein paar Stunden gekostet hat das ganze zu Probieren und 
herauszufinden wie das funktioniert, hier eine Kurzanleitung:

Soll im AtmelStudio 7 C++ Exceptions erwünscht sein, dann muss folgendes 
eingestellt werden:

In der Toolchain von C und C++ müssen die Flags --exceptions hinzugefügt 
werden.
Siehe:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacgbadh.html
Warum für C? Siehe:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/CIHJDJEI.html

Ebenfalls das Flag -fno-exceptions bei C++ Optimization deaktivieren.

Dann sollte die ARM toolchain arm-none-eabi installiert werden.
Download: https://launchpad.net/gcc-arm-embedded
Bei den Projekt Properties Advanced muss noch der Pfad für die neue 
Toolchain eingestellt werden.

Wenn die ARM Toolchain nicht verwendet wird, sondern die Native Atmel, 
dann wurde das Programm zwar ohne Fehler kompiliert, jedoch endete eine 
Exception bei dem dummy_handler des ARM Exception-Vector und nicht in 
der catch Umgebung.

Das wars.
Nun viel Spaß mit den Exceptions. ;)


Btw.:
Da ich freeRTOS verwende habe ich auch den new Operator überladen, so 
dass der Heap von freeRTOS verwendet wird.
Also ohne FreeRTOS habe ich es nicht probiert ob es funktioniert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.