Forum: Mikrocontroller und Digitale Elektronik C-Standardfunktionen unter AVR Studio 6.2?


von Norbert (Gast)


Lesenswert?

Hallo!

als langjähriger, ehemaliger BASCOM-Nutzer möchte ich endlich auf C 
umsteigen und habe mir dafür (auf eine Empfehlung hin) Atmel Studio 6.2 
(Version 1563 SP2) installiert. Die ersten Gehversuche (auch unter 
Zuhilfenahme Eures AVR-GCC-Tutorials) sind durchaus erfolgreich, d.h. 
die Maschine macht tatsächlich, was ich will. Was mir jedoch schmerzlich 
fehlt, sind Standard-Funktionen, so wie ich sie unter BASCOM ganz 
selbstverständlich kannte. Ich würde mir durchaus zutrauen, die meisten 
der von mir benötigten Funktionen selber zu schreiben, aktuell z.B. eine 
Routine für die Umwandlung einer Fließkommazahl in eine Zeichenkette mit 
einer vorgegeben Anzahl Nachkommastellen (entsprechend der 
BASCOM-Funktion FUSING, z.B.

Str1 = FUSING(s1,"#.##")

- das nur mal als ein Beispiel von vielen!) Ich denke aber, es kann doch 
nicht sein, dass unter AVR-GCC, bzw. Atmel Studio jeder Anwender das Rad 
neu erfinden muss! Natürlich habe ich mitbekommen, dass es in Atmel 
Studio 6.2 irgendwo irgendwelche Headerdateien gibt, die man bei Bedarf 
einzubinden hat. Und mithilfe des Windows-Explorers habe ich in den 
Tiefen der AVR-Studio-Verzeichnisstruktur auch einige davon aufspüren 
können - was mir allerdings nichts gebracht hat, den meist fand ich nur 
seitenlange Compilerdirektiven ("#ifndef...") und extern-Verweise auf 
die eigentlichen Funktionen.

Im Web fand ich eine Standard-Bibliothek namens avr-libc. Aber die 
scheint wohl eher für WinAVR geschrieben worden zu sein (wobei ich den 
Eindruck habe, dass WinAVR eine ältere Entwicklungsumgebung, 
vergleichbar mit AVR Studio, jedoch inzwischen offenbar "tote" Umgebung 
zu sein scheint). Bevor ich jetzt avr-libc als "artfremde" Datei 
einbinde, richte ich meine Frage an Euch:

Gibt es irgendwo eine komplette Übersicht und darüber hinaus auch 
konkrete Hinweise für den Gebrauch der einzelnen unter Atmel Studio 6.2 
verfügbaren Standard-Funktionen und wenn ja: wo finde ich diese? 
Zunächst nur für die normalen 8-Bit-ATMegas, später gerne auch für XMega 
und vielleicht sogar für AVR32.

Vielleicht muss ich noch nachtragen, dass bei mir die F1-Hilfe unter ARV 
Studio 6.2 nicht funktioniert. Da öffnet sich zwar ein Fenster 
("Microsoft Help Viewer 1.1"), aber hier steht nur "Auf dem Computer 
wurden keine Inhalte gefunden." (obwohl ich eine Standard-Installation 
von AVR Studio 6.2 durchgeführt hatte). Und wenn ich dann in diesem 
Fenster die Option "online" wähle und einen bestimmten Suchbegriff 
eingebe(z.B. "Standardfunktionen"), hilft mir das angebotene 
Kauderwelsch in keinster Weise weiter.

Ich sag schon mal Danke für Eure Antwort!

Norbert

von Cbo (Gast)


Lesenswert?

Wie hast du denn die Bascom Funktionen gelernt? Die kamen dir wohl auch 
nicht einfach zugeflogen. Also ich würde googlen nach float in string in 
C. Unter den Treffern steckt dann irgendwo sprintf. Das ist noch viel 
mächtiger als das was du vorhast. Ein fltoa gibt's glaube ich auch, weiß 
aber nicht ob das in der Stdlib ist.
LG

von Sebastian V. (sebi_s)


Lesenswert?

Du suchst wohl die C-Standard Bibliothek. Die sollte mit deinem Atmel 
Studio schon mit installiert worden sein. Hier ein paar Links mit 
Dokumentation der Standard Bibliothek:

http://www.cplusplus.com/reference/clibrary/
http://en.cppreference.com/w/c/header

Zu deinem FUSING Beispiel kannst du dir mal sprintf anschauen. Die 
Funktion kann allerdings deutlich mehr und braucht entsprechend viel 
Speicher im Flash und ist möglicherweise langsamer als andere spezielle 
Lösungen.

von Stefan E. (sternst)


Lesenswert?

Norbert schrieb:
> Bevor ich jetzt avr-libc als "artfremde" Datei
> einbinde, richte ich meine Frage an Euch:

Die AVR-Libc ist weder "artfremd", noch musst du sie extra einbinden. Du 
benutzt sie längst. Und deren Doku sagt dir auch, was von der 
C-Standard-Bibliothek alles implementiert ist, welchen Besonderheiten 
und Einschränkungen es gibt, etc.

von Norbert (Gast)


Lesenswert?

Hallo Cbo, Sebastian und Stefan,

Euer Forum ist ja unglaublich schnell, habe meinen Thread kaum noch 
gefunden - Respekt! Ganz herzlichen Dank für Eure Antworten!

@Cbo:
Das Erlernen der Bascom-Funktionen war wirklich kinderleicht. Sofern man 
wirklich voll aufm Schlauch steht (und nicht bereits eine 
context-bezogene Frage hat), platziert man den Cursor auf eine leere 
Stelle im Code und ruft mit der F1-Taste die allgemeine Hilfe auf. Unter 
dem Reiter "Index" findet man sofort eine komplette, alphabetisch 
sortierte Liste aller Funktionen (es sind mehrere hundert). Hier 
doppelklickt man auf einen Eintrag, den man für möglich hält, nehmen wir 
als Beispiel die Funktion STR ("Returns a string representation of a 
number"). Beim Doppelklick öffnet sich rechts daneben die genaue 
Beschreibung dieser Funktion nebst Verwendung aller verfügbaren 
Parameter und ein Code-Beispiel. Und jetzt kommts: Für den Fall, dass 
dies nicht die gesuchte Funktion war, gibt es die Rubrik "See also". 
Hier werden ähnliche Funktionen aufgelistet, in diesem Fall sind das 
VAL, HEX, HEXVAL, MCSBYTE, STR2DIGITS und FUSING. Da braucht man 
wiederum einfach nur draufzuklicken (nehmen wir z.B. FUSING) und sofort 
erscheint die ausführliche Beschreibung eben dieser Funktion und darin 
erneut weitere Möglichkeiten. Im Beispiel sind das die Funktionen FORMAT 
und CONFIG SINGLE, usw...

Auf diese Weise erschließt sich nahezu spielerisch und vollkommen 
stressfrei das komplette Funktionen-Spektrum - und das sogar ohne 
irgendeine Header-Datei, deren Namen man erst einmal kennen muss bevor 
man an die Funktionen heran kommt. Bascom ist also echt leicht zu 
lernen, nach meinem Empfinden wesentlich leichter als C. Der einzige 
Nachteil: Es ist eine Insellösung. Nur deshalb will ich C lernen.


@Sebastian:
Die von Dir genannten Links (inclusive der dahinter stehenden einzelnen 
Beschreibungen) sind genau das, was ich nun schon seit Wochen gesucht 
hatte - herzlichen Dank dafür! Ich habe sie mir sofort in meine 
Favoritenliste eingetragen.

Die printf-Funktion begegnete mir bereits in sämtlichen mir zugänglichen 
C-Lehrbüchern - die sich aber leider immer nur mit PC-Programmierung 
befassten. Ein ordentliches (gebundenes) Lehrbuch über die 
Programmierung von Mikrocontrollern unter C habe ich leider noch nicht 
gefunden - kennst Du eventuell eines?

Ich nahm an, dass printf nur für die Ausgabe auf den PC-Bildschirm 
geeignet ist. Erst jetzt habe ich begriffen, dass es neben printf auch 
noch verwandte Funktionen gibt, u.a. sprintf für die Ausgabe in eine 
Zeichenkette  - also genau das, was ich gesucht hatte! Ob die Funktion 
zu mächtig ist, werde ich noch prüfen. Auf jeden Fall gefällt mir die 
variable Anzahl an übergeben Variablen (bzw. auch die dahinter stehenden 
"Variadic functions" - auch nach soetwas  hatte ich schon lange 
gesucht).


@Stefan:
Die Vermutung, dass in meinem AVR-Studio längst eine Standard-Library 
enthalten ist, hatte ich ja auch. Nur nach deren Dokumentation, die Du 
erwähnst, suche ich bis jetzt vergeblich. Kannst Du mir dazu einen Tipp 
geben?

Viele Grüße

Norbert

von Stefan E. (sternst)


Lesenswert?

Norbert schrieb:
> Nur nach deren Dokumentation, die Du
> erwähnst, suche ich bis jetzt vergeblich. Kannst Du mir dazu einen Tipp
> geben?

???
Was genau muss man denn bei Google eingeben, um die Dokumentation zur 
AVR-Libc nicht zu finden?

von Stefan E. (sternst)


Lesenswert?

Norbert schrieb:
> Ich nahm an, dass printf nur für die Ausgabe auf den PC-Bildschirm
> geeignet ist.

Du kannst die Ausgabe "umleiten", so dass du mit printf z.B. direkt auf 
die serielle Schnittstelle schreiben kannst.

von Norbert G. (realist_50)


Lesenswert?

Hallo Stefan,

ich bin ein strikter Befürworter integrierter Lösungen (weil nur dann 
wirklich gewährleistet ist, dass alles zusammen passt). Ich hatte 
gehofft, dass es unter ARV-Studio selbst eine Dokumentation zu den darin 
integrierten Standard-Funktionen gibt.

Die Sache mit dem Umleiten der printf-Funktion werde ich mir ansehen - 
Danke!

Viele Grüße

Norbert

von (prx) A. K. (prx)


Lesenswert?

Norbert schrieb:
> Die Vermutung, dass in meinem AVR-Studio längst eine Standard-Library
> enthalten ist, hatte ich ja auch. Nur nach deren Dokumentation, die Du
> erwähnst, suche ich bis jetzt vergeblich. Kannst Du mir dazu einen Tipp
> geben?

http://www.nongnu.org/avr-libc/

von (prx) A. K. (prx)


Lesenswert?

Norbert G. schrieb:
> ich bin ein strikter Befürworter integrierter Lösungen (weil nur dann
> wirklich gewährleistet ist, dass alles zusammen passt).

Die Lösung von AVR selbst ist eine Zusammenstellung von eigenen 
Produkten und Fremdprodukten und stellenweise merkt man das. Dafür aber 
ist sie kostenlos. Eine vollintegrierte Lösung bekommt man sicherlich 
bei den üblichen Verdächtigen wie IAR - aber nicht ganz so kostenlos.

Bei BASCOM ist die Situation insoweit anders, als eine solche 
Insellösung sich nicht auf andere Produkte stützen kann.

: Bearbeitet durch User
von Stefan E. (sternst)


Lesenswert?

Norbert G. schrieb:
> ich bin ein strikter Befürworter integrierter Lösungen

Wenn dir die Doku lieber ist, die Atmel "integriert" hat:
http://www.atmel.com/webdoc/avrlibcreferencemanual/

von Norbert G. (realist_50)


Lesenswert?

Hallo an alle, die mir geschrieben haben,

fürs Entpacken der nongnu-Doku

http://www.nongnu.org/avr-libc/

mit der Endung .bz2 hätte ich für 35 Euro ein kostenpflichtiges 
Zip-Programm runterladen müssen. Von der kostenlosen Testvariante habe 
ich vorsichtshalber und fairerweise Abstand genommen. Hingegen kam ich 
an die unter AVR-Studio "integrierte" Variante

http://www.atmel.com/webdoc/avrlibcreferencemanual/

sofort dran. Ich vermute, dass der Inhalt der gleiche ist. Allerdings 
dauerte es eine Weile bis ich auf die von mir gesuchte Auflistung und 
Beschreibung der einzelnen Funktionen stieß; sie steht im 
Inhaltsverzeichnis ziemlich weit unten unter "Modules".

Vielen Dank an alle!

Norbert

von (prx) A. K. (prx)


Lesenswert?

Norbert G. schrieb:

> fürs Entpacken der nongnu-Doku

Die steht dort auch ungepackt unter "Online Users Manual":
http://www.nongnu.org/avr-libc/user-manual/index.html

> mit der Endung .bz2 hätte ich für 35 Euro ein kostenpflichtiges
> Zip-Programm runterladen müssen.

Oder das kostenlose 7-zip.

: Bearbeitet durch User
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.