Gast
#4833944
Moin, die cmsis-os hat ja das schöne Mail-handling. Leider ist das Warten zum Reservieren einer Mail im FreeRTOS-Wrapper nicht korrekt implementiert. Unabhängig der Wartezeit wird einfach geprüft ob der Speicher verfügbar ist und wenn nicht sofort mit NULL zurückgekehrt. Beim Keil RTX-Wrapper wird versucht den Speicher anzulegen, wenn das nicht klappt wird die eingestellte Zeit gewartet, aber ohne erneut zu versuchen den Speicher zu reservieren. Das ganze Verhalten macht die Verwendung von "Mails" irgendwie für meine Anwendung überflüssig. Achso, meine Anwendung: Ich möchte gern einen Debug-Task anlegen. Der bekommt eine Struktur mit Werten... - Nachricht [String] - DBG-Level [uint8_t] - DBG-Modul [uint8_t] - Timestamp [uint32_t] Ich würde nun gern aus unterschiedlichen Tasks dem Debug-Task was zu-mailen. Meine Lösung bisher -> cmsis-os leicht modifizieren... Das funktioniert bisher ganz gut, leider ist es eine pollende Endlosschleife. Um es etwas effektiver zu machen, würde ich gern darauf Warten das FreeRTOS ein "free" durchgeführt hat und dann erst den Task wiederbeleben. Gibt es ein solche Möglichkeit? Wie kann ich das Problem sonst noch lösen? Ich bin recht neu was RTOS'e angeht... Hier mal meine Implementierung für osMailAlloc:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
Wie gesagt... Wenn der Mail-Pool voll ist, wird hier ewig gepollt bis wieder ein Speicherplatz frei ist. Es gibt sicher noch die Lösung alles mit Counting-Semaphoren zusätzlich abzusichern... also die Mail-Plätze zu "tracken".... finde ich aber auch nicht so sauber... VG Basti