Breadcrumb
We are coming from Untersuchung und Verbesserung des Timings bei der Ansteuerung der DS18B20 here.
Einleitung
Auch wenn wir schon seit längerem evangelisieren, wie mit den Ressourcen an der Grenze zwischen Hardware und Software am exzellentesten umgegangen werden sollte
haben wir es in der Praxis weiterhin des öfteren mit Problemen beim Timing zu tun. Der Teufel steckt im Detail und viele der entsprechenden Aspekte wurden in der Adventszeit des Arduino-Universums nicht ordentlich berücksichtigt und führen sowohl zu konkreten Altlasten bei der Umstellung auf neue Prozessoren und Betriebssysteme als auch zu mentalen Anfälligkeiten im Sinne von “einfach weiter wie bisher”.
- Improving the canonical Arduino HX711 library for ESP8266, ESP32 and beyond
- First trial using the Pycom WiPy
- You name it.
Und nun?
Über die Unmöglichkeit, ordentliches Timing auf unmodifizierten SBC-Systemen mit regulären Linux-Kerneln (RaspberryPi, BeagleBone) hinzukriegen, wollen wir nicht weiter eingehen, sondern sind froh, dass mittlerweile einige der ursprünglich rein für 8-bit AVR-Prozessoren o.ä. ausgelegten Bibliotheken erwachsener geworden sind und mittlerweile auch auf 32-bit Systemen mit höherer Interrupt-Last aufgrund von eingebetteten Peripheriesubsystemen ebenfalls gut ihren Dienst tun. [1]
Während es bisher so war, dass der Programmcode direkt auf dem Eisen lief, hat man heutzutage auf größeren Maschinen meist noch ein Betriebssystem zwischen Anwendung und Hardware. Darauf muss bei der Programmierung Rücksicht genommen werden.
Solange noch in systemnahen Sprachen wie C, C++ oder Rust entwickelt wird, reicht es normalerweise, sich mit den Umständen des Betriebssystems und dem Datenblatt des digitalen Sensors zu beschäftigen und bei der Implementierung die Interruptbehandlung per Protect code when accessing shared resources ordentlich zu machen.
Hier soll nun die Reise weitergehen zu Problemaspekten, die man sich bei der Programmierung von a) Multicore-Maschinen mit Sprachen/Programmierumgebungen einhandelt, die nun b) auch noch einen Garbage-Kollektor unter der Haube haben, der noch viel ungünstiger auf das Timing Einfluß nehmen kann als ein paar querschlagende unmaskierte Interrupts. Meow.
-
An dieser Stelle wollen wir kurz die von Rob Tillart überarbeitete DHTNEW-Bibliothek nennen, über die wir bei DHT22 hängt immer nach Arduino Firmware Reset berichteten sowie den ebenfalls überarbeiteten Klassiker GitHub - bogde/HX711: An Arduino library to interface the Avia Semiconductor HX711 24-Bit Analog-to-Digital Converter (ADC) for Weight Scales., an dem wir jüngst selbst ein wenig mit angepackt haben.
Unabhängig davon soll hier nicht unerwähnt bleiben, dass es für beide genannte Sensoren solidere Alternativen gibt, die bevorzugt verwendet werden sollten. Wir haben bei uns BME280 sowie ADS1231 dafür erschlossen. ↩︎