Auswirkungen der Compiler-Einstellungen auf die Ausführung

Genauigkeit und Verhalten von mathematischen Funktionen

Mathematische Funktionen, die Gleitkommazahlen (REAL, LREAL) verarbeiten, können unterschiedliche Ergebnisse auf den unterschiedlichen Zielsystem liefern – vor allem, wenn das Ergebnis der Funktion im Grenzbereich des Datentyps liegt. Die se unterschiedliche Genauigkeit der mathematischen Funktionen wird durch die folgenden Faktoren verursacht:

  • das →Zielsystem selbst,

  • der dafür verwendete Compiler und

  • die konfigurierten Optimierungseinstellungen des Compilers.

Bausteine/Variablen mit LREAL nicht für Controllino oder Arduino Nano verwenden

Falls Sie eine Anwendung für einen →Controllino oder →Arduino Nano erstellen, vermeiden Sie die Verwendung von Bausteinen/Variablen, die LREAL-Werte verarbeiten/liefern. Die Verwendung solcher Bausteine/Variablen ist zwar möglich, die LREAL-Werte werden jedoch mit der Genauigkeit von REAL-Werten abgearbeitet.

Bekannte Beispiele:

Zielsystem

Ergebnis der mathematischen Funktion TRUNC_DINT(REAL#3.402823466e+38);

→logi.RTS für Windows

-2147483648

→Raspberry Pi

2147483647

Der RTOS32-Compiler meldet einen Fehler, wenn die Anwendung eine bestimmte Division enthält.

Falls Sie den RTOS32-Compiler verwenden, vermeiden Sie eine bestimmte Division (siehe das folgende Beispiel) in der Anwendung.

Beispiel für ST-Code
PROGRAM Program1
DIV(DINT#-2_147_483_648, DINT#-1);
END_PROGRAM

Beim Erstellen der Anwendung melden die Compiler die erwartete Warnung overflow in constant division, undefined behavior. Der RTOS32-Compiler meldet jedoch auch einen Fehler divide or mod by zero. Andere Compiler akzeptieren den Code – nur die erwähnte Warnung wird gemeldet. Damit der Fehler beim RTOS32-Compiler nicht gemeldet wird, dürfen Sie eine Division mit den oben erwähnten negativen Integers nicht in der Anwendung verwenden.