Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste ÜberarbeitungBeide Seiten der Revision | ||
light_systemtickuml [2020/01/28 10:19] – huwi | light_systemtickuml [2020/07/23 11:47] – [Erweiterung] huwi | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Der SystemTick ====== | ====== Der SystemTick ====== | ||
+ | {{tag> | ||
ARM Controller sind mit ihrer Leistungsfähigkeit prädestiniert für den Einsatz entsprechender Laufzeitumgebungen oder geeigneter Echtzeitbetriebssysteme. Solche basieren meist auf einer Timer-getriggerten Verteilung von Ressourcen, vor allem der Ressource Rechenzeit. Dafür steht beim ARM ein spezieller Timer zur Verfügung, der ausschließlich die Aufgabe hat, ein System-Trigger-Ereignis zu generieren. | ARM Controller sind mit ihrer Leistungsfähigkeit prädestiniert für den Einsatz entsprechender Laufzeitumgebungen oder geeigneter Echtzeitbetriebssysteme. Solche basieren meist auf einer Timer-getriggerten Verteilung von Ressourcen, vor allem der Ressource Rechenzeit. Dafür steht beim ARM ein spezieller Timer zur Verfügung, der ausschließlich die Aufgabe hat, ein System-Trigger-Ereignis zu generieren. | ||
Zeile 85: | Zeile 86: | ||
{{: | {{: | ||
- | für die Realisierung der geforderten Funktionalität ergänzen wir die folgenden Codes in den jeweiligen Ereignisfunktionen. Zuerst lassen wir in **onWork** | + | für die Realisierung der geforderten Funktionalität ergänzen wir die folgenden Codes in den jeweiligen Ereignisfunktionen. Zuerst lassen wir die rote LED blinken. Dazu stuern wir im 100 Millisekunden Ereignis die rote LED wie folgt an. |
- | + | ||
- | {{ : | + | |
- | > | + | |
- | static uint16_t dim=0; | + | |
- | + | ||
- | if (dim < 1000) | + | |
- | { | + | |
- | yellowLED.on(); | + | |
- | waitUs(dim); | + | |
- | yellowLED.off(); | + | |
- | waitUs(1000-dim); | + | |
- | dim++; | + | |
- | } | + | |
- | else if (dim <2000) | + | |
- | { | + | |
- | yellowLED.on(); | + | |
- | waitUs(2000-dim); | + | |
- | yellowLED.off(); | + | |
- | waitUs(dim-1000); | + | |
- | dim++; | + | |
- | } | + | |
- | else | + | |
- | { | + | |
- | dim=0; | + | |
- | } | + | |
- | </ | + | |
- | + | ||
- | Im 100 Millisekunden Ereignis | + | |
{{ : | {{ : | ||
Zeile 143: | Zeile 116: | ||
{{: | {{: | ||
+ | |||
+ | ===== Erweiterung ===== | ||
+ | Als nächstes erweitern wir die Anwendung so, dass wir das Ereignis **onWork()** welches fortlaufend aus der // | ||
+ | |||
+ | {{ : | ||
+ | > | ||
+ | // continuous event from the Mainloop | ||
+ | static uint8_t brightness=1; | ||
+ | yellowLED.on(); | ||
+ | for (int i=brightness; | ||
+ | yellowLED.off(); | ||
+ | for (int i=255-brightness; | ||
+ | </ | ||
+ | |||
+ | Erstellen, Übertragen und testen Sie diese Erweiterung. Experimentieren Sie mit verschiedenen Werten der Variablen **brightness** (1-255); | ||
+ | |||
+ | ===== Variante ===== | ||
+ | Das Dimmen der gelben LED können wir noch erweitern indem die LED selbständig auf und abblendet. Probieren Sie die folgende Variante. Sie werden Feststellen, | ||
+ | |||
+ | {{ : | ||
+ | > | ||
+ | static uint16_t dim=0; | ||
+ | |||
+ | if (dim < 1000) | ||
+ | { | ||
+ | yellowLED.on(); | ||
+ | waitUs(dim); | ||
+ | yellowLED.off(); | ||
+ | waitUs(1000-dim); | ||
+ | dim++; | ||
+ | } | ||
+ | else if (dim <2000) | ||
+ | { | ||
+ | yellowLED.on(); | ||
+ | waitUs(2000-dim); | ||
+ | yellowLED.off(); | ||
+ | waitUs(dim-1000); | ||
+ | dim++; | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | dim=0; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Vertiefen sie die Bedeutung des Schlüsselwortes **static** in C/C++ und warum dieses Schlüsselwort bei der obigen Lösung verwendet wurde. | ||
====== Videozusammenfassung ====== | ====== Videozusammenfassung ====== | ||
Erlernte und gefestigte Arbeitsschritte: | Erlernte und gefestigte Arbeitsschritte: | ||
+ | {{tag> | ||
- Klassendiagramm anlegen und öffnen | - Klassendiagramm anlegen und öffnen | ||
- Diagrammvorlage für PEC Applikation auswählen, laden und Treiberpaket für STM32F4 einfügen | - Diagrammvorlage für PEC Applikation auswählen, laden und Treiberpaket für STM32F4 einfügen | ||
Zeile 159: | Zeile 178: | ||
Und hier diesen Abschnitt wiederum als Videozusammenfassung. | Und hier diesen Abschnitt wiederum als Videozusammenfassung. | ||
- | <<< | + | <html> |
- | < | + | [[https://youtu.be/aDVGJbOlALY|oder die schnelle Version ohne Sprachkommentare]] |
- | ====== Übung ====== | + | ====== Übung |
Ändern Sie zur Übung die Anwendung wie folgt: | Ändern Sie zur Übung die Anwendung wie folgt: | ||
- Änderung: Kommentieren Sie den Code in **onTimer10ms** aus und lassen den Speaker in **onWork** toggeln.\\ Bilden und Testen Sie diese geänderte Anwendung.\\ Vergleichen und bewerten Sie das akustische Ergebnis. | - Änderung: Kommentieren Sie den Code in **onTimer10ms** aus und lassen den Speaker in **onWork** toggeln.\\ Bilden und Testen Sie diese geänderte Anwendung.\\ Vergleichen und bewerten Sie das akustische Ergebnis. | ||
Zeile 176: | Zeile 195: | ||
* [[mystm32_board_light_tutorial|zurück zur Übersicht]] | * [[mystm32_board_light_tutorial|zurück zur Übersicht]] | ||
* [[light UASRT|Kommunikation des mySTM32 light mit dem PC]] | * [[light UASRT|Kommunikation des mySTM32 light mit dem PC]] | ||
+ | |||
+ | ====== Suchbegriffe ====== |