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

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