We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

03A.1 Programmierbeispiel Teil 1, Top-Down-Entwicklung, MSP430-Projekt einrichten, C-Funktionen

00:00

Formal Metadata

Title
03A.1 Programmierbeispiel Teil 1, Top-Down-Entwicklung, MSP430-Projekt einrichten, C-Funktionen
Title of Series
Number of Parts
35
Author
License
CC Attribution - NonCommercial - ShareAlike 3.0 Germany:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal and non-commercial purpose as long as the work is attributed to the author in the manner specified by the author or licensor and the work or content is shared also in adapted form only under the conditions of this
Identifiers
Publisher
Release Date
Language
Producer

Content Metadata

Subject Area
Genre
Programming languageRoute of administrationProgrammer (hardware)ProgrammablaufQuicksortBerührung <Mathematik>CalculationFlussdiagrammFlowchartElectronic visual displayWhiteboardComputer animation
PlatteProgrammer (hardware)Computer fileDesktopProject <Programm>Systems <München>Atomic nucleusSource codeComputer animation
Computer fileC++Text editorSource codeC sharpAtomic nucleusProgramming languageOpenOffice.orgComputer animation
File formatInformationZahlProgrammer (hardware)IntegerComputer fileTable (information)MATLABComputer animation
Function (mathematics)Variable (mathematics)Floating pointBitPlane (geometry)CalculationComputer animation
ZahlComputer programmingCompilerCompilerComputer fileC++Project <Programm>While-SchleifeSystems <München>FlussdiagrammSequelLaceComputer animation
MathematicsComputer programmingFlussdiagrammWordFluxWorkstation <Musikinstrument>DiagramInformationVariable (mathematics)SineRhombusComputer animation
InformationProgramming languageZahlFunction (mathematics)Variable (mathematics)FlussdiagrammIntegerSoftware developerProgrammierstilProzessorEmailProject <Programm>Parameter (computer programming)Statement (computer science)InternetdienstProgrammer (hardware)Mathematical structureWordotto <Programmiersprache>Switch <Kommunikationstechnik>Computer animation
Transcript: German(auto-generated)
Folgendes Programmchen möchte ich heute mit Ihnen bauen. Ich mal jetzt mal das Flussdiagramm. Und zwar soll er die Temperatur von diesem Chip messen. Man hat nicht allzu viele Möglichkeiten, solange man nichts anschließt. Aber eine Sache, die man machen kann, ist, dass man, wie er den Chip, der auf dem Loungepad sitzt,
dass man den fragt, was denn seine Temperatur ist. Ist ein bisschen grob, aber das soll reichen. Also der erste Schritt. C zum Beispiel ist die aktuelle Temperatur des Chips. Dann machen wir es mal ganz rüber. Doppelpunkt gleich, wie im Flussdiagramm üblich. Temperatur des Chips schreibe ich jetzt nicht ausdrücklich hin.
Und dann möchte ich Folgendes tun. Er soll regelmäßig weiter die Temperatur messen. Erst wird er definiert als Temperatur. Regelmäßig weiter die Temperatur messen und feststellen, ob die neue Temperatur über oder unter der alten Temperatur ist.
Es gibt zwei Leuchtioden. Die kann man nicht gut erkennen. Unten sitzen zwei Leuchtioden auf. Dann die zwei Leuchtioden anschalten. Die rote oder die grüne. Je nachdem, ob die neue Temperatur größer oder kleiner ist. Also ich möchte hier feststellen, ist die neue Temperatur größer,
als die, die ich zu Beginn gemessen habe. Rote. Wenn ja. Wenn nein. Wenn sie größer ist, möchte ich die rote LED anschalten auf dem Board.
Und wenn sie nicht größer ist, also kleiner oder gleich, möchte ich die grüne LED anschalten. Das hier ist mein Programmablaufplan. Wenn wir damit fertig sind, fangen wir wieder damit an, nach der Temperatur zu gucken.
So soll das aussehen. Was ich jetzt sicher geschrieben habe, die rote LED an und die grüne aus. Oder schreibe ich das dazu? Ich schreibe es noch dazu, dann habe ich es richtig korrekt. Also wenn die neue Temperatur, die ich messe, größer ist, als die, die ich zu Beginn gemessen habe, die rote LED an und die grüne LED aus, dann haben wir wirklich das, was nachher das Programm betrifft,
die grüne LED aus. Und wenn die neue Temperatur kleiner, gleich der ursprünglichen ist, dann die grüne LED an und die rote LED aus. Dann kann man das mit Boardmitteln machen. Es gibt einen Taster auf dem Board, den man verwenden kann. Es gibt zwei LEDs, die man verwenden kann.
Und es gibt diesen eingebauten Temperatursensor, den man auch noch verwenden kann. Für alles andere muss man dann etwas anschließen. Das machen wir dann tatsächlich im Praktikum, etwas anzuschließen. Ich wollte das hier heute vorführen. Ein ziemlich billiges Programm.
Was fällt Ihnen an diesem Flussdiagramm auf? Was fehlt, was typischerweise im Flussdiagramm vorkommt? Das Ding hier läuft in der Enddurchschleife. Es fehlt das Ende. Startet, liest die aktuelle Temperatur ein, guckt nach der neuen Temperatur, guckt welche größer ist, schaltet die Leuchttioden an, so oder so, guckt wieder nach der aktuellen Temperatur,
soweit es nie endet. Das ist eine Enddurchschleife. Insofern etwas ungewöhnlich. Für normale Programme, die man dann auf dem PC laufen hat, aber für Programme, die man auf einem embedded circuit laufen hätte, ist das durchaus etwas Übliches. Das läuft so lange, bis einer den Strom abschaltet. Das muss einen definierten Startpunkt haben, wo es dann anfängt.
Aber ansonsten läuft es endlos. Das ist aber der häufigerste. Es fehlt der Stopp. Das Ende des Programms. Das möchte ich heute mit Ihnen zusammenbauen, damit Sie sehen, wie man in C-Programmierung vorgehen kann.
Das werde ich mit Ihnen zusammenbauen in C. Wenn Sie es mitticken, ist es vielleicht keine schlechte Idee, dann haben Sie noch die Übersicht auf dem eigenen Rechner. Die sieht man ja nicht allzu viele Programmzahlen. Es werden nachher doch etwa drei Bildschirme voll an Programmzahlen.
Ganz von vorne angefangen. Ich brauche ein neues Projekt in der Embedded Workbench, also Create New Project. Das ist in C und soll schon eine Main-Funktion haben. Die Funktion, die in jedem C-Programm vorkommen muss, die Funktion, die automatisch zu Beginn aufgerufen wird.
Das hätte ich gerne. Für die MSP430-Familie. Offensichtlich. Irgendwo ist noch ein falscher Pfad drin, macht nichts. Ich schreibe das in einen Ordner, den ich auf meinem Desktop vorbereitet habe namens Vorlesung 03.
Also sorgen Sie dafür, dass Sie irgendeinen Ordner haben, in dem das Ganze landet. Dann haben Sie ein bisschen aufgeräumt und das Ganze nicht verstreut. Die Teilnahme des Projekts. Machen wir also Vorlesung 03. Die Teilnahme des Projekts. Grubbel.
Ein bisschen Platz schaffen vielleicht. Damit er das Ganze auch sinnvoll speichern kann, brauchen wir jetzt noch einen Workspace. In diesem System können mehrere Programme nebeneinander in einem Workspace sitzen. Deshalb mache ich hier Save Workspace. Und in dem Workspace hier auch noch Vorlesung 03.
Hier gibt es dann ein Projekt. Eigentlich ein kleines Programmchen. In einem Workspace könntest du noch mehrere Projekte nebeneinander geben. Das wird uns die Semester nicht passieren.
Das wird uns glaube ich auch nächstes Semester in den anderen Systemen nicht passieren. Dass man mehrere Projekte nebeneinander hat. Insofern ist das jetzt hier so ein nötiges Übel, ein Workspace anzulegen. Sonst geht das leider nicht anders. Der Kern des Ganzen ist jetzt hier diese Datei. Main.c. Jetzt sollte ich dir einmal auf der Platte zeigen,
was wir jetzt haben. Wir haben ein Workspace, wir haben ein Projekt und anscheinend noch diversen anderen Kram, den uns das System automatisch reingeschrieben hat. Diese Erweckungsumgebung reingeschrieben hat. Der Kern des Ganzen ist diese Datei hier. Main.c, das ist das eigentliche Programm.
Der Quelltext des Programms, das ist nicht die Datei, die nachher dann auf dem Chip läuft. Aber das ist die Datei mit dem Quelltext, dem C-Programm, deshalb Punkt C. Bei C-Programm. Bei C++ wird es nicht CPP werden, bei C Sharp 1 C S. Bei Java Punkt Java,
bei PHP Punkt PHP, man es dann ganz faul und nennt einfach die Programmdatei mit dem Kürzel mit der jeweiligen Programmiersprache, die weiß was drinsteht. Diese Datei hier ist eine reine Textdatei, das soll ich auch noch mal klar machen. Wenn Sie die mit dem Texteditor hier mit dem Texteditor öffnen, kein Problem, das ist eine reine Textdatei.
Das ist nicht so etwas wie bei Goethe oder bei OpenOffice, wo noch wilde Geschichten an Formaten und Farben und was weiß ich immer querverweisend rein codiert sind, sondern wirklich Buchstabe für Buchstabe als Textdatei. Also keine übliche Geschichte an der Stelle. Main C, das ist das eigentliche,
worum es dann jetzt geht, diese Datei zu füllen. Ich werde mal so ein paar Sachen erstmal wieder rausnehmen. Das hier oben brauchen wir erstmal nicht, das nehmen wir gleich anders. Doppelstrich heißt ignoriere, was danach kommt. Sie sehen es hier schon in der Aktion, das ist nichts, was die Maschine lesen soll, das ist ein Kommentar.
Doppelstrich, Kommentar. In Matlab war der Doppelstrich Prozentzeichen. Was im C ganz was anderes ist, natürlich, das haben wir letztes Mal gesehen, Prozentzeichen in C heißt dem Rest Modulo. In Matlab war das Prozentzeichen das Kommentarzeichen. Hier ist dieser Doppelstrich das Kommentarzeichen.
Das nehme ich auch nochmal weg, dass man wirklich hier so ein ganz reinreißiges C-Programm haben muss, nichts tut. Also mein Programm ist jetzt nur die Main-Funktion. Das System ruft nachher automatisch die Main-Funktion auf, übergibt ihm nichts und erwartet, dass
es eine ganze Zahl zurückkriegt. Das heißt, dass hier eine Funktion namens Main, die nichts kriegt, keine Informationen kriegt, und zum Schluss eine ganze Zahl zurückliefern soll. Das macht man typischerweise als Fehlermedung. Hier steht return null, gebe die Zahl null zurück am Ende des Programms. Mit der null sagt man typischerweise, es ist kein Fehler aufgetreten. Wenn Sie hier den Minus
irgendwas hinschreiben, heißt das typischerweise, es ist ein bestimmter Fehler aufgetreten und dafür gibt es dann hier die 345 in einem Code, den man in einer Tabelle nachgucken kann. Das wäre das kürzeste C-Programm, eine Hauptfunktion. Das Programm ist nur die Hauptfunktion,
die wird aufgerufen, sie endet sofort und gibt den Wert null zurück, um zu sagen, es ist nichts Schlimmes passiert, kein Fehler aufgetreten. Jetzt können wir hier anfangen reinzubasteln, was man denn alles so bräuchte. Ich möchte gerne in einer Variablen
namens T Stift machen, ich möchte gerne in einer Variablen namens T die aktuelle Temperatur haben, die soll geholt werden und in einer Variablen namens T gespeichert werden. Das heißt, ich brauche erstmal so eine Variablen namens T, erstmal nur
ganzzahlige, das ist, was diese Maschine mag, alles andere, Gleitkomma und so weiter, mag diese Maschine überhaupt nicht, weil es zu dick wird. Ich sollte sagen, alles andere. Gleitkommazahlen mag sie nicht, alles, was nicht ganzzahlig ist, mag sie nicht. Und int ist das übliche Ganzzahlformat, das mag es ganz besonders. Also, ich möchte
den aktuellen Wert der Temperatur holen. Nur, was ich, man wisst mir überhaupt nicht, wie das jetzt geht, auf diesem Chip, ich hab's in der Info aufgeschrieben. Was ich mache, wenn ich anfange so ein Programm zu schreiben, oder genauer gesagt, wenn ich so ein Programm übersetze, hier von meinem Flussdiagramm, in C,
ich setze dafür erstmal Funktionen ein, Platzhalter. Ich schreibe die ganz dreistige Temperature, in der Form, und verlasse mich darauf, dass ich irgendwann später so eine Funktion baue, die genau das dann tut, die aktuelle Temperatur holen.
Wer weiß, was innen drin passiert, interessiert mich erstmal gar nicht. Ich möchte mein Programm auf ganz hoher Ebene relativ abstrakt hinschreiben. Top down heißt das gerne, vom Ansatz her. Ich kümmere mich erstmal nicht um die einzelnen Bits und Bites auf dem Rechner, irgendwelche Schalter auf dem Rechner, sondern ich schreibe sehr abstrakt hin, hole die Temperatur,
schalte diese Leuchttiode an, verschicke eine E-Mail, lese diesen oder jenen Börse, ohne mir genau darüber klar zu sein, wie denn das nun tatsächlich funktionieren soll. Das wäre top down. Der übliche Ansatz, wie man sowas programmiert. Sie fangen oben an, bei dem menschlichen Sicht auf das System, ganz abstrakt, top, und arbeiten sich dann runter.
Top down Entwicklung. Top down Programmierung. So sieht das dann in C aus. Ich sage einfach, angenommen, ich hätte so eine Funktion, die ich einfach fragen kann, was die aktuelle Temperatur ist, dann würde ich die jetzt verwenden. In der Form.
Was für eine Konstruktion müsste dann danach kommen in C? Das hatte ich letztes Mal schon vorgeführt, dass man beim Übersetzen von Plusdiagrammen in C-Programme an einigen Stellen ein bisschen großzügig sein muss. Hier ist eine Schleife, so rum oder so. Das ist eine Schleife. Und eine Schleife verlangt
irgendwas wie while oder for in C. Ich werde also hier sinnvollerweise eine while-Schleife machen. Warum keine for-Schleife? Also die beiden großen Schleifen, while, einschließlich do-while und for. Die for-Schleife würde ich verwenden, wenn ich mitzähle. Aber hier bin ich ja nicht gezählt. Ich zähle ja nicht die
Zahl der Durchläufe. Erstens ist es endlos. Was schon komisch wäre, für eine for-Schleife endlos zu machen. Und zweitens zähle ich gar nicht die Zahl der Durchläufe mit. Wenn ich zähle, dann wäre eine for-Schleife schick. Das hier schreit nach einer while-Schleife. Eine endlosschleife in while formuliert. Also while mit einer Bedingung, die niemals
falsch werden kann. Eine while-Schleife. Hier kommt jetzt eine Bedingung rein, die niemals falsch werden kann. Ich werde niemals abbrechen, ob Sie in dieser Form. Wie schreiben Sie eine Bedingung, niemals abzubrechen?
Der Trick ist sich zu erinnern, dass man diese Wahrheitswerte hat. Hier steht dann nicht im Vergleich, so lange wie T größer ist als 42, diese Schleife auszuführen. Sie soll da ständig passieren. Diese Fortsetzungsbedingungen, keine Abbruchbedingungen, diese Fortsetzungsbedingungen hier in den Klammern, soll immer wahr sein.
Ständig fortsetzen. Immer wahr, ganz einfach true. Der Wahrheitswert, der ständig wahr ist. Damit das in C funktioniert, braucht man leider hier oben noch eine Ergänzung. Doppelkreuz include und dann in Spitzenklammern
std bool.h In den neueren Sprachen braucht man das nicht, insbesondere braucht man das in C++ nicht. In C braucht man das. Das gibt mir die erste Chance zu sagen, was denn das jetzt hier heißen soll. Das sieht wirklich aus wie größere Partie. Dieses Doppelkreuz include heißt,
liebe System, genauer gesagt lieber Compiler, öffne diese Datei und lese alles aus dieser Datei ein und tue so, als ob das hier drinnen stünde. Die Suchen und Ersetzen. Den Inhalt dieser Datei ist dann nach bool.h, die wird mitgeliefert im System, deshalb steht die in Spitzenklammern. Der Compiler weiß, wo er die suchen muss, die gehört zum System.
In Spitzenklammern, deshalb. Er nimmt das, was in dieser Datei steht und tue so, als ob das hier oben alles drinnen stünde. Und in dieser Datei steht insbesondere, was true bedeutet. Das ist nämlich wahrscheinlich flich und ergreifend eins auf diesem System. Das brauche ich, damit er hier unten true kann.
Wir können hier einmal gerade übersetzen. Project Compiler. Ok, die Funktion GetTemperature kennt er nicht. Klar, die habe ich jetzt einfach dreist verwendet. Netterweise sind das nur zwei Warnings und nicht mal Fehler.
Absurderweise, nicht netterweise. Soweit sieht das gut aus. Man kann es einmal hier ohne das in Qt versuchen. Wenn ich dann kompiliere. Ihr seht, da haben wir jetzt einen Fehler. Da kennt er true nicht. Identify true is undefined. Damit er dieses true kennt,
müssen Sie hier oben diese Datei zum Phrase vorwerfen. In dieser Datei, standard pool.h, ist definiert, wie true geht und wie false geht. Was die bedeuten soll. Und nachher, Sie haben jetzt hier diese Geschichte hier oben. IO430, das sind anscheinend Spezialkisten für diese
Art von Chip, diese 430er Serie. Damit er die kennt, hier oben diese Datei. Punkt H heißt Header-Datei. Punkt C hieß das Ganze. Die C-Datei, diese Datei, hier ist die Punkt C-Datei. Punkt H soll heißen Header-Datei, weil diese Datei im Header, im Het, im Kopf, am Anfang,
am Vorspann der C-Datei typischerweise aufgerufen werden und eingebaut werden. Deshalb H-Header. Hat man in neuerer Sprache nicht mehr. In Java und C-Sharp insbesondere gibt es diesen Ärger hier nicht mehr. Die suchen sich das selber zusammen, die Systeme. Dann braucht man ja nicht die Hilfe.
In Java und C-Sharp gibt es etwas anderes, nämlich Import und Using. Aber das ist eine deutliche, sieht so ähnlich aus, ist aber von der Funktion her ganz was anderes. Bei C muss ich wirklich sagen, wo er jetzt welche Dateien er wo suchen soll. Und tatsächlich in die Datei hineinwenden soll. Okay, mit dem Standard-Dool H
sollte das vor allem hier unten wieder funktionieren. Und wir haben eine Endlosschleife. Da haben wir eine Endlosschleife und noch ein paar Ärgernisse hier drin. Insbesondere, dass diese Funktion ja frei erfunden ist. Aber hier habe ich jetzt eine Endlosschleife. Fein.
In der Endlosschleife, was mache ich in der Endlosschleife nun? Bevor Sie gucken, ob S größer ist als D, sehen Sie erst mal zu, dass Sie S auch tatsächlich kriegen. Das ist dann doch die selbe Zeile, die ich eben hatte. Aber mit S. Eine Variable S.
Und da bitte hole die Temperatur rein. Und dann gucke ich nach. Ist S, wie fand ich das eben, größer als T? Ist S größer als T? Dann tue das eine.
Und ansonsten, das wäre der mein Fall, aus dieser Raute raus, tue was anderes. So sieht das aus. Also dieser ganze Sermon hier, dieser ganze Sermon steht für
diesen Teil hier des Diagramms. Was ich jetzt noch nicht gemacht habe, ist LEDs an- und auszuschalten. Wenn ich auf diesem Niveau der Programmierung bin, dass ich sage, hole die Temperatur, verschicke eine E-Mail, lese die Börsenkurse. Wie mache ich das jetzt hier
sinnvollerweise mit den Leuchttioden? Was würden Sie hier sinnvollerweise reinschreiben für die Leuchttioden? Auf diesem Niveau der Abstraktion auf jeden Fall Funktionsaufrufe. Sowas wie Grüne. C kann leider keine Umlaute. C und C sharp können Umlaute. Grüne LED
an. Eine Funktion möchte ich aufrufen. Das kostet dann erst Überwindung, dass man da die runden Klammern dahinter schreibt. Das soll heißen, tatsächlich diese Funktion nicht nur beim Namen zu benennen, sondern diese Funktion wirklich aufrufen. Ich übergebe der Funktion nicht. Aus der Mathematik kennen Sie was für den Sinus von 42. Dann übergeben Sie die
42 an den Sinus. Hier im C gibt es ganz witzigerweise Funktionen, die nichts haben müssen. Die rufen Sie einfach auf. Das gilt ja schon für diese Main-Funktion. Mit dem L hier sage ich, diese Funktion braucht keine Information und will auch keine und darf auch keine weitere Informationen kriegen.
Die wird dann mit leeren Klammern aufgerufen. Also denken Sie vielleicht erst mal an Sinus und Cosinus, aber dann steht eben nichts in den Klammern drinnen. Ich gebe dem Ding nichts, sondern man muss ja nichts wissen. Er soll die grüne LED anmachen und er soll die rote LED ausmachen. Ich gebe dem einfach nichts.
Und bei dem L soll es genau umgekehrt Ich mache mal die rote LED aus. So rumt die rote LED aus und die grüne LED aus. So rumt die rote LED an und die grüne LED aus.
Bis dahin ist das einfach dieses Flussdiagramm praktisch eins zu eins übersetzt. Sie müssen sich dann erinnern, endlos schleifen oder überhaupt schleifen. Dann werden Flussdiagrammen nicht als sichtbare, werden schon als Schleifen sichtbar, aber es gibt keinen Extrabefehl.
In C und den Sprachen danach brauchen sie einen Extrabefehl für Schleifen. Die sind da strikter, dass man nicht quer durch die Gegend springen kann. So, diese Geschichte hier mit grüne LED an und rote LED aus, die könnte man noch
geschickter bauen. Wenn Sie daran denken, dass solche Funktionen ja auch Ihre Daten kriegen können, die Funktionen dürfen Parameter haben, sie können Argumente kriegen. Parameter oder Argumente, es gibt so eine feinsinnige Unterscheidung,
im Skript habe ich das ausgeführt. Wäre das sinnvoll vielleicht, wenn ich das so frage, natürlich wäre das sinnvoll. Es wäre sinnvoll, aus diesen vier verschiedenen Funktionen eine einzige zu machen. Was wäre da sinnvoll? Wie können Sie das zu einer einzigen Funktion machen?
Also das erste ist, wenn die grüne an ist, soll die rote aus sein. Das kann ich in eine Funktion einbauen. Das ist ganz brutal. Machen wir das dann so. Das geht dann mit einer Funktion. Wenn immer nur eine der beiden Leuchttioden an sein soll, kann ich das in eine Funktion packen,
die die eine anschaltet und die andere ausschaltet. Aber das kann ich jetzt auch noch vereinfachen, dass es hier nicht zwei gibt, sondern eine einzige. Schalter LED. Und da gebe ich einfach hier eine Information noch darüber, welche LED
angeschaltet werden soll. Und alle anderen LEDs, gibt es dann eine andere, sollen ausgeschaltet werden. Das meine ich dann implizit. Wie kann ich das hier bestücken? Was könnte ich da jetzt machen? Schalter LED. Und hier möchte ich einfach sagen, welche LED an und ausgeschaltet werden soll.
Ich dachte hier jetzt eigentlich an Zahlen, dass ich sage, die Leuchttiode 0 anschalten und die Leuchttiode 1 anschalten. Aber weil wir nur zwei haben, finde ich den Vorschlag ganz charmant, dass man True und False nimmt. True würde also heißen, schalte die rote an und die grüne
aus. Und False würde heißen, schalte die grüne an und die rote aus. So geben Sie dieser Funktion ein Stückchen Information mit. Tatsächlich dann nur ein Bit an Information, nur eine einzige Ja und Nein Information. Wenn Sie sagen Ja, soll diese Funktion wissen, die
rote? War das jetzt? Ja, die rote anschalten und die grüne ausschalten. Und wenn Sie sagen False, soll es genau umgekehrt sein. Dann habe ich hier nur noch eine einzige Funktion. Sie sehen, jetzt muss ich zwei Funktionen schreiben. Ohne die Temperatur diese Funktion recycle ich da. Ich muss eine Funktion schreiben, um die Leuchtjoden umzuschalten, und ihre Seite lege ich da. Da sieht man noch ein paar
Vorteile davon, mit Funktionen zu arbeiten. Ich schreibe nicht fürchterlich viel Prämborium an dieser Stelle, formuliere das aus in 5-6 Zeilen und formuliere das hier nochmal aus in 5-6 Zeilen, sondern das mache ich ganz woanders gleich. Und verweise einfach nur darauf. Wie so ein Querverweis auf eine Quelle in einem
Buch. Wenn Sie sagen, bei Herrn Harnock, Herrn Müller, und so und so und so viel, steht dieses, um zu verweisen mehrfach auf das Buch, haben Sie aber mehrere Verweise, aber schreiben nicht immer wieder den ganzen Literaturverweis, den ganzen Quellenverweis, genauso hier. Mehrere Verweise auf dieselbe Funktion.
Spart Platz, macht das Ganze einfacher, übersichtlicher, vor allen Dingen, weil Sie dem Ding einen Namen geben können. Wenn ich das hier ausformuliere, habe ich keinen Namen. Hier habe ich einen klaren Namen. Holt die Temperatur. Und dann kann ich mich in einem vernünftigen Programm auch darauf verlassen, dass diese Funktion, die heißt, holt die Temperatur, auch wenn ich die Temperatur holt
und nicht eine E-Mail versendet. Im schlechten Programm wird diese Funktion namens Holt die Temperatur eine E-Mail versenden, nach China, mit ihren Kontodaten. Im guten Programm tut diese Funktion das, wie sie heißt. Da müssen Sie auch nicht dran schreiben. Das ist ganz schlimm. Wenn Sie jetzt Holt die Temperatur, das ist völlig peinlich.
Holt die Temperatur. Bitte nicht solche Kommentare da dran schreiben, denn wenn Sie so einen Kommentar da dran schreiben müssen, heißt das, dass Ihre Funktion nicht korrekt benannt ist. Wenn die Funktion so heißt, wie das, was sie tut, wenn die Variable so heißt, wie das, was sie tut, T ist vielleicht noch nicht gut, wenn wir das Temperatur oder wie auch immer nennen.
Wenn alles so heißt, wie das, was es tut, dann brauchen Sie praktisch keine Kommentare mehr. Daran zeigt sich auch schon ein bisschen professioneller Programmierstil. Wenn Sie solche Kommentare brauchen, ist das nicht super professionell. Versuchen Sie, ohne Kommentare rauszukommen und stattdessen die Sachen ordentlich zu benennen.
Schalte LED und nicht G oder was, weil das kein Mensch, was gemeint ist. So, ich habe das netterweise Deutsch-Englisch gemischt, das ist auch nicht schön. Den nennen wir jetzt mal Twitch. Weil keine Umlaute erlaubt sind in C, finde ich es schöner, das dann auf Englisch zu beseiten, sonst sieht das ein bisschen komisch aus. Also ich bleibe jetzt mal
bei Englisch. Versuche ich mal. Das Ganze kondensiert auf zwei Funktionen. Ich war gerade dabei zu erzählen, warum Funktionen so nett sind. Letzter Vorteil, den ich erzählen will. Wenn Sie einen Fehler beseitigen, in der Temperaturhohe Funktion, dann ist der überall beseitigt,
weil die Funktion ständig wiederverwendet wird. Wenn Sie hier oben Ausbruch stabilieren, was es heißt, Temperaturen zu holen, und wenn Sie hier Ausbruch stabilieren, was es heißt, Temperaturen zu holen, und Sie beseitigen den Fehler da, dann haben Sie ihn da unten noch lange nicht beseitigt. Man sollte deshalb auch versuchen, nichts doppelt zu schreiben. Das ist ganz höllisch, wenn man einen Fehler sucht.
Garantiert vergisst man irgendwas, von diesen doppelt gemobbelten Sachen anzupassen. Das ist dann auch jetzt der allerletzte Grund, um möglichst viele Funktionen zu bilden. So, jetzt müssen wir vorsichtig weiter gucken. Das wäre jetzt die Übersetzung
von meinem Flussdiagramm in einem C-Programm auf hoher Ebene, wobei ich jetzt diese Funktion noch gar nicht gebaut habe. Und eine Sache würde man auch noch dazu nehmen. Ganz zu Beginn, wir sehen hier steht schon so einiges,
Watchdog Timer Control ist Watchdog Timer Password plus Watchdog Timer Hold. ganz, ganz absurde Geschichte, nicht absurde, ungewöhnliche Geschichte für diesen Prozessor, wenn Sie ein normales C-Lehrbuch auflagen, sehen Sie diese
Zeile, nicht? Das hatte ich schon gesagt. Das ist dafür da, dass der automatisch neu startet, wenn das Programm hängt. Das ist nicht ein Bestandteil von C, sondern eine spezielle Kiste für diesen Prozessor. Sowas möchte man ganz zu Beginn einstellen. Ich muss auch ganz zu Beginn einstellen, dass dieser Chip tatsächlich in der Lage ist, diese Temperatur zu holen. Ich muss auch ganz
zu Beginn einstellen, dass der Chip in der Lage ist, die Leuchte hier oben an- und auszuschalten, dass die entsprechenden Pins von dem Chip als Ausgänge dienen und nicht als Eingänge dienen. Typischerweise setzt man ganz an den Anfang von so einem Programm eine Funktion, die nennt sich Initialize.
In der Form. Und erledigt da alles, was an Einstellarbeiten nötig ist. Einmal Haushaltsarbeiten, einmal Aufräumen, alles richtig einstellen, alle Rolläden drauf, die Heizung anstellen, den Chip richtig konfigurieren. Dafür gibt es typischerweise ganz
am Anfang so eine Funktion namens Initialize. Da wird zum Beispiel dieses Gleich passieren. So, jetzt muss man sehen, ob ich wirklich alles habe. Das Äußere. Ja. So weit ist das der äußere Rahmen. Aber das läuft jetzt natürlich
noch nicht auf dem Chip. Weil der Chip nicht weiß, was Initialize heißt, weil er nicht weiß, was Get Temperature heißt, und weil er nicht weiß, was Digitality heißt. Ich kann das jetzt zwar kompilieren. Sie sehen, das gibt dann eben so diverse Warnungen. In anderen Programmiersprachen gäbe es nicht nur Warnungen, sondern es wäre schlicht
und ergreifend falsch. C ist viel zu großzügig an der Stelle. Ich habe nirgendswo gesagt, wie diese Funktion tatsächlich abläuft. Das darf niemals einfach nicht durchgehen. Hier geht es trotzdem durch mit einer Warnung. Seien Sie vorsichtig an der Stelle. Nehmen Sie diese Warnungen zur Kenntnis.
Typischerweise sind Warnungen, weisen Warnungen nicht nur auf mögliche Probleme hin, sondern typischerweise sind diese Warnungen auch echte Fehler. Sobald Sie Warnungen sehen, gucken sich die Warnungen durch, da wird man auch was tun müssen. Es gibt eine Warnung, hier unten,
die ist sehr spannend. Return Zero, dass zum Schluss der Fehler Null zurückgegeben wird. Wenn dieses Hauptprogramm beendet wird, das System geht hier in das Main rein, füllt mal ein Programmchen aus, und wenn dann zum Schluss das Programmchen beendet wird,
soll er als Fehler Null zurückmelden. Es ist kein Fehler aufgetreten. Warum mag er das hier nicht? Warum sagt der Statement ist unreachable? An der Stelle ist das System intelligenter als wir. Jetzt stelle ich fest, hallo, das hier ist ja eine Endlosschleife. Aus dieser Endlosschleife komme ich
niemals raus. Und wenn ich aus der Endlosschleife niemals rauskomme, dann ist das natürlich, dass ich nach der Schleife, aus der ich niemals rauskomme, noch was tue. Das sieht so aus, als ob es falsch wäre. Das meint der Dame. Statement ist unreachable. Dieses Kommando, sage ich mal am besten auf Deutsch, dieses Kommando wird
niemals erreicht. Ganz sicher niemals erreicht. Und das sieht komisch aus. Deshalb gibt er mir das als Warnung, ob ich das wirklich so meine. Das Einfachste hier ist, dass Sie das bekommentieren. Hier bei der Hauptfunktion kann man das tun. Der erlaubt der Standard das, dass man überhaupt nichts zurückgibt. Dann macht er automatisch null.
Ist so ein bisschen schräg. Ich mache das hier, um Tat zu machen, für den Compiler, dass ich das wirklich ohne irgendwelche weiteren Befehle dahinten meine. Ich muss mal ein Project compilten. Ups, hier steht zumindest jetzt nichts mehr davor. Sie könnten die Zeile auch
einfach rausnehmen. Dann sieht es aber so aus, als ob ich es vergessen hätte. Für andere Programmierer und Programmiererinnen, die dieses Programm lesen, schreibe ich so rein, dass die sehen, ich war nicht zu blöde, sondern ich weiß, was ich tue. Vielleicht sogar an dieser Stelle vielleicht sogar
mit einem Kommentar. Damit keine Warnung. An der Stelle wäre vielleicht ein Kommentar sogar sinnvoll. Dass die anderen Leute, die dieses Programm lesen, sehen. Ich habe daran gedacht. Das ist kein Fehler. Ich habe es nicht zufällig vergessen, sondern ich mache alles extra. Deshalb, dass ich da so drin stehe.
So, jetzt dürfen wir uns hier diesen übrigen Funktionen widmen. Also es gibt eine Funktion Get Temperature, die nimmt nichts entgegen, liefert aber eine Zahl zurück. Eine ganze Zahl. Eine andere Funktion, Switch LED, die will einen Bouchen wert haben, war oder
war falsch und liefert nichts zurück. Sie sehen, da steht nicht irgendwie was wie S ist gleich dreimal, was da rauskommt. Und hier gibt es die Funktion Initialize, die nichts wissen will und nichts zurückliefert. Die einfach nur den Chip richtig einstellt. Die drei muss man jetzt zum Nebener wecken.
Bis dahin, bis bis jetzt sind das einfach nur Platzhalter. Bis dahin, bis jetzt läuft es einfach noch nicht, das Programm.