Moin,
ich habe hier (Verstandnis-) Problem:
Ich versuche auf einem STM32L433RCT Mails zwischen verschiedenen Threads 
auszutauschen, was nur bedingt funktioniert.
Da der STM32L433RCT nicht wirklich von Keil mdk unterstützt wird, habe 
ich die HAL-Treiberfunktionen für verschiedene Schnittstellen verwendet.
Das System funktioniert auf einem STM32F429 problemlos (der ist aber für 
die Endanwendung viel zu groß).
Ich kann zwischen verschiedenen Threads Mails verschicken.
Versuche ich aber aus einer HAL-Callback eine Mail zu verschicken, 
liefert "osMailAlloc" keinen freien Slotplatz (der sicher vorhanden 
ist).
Testweise habe ich das Senden und Empfangen direkt hintereinander in 
verschiedenen Threads/Funktionen eingebaut, um festzustellen, dass es 
ausser in den HAL-Callbacks funktioniert.
("osMailGet" liefert einen "osErrorParameter")
Woran liegt das? Und wie kann ich das beheben?
Die Funktionen:
1  | osMailQDef(testQueue, 10, MailTest_t);
  | 
2  | osMailQId MailTestQueue_Id = NULL;
  | 
3  | 
  | 
4  | 
  | 
5  | int32_t startTestMailQueue(void){
 | 
6  |   if (MailTestQueue_Id == NULL){
 | 
7  |     MailTestQueue_Id = osMailCreate(osMailQ(testQueue), NULL);
  | 
8  |   }
  | 
9  |   return 0;
  | 
10  | }
  | 
11  | 
  | 
12  | int32_t sendMail2TestQueue(MailTest_t data){
 | 
13  |   MailTest_p outgoingMail = osMailAlloc(MailTestQueue_Id, osWaitForever);
  | 
14  |   if (outgoingMail != NULL){
 | 
15  |     memcpy(outgoingMail, &data, sizeof(MailTest_t));
  | 
16  |     osMailPut(MailTestQueue_Id,outgoingMail); 
  | 
17  |     return 0;
  | 
18  |   }
  | 
19  |   return -1;
  | 
20  | }
  | 
21  | 
  | 
22  | int32_t fetchMailfromTestQueue(MailTest_t* data){
 | 
23  |   osEvent evt = osMailGet(MailTestQueue_Id, 100);
  | 
24  |   if (evt.status == osEventMail){
 | 
25  |     MailTest_p receivedData = (MailTest_p) evt.value.p;
  | 
26  |     memcpy(data, receivedData, sizeof(MailTest_t));
  | 
27  |     osMailFree(MailTestQueue_Id, receivedData);
  | 
28  |     return 0;
  | 
29  |   }
  | 
30  |   return -1;
  | 
31  | }
  | 
Sie funktionieren - aber nicht aus der HAL-Callback.
Vielen Dank im Voraus,
Rahul