STM32: Compiler optimiert UART HAL-Funktionsaufruf weg

OP #6170885
Lesenswert?
• ▲
▼
Hallo Zusammen,
ich verwende für die Programmierung eines STM32l053 die Keil IDE mit 
einem Projekt aus CubeMX und dessen HAL-Funktionen.

Zum Senden mit der UART habe ich zunächst die Funktion 
HAL_UART_Transmit_IT(...) direkt aus der Main-Funktion aufgerufen und da 
hat auch alles wunderbar geklappt. Jetzt habe ich aber den Code 1:1 in 
eine eigene Funktion gepackt und nun geht nichts mehr.
Zum Test habe ich deshalb einen Portpin in dieser "eigenen" Funktion 
getoggelt und dann wurde auch die HAL-Funktion für die UART aufgerufen. 
Sobald ich das Toggeln auskommentiere, sendet auch die UART nichts mehr.
Dann habe ich die Compileroptimierung ausgeschaltet und siehe da, die 
UART-Funktion wird auch ohne das Toggeln des Portpins ausgeführt. Es 
sieht also so aus, als ob der Compiler den Funktionsaufruf wegoptimiert.

Hier mal mein code:
Ausschnitt aus der Main:
1
 
2
send_to_reader(slave_addr_cycle,  statusbits_to_reader, command_to_reader);//Sende Daten

Funktion:
1
void send_to_reader(uint8_t reader_number, uint8_t statusbits[], uint8_t command[])
2
{
3
  uint16_t bus_tx_buffer_1[15];//9n1 UART
4
//!!!!!Wenn hier ein Portpin getoggelt wird, geht auch das Senden über die UART!!!!!!
5
  
6
  //Datenpaket vorbereiten
7
      bus_tx_buffer_1[0] = MASTER_ADRESSE;
8
      bus_tx_buffer_1[1] = reader_number;
9
      bus_tx_buffer_1[2] = statusbits[(reader_number-1)];
10
      bus_tx_buffer_1[3] = command[(reader_number-1)];
11
      bus_tx_buffer_1[4] = (bus_tx_buffer_1[0] + bus_tx_buffer_1[1] + bus_tx_buffer_1[2] + bus_tx_buffer_1[3]);
12
      //Setze Neunbit:
13
      bus_tx_buffer_1[4] = bus_tx_buffer_1[4] + (1U << 8);//Neuntes Datenbit
14
      HAL_UART_Transmit_IT(&huart1, (uint8_t*)bus_tx_buffer_1, 5);
15
      
16
      command[(reader_number-1)] = 0; //Nach dem Senden wieder Kommando löschen, damit es nur einmal gesendet wird
17
}

Füge ich den code aus der Funktion 1:1 an die Stelle aus der main ein, 
wo der Aufruf stattfindet, funktioniert die Sache
Kann mir jemand weiterhelfen?

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.