Ich mache momentan meine erste Gehversuche mit C und dem Atmel Studio 7
und hätte hierzu einige Fragen.
Bisher habe ich in den letzten Jahren meine ATMegas unter Assembler,
Bascom und dann LunaAVR programmiert. Am PC arbeite ich unter Windows
mit vb.net. Als Buch habe ich "AVR Mikrocontroller Programmierng in C"
von Heimo Gaichler.
Hier meine Fragen. Um es euch leichter zu machen habe ich sie mit
Nummern versehen:
(1) Wie hilft man sich, wenn man eigentlich den boolscher Datentyp
benötigt?
Eine Variable kann den Wert wahr oder falsch einnehmen.
(2) Wie arbeitet man am besten mit float Variablen (single und double)?
(3) Gibt es gute Mathebibliotheken?
(4) Gibt es gute Bibliotheken um von dem einen Datentyp in den anderen
Datentyp umzuwandeln.
(5) Wie geht ihr mit Strings um, wenn es unter C keinen String-Datentyp
gibt? Wie löst ihr einfache Stringdarstellung und Stringoperationen (wie
z. B in Bascom oder LunAVR) mit Umwandlung der anderen Datentypen in
Strings um umgekehrt
(6) Welche Ausgaberoutinen/Bibliotheken mit Fifo über Uart haben sind
bewährt? Ganze Zahlen, Dezimalbrüche und Strings oder ein Gemisch von
ihnen?
Die Bibliothek von Peter Fleury habe ich ausprobiert. Ich habe aber noch
nicht verstanden, wie man mit ihr Zeichenfolgen ausgeben kann.
Gibt zu den Fragepunkten gute und bewährte Bibliotheken und vielleicht
auch Beispiele? Wie löst ihr solche Probleme? Bei mir kommt es oft nicht
auf echte Effizienz an, sondern mehr um Übersichtlichkeit und
Wartbarkeit des Codes.
(7) Weiterhin habe ich noch nicht verstanden warum man zwischen c und h
Dateien trennt. Muss ich wirklich in jede Function mit in die h-Datei
mit aufnehmen? Was passiert wenn ich es vergesse?
(8) Können beim Beenden einer Function auch mehrere Werte übergeben
werden?
Joern DK7JB .. schrieb:> (1) Wie hilft man sich, wenn man eigentlich den boolscher Datentyp> benötigt?> Eine Variable kann den Wert wahr oder falsch einnehmen.
Variable vom Typ "bool" nehmen.
> Wie arbeitet man am besten mit float Variablen (single und double)?
Double kann der AVR-GCC nicht und behandelt sie wie floats. Floats
kannst du normal benutzen, an Zahlen immer "f" anhängen: 12.35484f
> (3) Gibt es gute Mathebibliotheken?
libm.a => ist nativ eingebunden
> (4) Gibt es gute Bibliotheken um von dem einen Datentyp in den anderen> Datentyp umzuwandeln.
Ja, der sog. Cast
> (5) Wie geht ihr mit Strings um, wenn es unter C keinen String-Datentyp> gibt? Wie löst ihr einfache Stringdarstellung und Stringoperationen (wie> z. B in Bascom oder LunAVR) mit Umwandlung der anderen Datentypen in> Strings um umgekehrt
itoa, utoa usw.
> (7) Weiterhin habe ich noch nicht verstanden warum man zwischen c und h> Dateien trennt. Muss ich wirklich in jede Function mit in die h-Datei> mit aufnehmen? Was passiert wenn ich es vergesse?
Nee, nur wenn du sie außerhalb der c-Datei benutzen willst.
> (8) Können beim Beenden einer Function auch mehrere Werte übergeben> werden?
Nein, hierfür übergibt man Pointer
1. Man tippt sowas wie „c bool“ in die Suchmaschine seiner Wahl, und
findet dann z.B.
https://www.geeksforgeeks.org/bool-in-c/
2. Wenn es dafür keine Grund gibt, gar nicht. Ansonsten einfach
verwenden.
3. Sind im Lieferumfang des Compilers enthalten.
4. Nein. Für die eingebauten numerischen Typen macht C das automatisch,
für selbtsdefinierte Typen ist Handarbeit angesagt.
5. iota, sprintf, etc. Dazu die im Lieferumfang des Compilers
mitgelieferten Standard-Stringfunktionen.
6. Die libs funktionieren alle irgendwie gleich. Wenn du eine nicht
verstehst, verstehst du auch keine andere.
7. Hat was mit Definition, Deklaration, und Interfaces zu tun. Ist
einfach so. Nimm es einfach erst mal so hin.
8. Einzeln nicht, aber per struct.
Näheres zu allen deiner Fragen steht in dem C-Buch deiner Wahl.
Du wirst eins brauchen, egal, ob auf toten Bäumen, oder online. Ohne die
allereinfachsten Grundlagen zu kennen, geht es nicht.
Oliver
Joern DK7JB .. schrieb:> Ich mache momentan meine erste Gehversuche mit C und dem Atmel Studio 7> und hätte hierzu einige Fragen.> Bisher habe ich in den letzten Jahren meine ATMegas unter Assembler,> Bascom und dann LunaAVR programmiert. Am PC arbeite ich unter Windows> mit vb.net. Als Buch habe ich "AVR Mikrocontroller Programmierng in C"> von Heimo Gaichler.
Dann lies am besten erst einmal das Buch und arbeite vorhandene
Beispiele durch. Hilfreich ist, wenn man Deine Fragen anschaut, auch ein
C-Buch.
Das man nach ersten Gehversuchen einen ganzen Haufen Fragen hat ist gut
und normal. Allerdings sprengt der Umfang naturgemäß den Rahmen, in dem
ich darauf eingehen will - schlicht wegen der Menge an Text, die zur
Antwort notwendig wäre.
Das meiste, dass Du fragst, beantwortet eine C-Buch. Der Rest wird erst
dann wichtig, wenn Du das einigermaßen beherrschst.
Zwei der einfachen Fragen beantworte ich hier aber doch vorab ganz grob:
> (1) Wie hilft man sich, wenn man eigentlich den boolscher Datentyp
benötigt?
Man verwendet die vorhandenen Datentypen also zweiwertige Typen oder
eine C-Version, die so einen Typen definiert.
> (4) Gibt es gute Bibliotheken um von dem einen Datentyp in den anderen
Datentyp umzuwandeln.
Nein. C enthält bereits Operatoren um das zu erreichen. (Bei selbst
definierten Typen ist die Vielfalt notwendigerweise so gross, dass man
eventuell nötige Umwandlungen schneller selbst schreibt.
Joern DK7JB .. schrieb:> (1) Wie hilft man sich, wenn man eigentlich den boolscher Datentyp> benötigt?> Eine Variable kann den Wert wahr oder falsch einnehmen.
Da nimmt man einen Ganzzahltyp. 0 ist falsch, alles andere wahr.
Seit 1999 gibt esa aber auch eine bool Typ im Standard
> (2) Wie arbeitet man am besten mit float Variablen (single und double)?
Benutzen. Im Hinterkopf behalten, dass sie ungenau sind.
> (4) Gibt es gute Bibliotheken um von dem einen Datentyp in den anderen> Datentyp umzuwandeln.
flot, double von/nach Ganzzahl unterstützt der Standard
> (5) Wie geht ihr mit Strings um, wenn es unter C keinen String-Datentyp> gibt? Wie löst ihr einfache Stringdarstellung und Stringoperationen (wie> z. B in Bascom oder LunAVR) mit Umwandlung der anderen Datentypen in> Strings um umgekehrt
Die Erfinder von C haben auch eine Stringbehandlung eingeführt.
Diese arbeitet mit nullterminierten char-Arrays und ist allgemein als
C-String bekannt
> (7) Weiterhin habe ich noch nicht verstanden warum man zwischen c und h> Dateien trennt. Muss ich wirklich in jede Function mit in die h-Datei> mit aufnehmen? Was passiert wenn ich es vergesse?
Das brauchst du, wenn du mehrere Quellcodes bzw. Bibliotheken nutzt.
In der .h steht alles das drin, was andere Quelltexte brauchen.
Sollte bei der Lib von POeter Fleury auch so sein.
> (8) Können beim Beenden einer Function auch mehrere Werte übergeben> werden?
mittels struct oder Pointer
Joern DK7JB .. schrieb:> (1) Wie hilft man sich, wenn man eigentlich den boolscher Datentyp> benötigt?> Eine Variable kann den Wert wahr oder falsch einnehmen.
Der kleinste Datentyp dafür ist char: entweder 0 (=false) oder nicht 0
(=true). Da das mißverständllich ist, kann man sich das selbst machen
per
#define bool char
wenn das nicht schon irgendwo anders gemacht wurde.
Es ist in C ein ausgesprochenes Ärgernis in der Sprachdefinition, daß
char gleichbedeutend ist mit einem Integerwert, daß also keine Trennung
existiert zwischen numerischen Typen und Textzeichen. Damit muß man
leben.
> (2) Wie arbeitet man am besten mit float Variablen (single und double)?
Na eben benutzen. Je nach Chip-Typ mag das von der Hardware unterstützt
sein oder nicht.
> (3) Gibt es gute Mathebibliotheken?
Was verstehst du darunter? Komplexe Daten (re + im)? Oder
Approximationen, Fouriertransformationen und dergleichen? Sowas ist
eigentlich sprachunabhängig und nach Suchen auch für C zu kriegen.
> (4) Gibt es gute Bibliotheken um von dem einen Datentyp in den anderen> Datentyp umzuwandeln.
Im Gegensatz zu den strengeren Typregeln bei Pascal ist das bei C lax
gehandhabt. Ein single einem long zuweisen geht kommentarlos, man muß
lediglich sich merken, daß dabei der gebrochene Teil einfach
abgeschnitten wird. Also kein long=round(float)
> (5) Wie geht ihr mit Strings um, wenn es unter C keinen String-Datentyp> gibt? Wie löst ihr einfache Stringdarstellung und Stringoperationen (wie> z. B in Bascom oder LunAVR) mit Umwandlung der anderen Datentypen in> Strings um umgekehrt
C kennt keine Strings im Sinne von Basic oder Pascal, sondern nur
Arrays, die mehr oder weniger voll mit char's sein können, wobei das
Ende mit einem byte vom Wert 0 gekennzeichnet ist. String-Operationen
gibt es nicht. Stattdessen gibt es einiges an Bibliotheks-Funktionen wie
strstr, strlen, strcat und so weiter.
> (6) Welche Ausgaberoutinen/Bibliotheken mit Fifo über Uart haben sind> bewährt? Ganze Zahlen, Dezimalbrüche und Strings oder ein Gemisch von> ihnen?
Trenne das. Serielle Ströme wie das, was durch einen UART geht, sind
immer eine Übertragung von Zeichen, also char's. Ein Lowlevel-Treiber
für UART's soll also einzelne Zeichen (char) entgegennehmen und liefern.
Alles Andere soll separat da drauf gesetzt werden, also irgendwelche
Umwandlungen vom/ins Textformat erledigen und das der Ausgaberoutine
liefern.
Also nochmal: Zahlenkonvertierungen gehören nicht in Ausgaberoutinen.
> Gibt zu den Fragepunkten gute und bewährte Bibliotheken und vielleicht> auch Beispiele? Wie löst ihr solche Probleme? Bei mir kommt es oft nicht> auf echte Effizienz an, sondern mehr um Übersichtlichkeit und> Wartbarkeit des Codes.
Ja, es gibt bei vielen Leuten gute und bewährte Code-Stücke und Units,
die sie in ihrem persönlichen Portfolio haben. Auch bei mir. Aber da
gehen die Ansichten auseinander. Viele sind zu doof oder zu faul oder zu
"gläubig" und trauen sich nicht, irgend etwas SELBST zu tun.
Aber: Je mehr man sich auf Fremdcode verläßt, desto mehr muß man an
Anpaßarbeiten an's eigene Projekt leisten.
> (7) Weiterhin habe ich noch nicht verstanden warum man zwischen c und h> Dateien trennt. Muss ich wirklich in jede Function mit in die h-Datei> mit aufnehmen? Was passiert wenn ich es vergesse?
Das ist hier schon x-mal erläutert worden. Also lies das Forum.
C hat keinerlei Unit-System. Ersatzeshalber werden all die Dinge, die
andere Programmteile benötigen, um die Leistungen einer C-Quelle in
Anspruch zu nehmen, als Verweise in eine Include-Datei geschrieben. Die
wird i.Allg. mit .h als Endung versehen. Ist aber reine Konvention und
im Grunde dem Compiler egal.
Damit keine Diskrepanzen zwischen den Verweisen oder Prototypen in der
.h und dem eigentlichen "beef" in der .c entsteht, inkludiert man die .h
normalerweise auch in deren zugehörige .c - hierbei spielt es keinen
Leierkasten, daß die Dinge in der .h als "extern" deklariert sind.
> (8) Können beim Beenden einer Function auch mehrere Werte übergeben> werden?
Nein. Wenn man so etwas will, muß man sich einen Datentyp schaffen, der
mehrere Dinge enthält. Eben einen struct. So etwas kann man als Ergebnis
einer Funktion liefern. Möglicherweise gibt es hier aber chipspezifische
Einschränkungen.
W.S.
W.S.
>> (6) Welche Ausgaberoutinen/Bibliotheken mit Fifo über Uart haben sind>> bewährt? Ganze Zahlen, Dezimalbrüche und Strings oder ein Gemisch von>> ihnen?>> Trenne das. Serielle Ströme wie das, was durch einen UART geht, sind> immer eine Übertragung von Zeichen, also char's. Ein Lowlevel-Treiber> für UART's soll also einzelne Zeichen (char) entgegennehmen und liefern.> Alles Andere soll separat da drauf gesetzt werden, also irgendwelche> Umwandlungen vom/ins Textformat erledigen und das der Ausgaberoutine> liefern.> Also nochmal: Zahlenkonvertierungen gehören nicht in Ausgaberoutinen.>
Ich würde mich freuen, wenn ihr mir eines euer AVR-Programme in C zum
Lernen zur Verfügung stellen würdet, bei dem Strings über Uart
ausgegeben werden.
> Ja, es gibt bei vielen Leuten gute und bewährte Code-Stücke und Units,> die sie in ihrem persönlichen Portfolio haben. Auch bei mir. Aber da> gehen die Ansichten auseinander. Viele sind zu doof oder zu faul oder zu> "gläubig" und trauen sich nicht, irgend etwas SELBST zu tun.
Da mag ich dir nicht wiedersprechen. Aber mir helfen solche Programme
ungemein, wenn ich nachvollziehen kann wie andere ein Problem gelöst
haben.
Daher nochmals über sinnvollen Code oder kleine Programm zum Lernen
würde ich mich sehr freuen - Kontakt auch gerne über PN
... Und das soll nicht mit "zu doof oder zu faul " zu tun haben.
Beispiele würden die Lernkurve bei mir enorm erhöhen.
Zu Anfang sind eben überall große Hürden (auch wenn das normal ist ;-)
).
Auch wenn im Forum immer mal wieder gefragt wurde. Könnt ihr persönlich
ein bestimmtes aktuelles C-Buch empfehlen, welches wirklich gut ist (in
deutscher Sprache)?
Nein Google ist nicht kapuut und ich bin auch nicht zu faul...
Dein Link hilft mir noch nicht wirklich weiter, er ist mir bekannt und
er wurde auch schon vor meiner Fragestellung gelesen. Natürlich suche
ich auch mit Suchmaschienen im Netz. Anfänger könne nur sehr schwer die
Spreu vom Weizen trennen und sind daher oftmals auf Empfehlungen
angewiesen. Daher habe ich um Beispielprogramme von euch gebeten.
Joern DK7JB .. schrieb:> [...]> Dein Link hilft mir noch nicht wirklich weiter, er ist mir bekannt und> er wurde auch schon vor meiner Fragestellung gelesen. [...]
Hm. Dann schreibe vielleicht mal, was dieser Link konkret nicht für
Dich klärt. Welche Frage offen bleibt.
Du schreibst:
> Welche Ausgaberoutinen/Bibliotheken mit Fifo über Uart haben> sind bewährt?
"Bewährt" ist vermutlich nicht das treffende Wort.
Für mich heisst das, es funktioniert und nachdem es häufig angewendet
worden haben sich keine Fehler mehr gezeigt.
Meinst Du das so? Oder wie sonst?
Dazu muss man wissen, dass einem alten Ausspruch nach, jede Software
fehlerhaft ist.
Dann schreibst Du:
> Ganze Zahlen, Dezimalbrüche und Strings oder ein Gemisch von> ihnen?
, was einen Zusammenhang zwischen "bewährt" und Datentypen bzw.
Interpretation von Daten herstellt.
Das ist aber etwas merkwürdig, denn es gibt gar keinen solchen
Zusammenhang und, obwohl es prinzipiell möglich ist, dass neue Typen
erfunden werden, für die vorhandener Code sich noch nicht "bewährt" hat,
ist das doch vom Standpunkt eines Anfängers aus, eher unwichtig. Was
meinst Du dazu?
Du hast ja nun schon einen Code angeschaut. Den verstehst Du nicht.
> Die Bibliothek von Peter Fleury habe ich ausprobiert. Ich habe> aber noch nicht verstanden, wie man mit ihr Zeichenfolgen> ausgeben kann.
Es wäre wünschenswert, wenn Du da eine genaue Referenz angibst.
Nun, jedenfalls hast Du Dir Code angesehen und verstehst ihn nicht. OK.
Das kann vorkommen. Aber ohne zu wissen, was Du nicht verstehst, kann
man Dir nur raten im Internet nach anderen Code zu suchen, bis Du einen
findest, den Du verstehst.
Wir wissen ja gar nicht, was für Kriterien für Dich relevant sind. Und
"bewährt" passt nun irgendwie nicht zu Deinem Kenntnisstand, wie ich
oben schon erwähnte.
Kurz: Ich weiss eigentlich, trotz Nachdenken nicht, worauf Du eigentlich
hinaus willst.
So vom Gefühl her, meine ich, Du willst "es richtig" machen, von Anfang
an. Daher "bewährt". OK.
Leider ist das ein Anspruch, der aus meiner Sicht nicht sinnvoll ist.
Denn es gibt keine Garantie, dass irgendeine Darstellung vollständig
korrekt ist. Vielmehr ist in diesem Fach, wie in allen anderen, eine
ständige Näherung, ein ständiges Lernen notwendig. Alle Erkenntnis wird
beim Fortschreiten immer wieder ergänzt oder sogar umgeworfen. Zwar gibt
es dabei immer wieder kehrende Elemente, aber das sind eher ganz
einfache Dinge. In der Realität ist jedes neue Programm wie eine neue
Schöpfung. Jedes neue Programm von ein und dem selben Programmierer ist
(wenigstens ein bisschen) anders, weil jedes Problem anders ist.
Auf der Suche nach der ultimativen, der reinen Lehre wirst Du Dich
verzetteln und letztlich scheitern.
Ich würde empfehlen, erst einmal die Grundlagen zu lernen. Und in den
üblichen C-Büchern sind genug Beispiele vorhanden, die auch relativ
einfach sind.
Joern DK7JB .. schrieb:> Dein Link hilft mir noch nicht wirklich weiter, er ist mir bekannt und> er wurde auch schon vor meiner Fragestellung gelesen
Was daran verstehst Du denn nicht?
OK, dann greife ich eure Anregungen auf und versuche meine Hausaufgaben
zu machen. Ich werde ein kleines Programm erstellen mit einer Ausgabe
über UART. Auch die Quellen werde ich angeben. Dann kann ich meine
Frage(n) sehr viel konkreter stellen und ihr habt es leichter mit einer
Antwort. Vermutlich waren meine Fragen bisher auch zu 'globalgalaktisch'
;-).
Gebt mit bitte etwas Zeit.
Joern DK7JB .. schrieb:> bei dem Strings über Uart ausgegeben werden.
Du solltest erstmal C-Strings verstehen.
Dann ist dir das sofort klar.
Das geht auch am PC.
Ich habe nun ein kleines Projekt mit meinen Versuchen erstellt. Die
Fragen habe ich gleich in den Programmcode geschrieben. Vermutlich ist
es so am einfachsten. Der Code ist lauffähig.
Ich würde mich freuen, wenn ihr euch den Code mal ansehen und
kommentieren oder ergänzen würdet.
Als UART Bibliothek habe das Original von Peter verwendet.
Link: http://homepage.hispeed.ch/peterfleury/avr-software.html
Lauffähig soll der Code späer sein für den ATMEGA644P und ATMega328P.
Die "verbesserte" Version der Bibliothek kommt mit dem ATmega644P nicht
zurecht. Der Grund ist mir noch unbekannt. Ich habe auch nicht
verstanden wie der Controller-Typ übergeben wird. Das ist vielleicht das
Problem.
Link: http://beaststwo.org/avr-uart/index.shtml
Die letzten Beiträge von euch haben meine Suche nach der "richtigen
Lösung" gut beschrieben ;-)
Eigentlich suche ich soetwas wie der Print-Befehl von Bascom oder
deutlich schneller wie der von LunaAVR ;-) Es ist schwer sich von
gewohnten Bequemlichkeiten zu trennen :-(
P.S. zwei weitere Bücher sind bestellt.
Das kommt drauf an, wo die betreffende Datei zu finden ist.
Dateien, die mit Spitzklammern eingebunden werden, werden im sogenannten
"Include-Pfad" gesucht, Dateien, die mit Anführungszeichen eingebunden
werden, werden dort gesucht, wo die betreffende Quelldatei liegt.
In Deinem Beispiel liegen also main.c und uart.h im gleichen
Verzeichnis.
1
// Problem: Ausgabe von "Hallo Welt!"
2
// Wie bekomme ich die Worte in das buffer-Array? Gibt es daf¸r eine elegante Mˆglichkeit?
Du könntest uart_puts mit der Stringkonstanten aufrufen:
1
uart_puts("Hallo Welt!");
Du könntest aber auch mit einer der Stringfunktionen die Konstante in
das Array "buffer" kopieren und dann uart_puts so aufrufen, wie in
Deinem Quelltext.
Die Stringfunktion ist eigentlich strcpy, aber die ist hochgradig
gefährlich.
Das hat mit der Art der Interpretation von char-Arrays als Strings zu
tun. Wie Dir aufgefallen sein könnte, wird der Funktion "uart_puts" nur
das auszugebende Array (genauer: ein Pointer auf dessen erstes Element)
übergeben, nicht aber die Länge des Arrays oder die Anzahl der daraus
auszugebenden Zeichen.
Woher weiß "uart_puts" nun, wann es mit dem Ausgeben aufzuhören hat?
Die in C übliche Konvention ist es, das Ende eines Strings mit einem
besonderen Zeichen zu kennzeichnen, das ist '\0'. Das ist nur ein
Zeichen, nicht zwei Zeichen "\" und "0" (Stichwort zum Nachlesen in
Deinem C-Buch: Char-Konstanten und "escaping" von Sonderzeichen).
Dein Array enthält Platz für 20 Elemente, das bedeutet, daß es Platz für
19 darstellbare Zeichen enthält, denn das Ende des Array muss
gekennzeichnet werden.
Wenn Du nun strcpy verwendest, und damit versehentlich einen Text
kopierst, der länger ist als diese 19 Zeichen, dann knallt es.
strcpy kann zwar herausfinden, wie lang der Text ist, den Du als Quelle
angibst, nicht aber, wieviel Platz im Ziel zur Verfügung steht.
Deswegen gibt es strncpy, das ist ein um ein Längenargument
erweitertes strcpy. Dem wird mitgeteilt, wie viele Zeichen kopiert
werden können.
Allerdings ist strncpy wiederum selbst auch gefährlich, denn es verhält
sich anders, als man erwartet ...
Stichwort für Recherche für Dich: Unterschied zwischen strncpy und
strlcpy
1
// Problem: Ausgabe der float-Variablen c=4.345
2
// ???
3
// oder so etwas wie PRINT "Messung Nr" & num & " " Wert:" & " c Also Test plus float-Messwert
4
// Also Integer und Float in String umwandeln und alle mit weiteren Strings zusammenf¸hren
C kennt hierfür printf ("print formatted"), das es auch in einer
Variante gibt, die als Ausgabeziel ein char-array nutzt.
Dieser Funktion wird ein Formatstring, gefolgt von den auszugebenden
Variablen übergeben.
Allerdings ist diese Funktion sehr "mächtig", weil sie sehr feine
Formatierungsmöglichkeiten zulässt, und somit viel Codespeicher belegt.
Manche Programmierer scheuen sich daher, diese Funktion zu verwenden,
und basteln sich für ihre Anwendungsfälle geeignetere Funktionen, die
weniger Codespeicher belegen, weil sie nur bestimmte Teilfunktionen
erfüllen.
Hier ein Beispiel, wie der Gebrauch der /printf/-Funktion für Deine
Anwendung aussehen könnte:
1
// oder so etwas wie PRINT "Messung Nr" & num & " " Wert:" & " c
2
3
printf("Messung Nr %d Wert: %.2f\n", num, c);
(ich habe hier bewusst nicht die variante verwendet, die ihre Ausgabe in
einem char-Array unterbringt)
@ Joern
Tja. Also. Nun. ...
Es ist gut, dass Du Code geliefert hast. Sehr schön. Lobenswert.
Auch das mit der C und H-Datei hast Du richtig gemacht. Sehr schön.
Aber: ...
Deine Fragen deuten auf zweierlei hin.
Erstens: Wiederhole ich meinen Rat zunächst einmal mit einem C-Buch
anzufangen. Du stellst Fragen, die dort erklärt sind. Und es sind
wirklich Dinge, die ziemlich einfach sind und vermutlich (je nach Buch)
auch ziemlich nahe am Anfang erklärt werden. Das bezieht sich auf: Wie
kriegt man einen String in einen Buffer bzw. siehe meinen nachfolgenden
Rat.
Zweitens: Füge ich einen zweiten Rat meinem ersten hinzu. Lies den
Quelltext test_uart.c nochmal. Dort siehst Du ein Beispiel für den Fall,
nach dem Du fragst.
Ein bissl flexibel musst Du halt sein im Kopf. Wenn dort mal nicht
"Hello world" steht sondern ein anderer String, dann kann man dennoch
(erstmal) vermuten, dass die dort zu sehende Ausgabe auch mit "Hello
World" funktionieren könnte. :-)
Du kannst ja nichts kaputt machen. Probiers einfach aus. Es muss auch
nicht auf Anhieb klappen. Dann versuchst Du's nochmal.
Was die Auswahl des uC im AVR-Studio 7 betrifft, kann ich leider nichts
Konkretes sagen. Ich bin ein Version-4-Fan. Allerdings wird das irgendwo
in der Beschreibung stehen; der Bedienungsanleitung. Vermutlich ziemlich
am Anfang. Vielleicht gibt es so ein Kapitel wie "Quick Start" oder so.
Als Bonus noch ein dritter Rat: Beschränke Dich nie nur darauf zu sagen,
das irgendwas nicht funktioniert oder darauf, dass irgendein Code "nicht
akzeptiert wird". Gib immer an, was genau geschieht; woran Du siehst,
dass was nicht klappt. Wenn Fehlermeldungen ausgegeben werden, gib sie
an und zwar im Wortlaut.
Viel Erfolg.
Vielen Dank. Ich habe eure vielen Beiträge sehr aufmerksam gelesen. Sie
haben mir sehr geholfen und ich werde mir euren Rat zu Herzen nehmen.
>> Lies den Quelltext test_uart.c nochmal.
Arrg. Manchmal sieht man den Wald vor lauter Bäumen nicht ;-)
Dieser ganze Thread ist entstanden, da mir mein erstes Buch und die
Seiten die ich im Internet gelesen hatte nicht weiterhelfen konnten. Nun
sind zwei reine C-Bücher bestellt, die aber erst nach dem langen
Wochenende kommen. Hoffentlich werden sie mir weiterhelfen.
Das Buch "AVR-Mikrocontroller Programmierung in C" von Heimo Gaicher ist
gut für den Einstieg und die hardwarenahen Informationen. Letztlich geht
es nicht weit genug in die Tiefe, was aber auf den rund 350 Seiten
vermutlich auch gar nicht möglich ist - daher auch dieser Thread.
Auf dem Postweg sind nun: "C von A bis Z" von Jürgen Wolf und "Einstieg
in C" vom Thomas Theis.
Vermutlich können wir diesen Thread nun schließen.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang