Ich habe ein Projekt mit einem ESP32-S3-Controller, der zwei µC-Cores enthält und FreeRTOS als Betriebssystem nutzt. Mehrkernprozessoren sind für mich Neuland, deshalb hier eine Grundsatzfrage:
Mein System sammelt Daten aus mehreren unterschiedlichen Quellen: UDP über WLAN, RS232, RS485 und SPI. Jede Quelle hat einen eigenen Task, der sich um den Empfang der Daten kümmert. Die Daten werden dann in einer globalen Struktur gesammelt. Jedes Strukturelement wird nur von genau einem Task geschrieben, allerdings können mehrere Tasks darauf lesend zugreifen. Im Moment habe ich jeden Zugriff auf die Struktur, egal ob Lesen oder Schreiben, mit einem Mutex abgesichert. Meine Frage: Ist das in diesem Fall wirklich notwendig? Die Strukturelemente sind 8, 16- oder 32-bit Variablen und sollten eigentlich "in einem Rutsch" geschrieben und gelesen werden, so dass es bei einem Einkernprozessor nicht möglich sein sollte, dass teilweise geschriebene Werte gelesen werden.
Nun hat der ESP32-S3 zwei Kerne. Was würde passieren, wenn ein Kern genau in dem Moment auf eine Speicherstelle schreibt während der andere diese liest?
Wäre es zumindest möglich, die Strukturelemente als Atomic zu deklarieren, um nicht den umständlichen Weg über den Mutex gehen zu müssen?
Zur Info: Queues brauche ich hier nicht, da nur der jeweils aktuelle Wert interessiert, nicht die lückenlose Vorgeschichte.