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
:
Bearbeitet durch User
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)?
Joern DK7JB .. schrieb: > 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. https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART Google kaputt?
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.
:
Bearbeitet durch User
Danke.
1 | #include "uart.h" // hier < > oder " " verwenden? |
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)
:
Bearbeitet durch User
@ 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.