STM32L433, Keil mdk und Mailversand beim RTX

OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.