PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie geeignet ist C++ für Microcontroller?!



-C3P0-
26.07.2007, 12:17
Gibt es einen AVRCompiler der Problemlos C++ verarbeitet?
oder gibt es da irgendwelche Nebenwirkungen? :-s
würde mich nämlich interessieren weil ich grad eh c++ lern und dann von bascom umsteigen würde

p_mork
26.07.2007, 12:26
Hallo -C3P0-,

der normale AVR-GCC kann auch C++-Code compilieren. Ausser Exceptions sowie new und delete wird da so weit ich weiss alles unterstützt. Leider gibts es keine Standandard-C++-Lib für AVRs, aber man kann die benötigten Teile selbst schreiben.

MfG Mark

-C3P0-
26.07.2007, 12:38
mhh ok thx denk dann werd ich entweder mit C oder Bascom weitermachen, denn das mit den Libs is schon ein bisschen doof :-&

p_mork
26.07.2007, 13:06
Wenn Du willst kann ich Dir meine Lib geben. Dort gibt es die Klassen ostream und istream für einfache Ein- und Ausgabe sowie 2 Kontainerklassen LIFO und FIFO, die einem Stack und einer Warteschalnge entsprechen.

MfG Mark

-C3P0-
26.07.2007, 13:25
echt? das wär super kannst du die irgendwo uploaden?

p_mork
26.07.2007, 14:02
Klar.

Verwendung:
ostream:
Klasse zur Ausgabe von C-Strings sowie Zahlen über den Operator '<<'. Zusätzlich gibt es dort die Methode f(prog_char*), welche einen im Flash liegenden Sting einliest. Bei der Erstellung ist der erste Parameter der Zeiger auf die Funktion, über die ein Zeichen ausgegeben wird. Z.b..



#include "iostream.h"

using namespace std;

void uart_put_char(char c)
{
...//gibt ein zeichen über den Uart aus
}

int main()
{
ostream cout(uart_put_char);
cout<<"Hallo!"<<123<<endl;
}



istream: Klasse zur Eingabe über den Operator '>>'. Der erste Parameter ist ein Zeiger auf auf eine Funktion, die ein Zeichen einliest, der zweite auf eine Funktion, die ein Zeichen ausgibt. Z.b.:



#include "iostream.h>"

using namespace std;

void uart_put_char(char c)
{
...//gibt ein zeichen über Uart aus
}

char uart_get_char()
{
...//liest ein zeichen vom den Uart
}

int main()
{
int i;
ostream cout(uart_put_char);
istream cin(uart_get_char,uart_put_char);
cout<<"geben Sie eine Zahl ein>";
cin>>i;
cout<<"Sie haben "<<i<<" eingegeben"<<endl;
}



CFifo ist eine Warteschlange. Bei der Konstruktion ist der erste Parameter ein Zeiger auf den Buffer, wo die Werte aufbewahrt werden, der zweite die Größe des Buffers. Ich habe auf eine dynamische Speicherreservierung verzichtet, weil es Laufzeit und Speicher spart.


Methoden:
push_wait(wert): Waret, bis in dem Buffer wieder Platz ist und fügt dann den Wert ein.
push_nowait(wert): fügt den Wert ein, ohne zu warten bis eine Stelle frei ist. Sollte der Buffer bereits voll sein, wird der letzte Wert gelöscht.
pop(): wartet, bis mind. ein Wert in der Schalnge ist und gibt ihn dann zurück.
empty(): true wenn leer, false wenn nicht
full(): true wenn voll, false wenn nicht
operator[]: gibt das entsprechende Element der Schange zurück.


CLifo ist ein Stack. Die Parameter sind die gleichen wie bei CFifo.
Methoden:
push(wert): legt einen Wert auf den Stack
pop(): nimmt ein Wert vom Stack
top(): gibt das letzte Element zurück, ohne den framepointer zu dekrementieren.
empty(), full() und operator[] wie bei CFifo.

MfG Mark

-C3P0-
26.07.2007, 14:21
Danke! sehr hilfreiche Sachen bei^^

Superhirn
26.07.2007, 18:54
hallo!
ich empfehle dir aber eher C weil es um einiges perfomanter als C++ auf mikrocontrollern ist. obwohl C++ natürlich öfters sehr praktisch sein kann.

p_mork
26.07.2007, 19:17
Hallo Superhirn,

kannst Du mir für die höhere Preformance von C ein praktisches Beispiel geben?

MfG Mark

Superhirn
26.07.2007, 19:52
ich habs noch nie getestet aber es steht überall das C performanter ist. wenns echt nicht so ist dann hab ich heut was dazugelernt.

-C3P0-
27.07.2007, 09:53
nun ja ich denk ich versuchs erstmal mit c++ wenn dann irgendwelche Probleme mit dem Compiler o.ä. auftreten, die auf die "schelchte cppPerformance" zurückzuführen sind steig ich halt wieder auf basic um aber c will ich nicht vertiefen ich glaub das verwirrt wenn man recht unerfahren im proggen ist und dann c und c++ lernt hab beides grundsätzlich verstanden und die unterschiede sind mir auch halbwegs klar...

Superhirn
27.07.2007, 10:45
Zur performance: Basic ist auch nicht grade performant. Also das wär kein grund von C++ auf Basic umzusteigen.