- Skilja process, tråd, task och callback.
- Skydda delat tillstånd och välja köpolicy.
- Verifiera säker återanslutning med loggar och räknare.
Flera saker behöver hända samtidigt
En process har eget virtuellt minne och minst en tråd. Trådar delar processens kod, globala data och heap men har egna stackar och körflöden. Schemaläggaren avgör vilken tråd eller task som får köra.
En callback är en funktion som anropas av ett befintligt körflöde; den blir inte automatiskt en egen tråd. Låt callbacks registrera en händelse eller notifiera en task och sedan avslutas snabbt.
När två trådar skriver samtidigt
counter++ innebär i praktiken läs, addera, skriv. Två trådar kan läsa samma gamla värde och en uppdatering försvinner. Detta är en race condition. Korrekthet får inte bero på vilken tråd som råkar köras först.
En mutex skyddar den kritiska sektionen. Håll den kort och lås upp på alla felvägar. Skydda hela det sammanhängande villkoret, exempelvis både kön och räknaren för dess längd. pthread_create startar en tråd, medan pthread_join väntar på att den avslutas och frigör dess kvarvarande trådresurser.
lås mutex
läs → ändra → skriv delat tillstånd
lås upp mutexKön frikopplar mätning från publicering
Låt temperatur- och fukttasks skapa händelser i en begränsad kö. En publiceringstask äger MQTT-publiceringen. Kön jämnar ut korta variationer, men löser inte att produktionen ständigt är snabbare än konsumtionen.
När kön blir full krävs en uttalad policy. Du kan blockera producenten, droppa nya händelser, behålla de senaste, lagra ett värde per sensor eller spara kritiska händelser beständigt. Välj utifrån vad data betyder.
Timers och anslutningstillstånd
I kursens ESP32-exempel notifierar temperaturtimern sin task var femte sekund och fukttimern sin task var sjunde sekund. Timer-callbacken gör inget nätverksarbete. En separat statistiktask observerar systemet.
Eventloopen rapporterar Wi-Fi-frånkoppling, erhållen IP-adress och MQTT-anslutning. Callbacks uppdaterar tillstånd och räknare. Sensortasks behöver då inte tolka nätverksfel själva.
Mät även det som inte kom fram
Referensflödet fortsätter skapa händelser under avbrott men droppar händelser som når publiceringstasken offline. Loggen gör förlusten synlig. Återanslutning ska följas av mottagen data för att bevisa återställd funktion.
MQTTS ska behålla certifikatkontrollen vid varje ny anslutning, med rätt CA och systemtid. Växla inte till en okrypterad reservväg. Dokumentera avbrottstid, återhämtningstid och räknare före och efter.
created → skapade händelser
published → publicerade händelser
offline_dropped → bortfall vid avbrott
queue_dropped → bortfall vid full kö
reconnects → återanslutningarProva själv
Ta med ämnet in i ditt eget IoT-case. Dokumentera vad du upptäcker.
- Identifiera tasks, callbacks och delade resurser i ditt flöde.
- Lägg till en sensorhändelse och välj policy för full kö och offline-läge.
- Bryt anslutningen kontrollerat och notera räknare och tidsstämplar.
- Återställ nätet. Verifiera certifikatkontroll, ny mottagen mätning och synlig dataförlust. Spara normal- och avbrottslogg.
Testa dina kunskaper
Stanna upp en stund. Vad har fastnat?
Fortsätt vara nyfiken
Originalmaterial och utvalda källor för dig som vill gå djupare.
Föreläsningsbilder · Ämne 8Joakim Englund · Systementor AB · PDF på svenskaESP-MQTT och ESP-IDFEspressif · EngelskaEtt steg närmare helheten.
Markera ämnet när du känner dig redo.