STM32L433, Keil mdk und Mailversand beim RTX

#5376627
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren