Unerwarteter Hexadezimalwert für Float [geschlossen]C++

Programme in C++. Entwicklerforum
Anonymous
 Unerwarteter Hexadezimalwert für Float [geschlossen]

Post by Anonymous »

Ich habe festgestellt, dass ich auf einem ARM STM32H753-Prozessor unerwartete Hex-Werte erhalte, die Float-Werte darstellen. Ich kann nicht feststellen, warum diese Hex-Werte erzeugt werden. Es handelt sich um eine Gleitkommazahl mit einfacher Genauigkeit.
Hier ist vereinfachter Code:

Code: Select all

#include 
#include 

int main() {
float setVal = 50000.0f;
uint32_t * val1 = (uint32_t *)((void *) (& setVal));
printf("Float into vSV: %x\r\n", * val1);
}
Im echten Code wird er auf einem RTOS ausgeführt, daher ist der Code etwas komplizierter und er verwendet anstelle von printf eine andere Funktion namens chprintf.
Der Code ist im Grunde so konzipiert, dass er eine Variable auf einen Wert setzt (

Code: Select all

50000.0f
), um die Adresse zu erhalten, schließlich in uint32_t umwandeln und dann die 4 Bytes von uint32_t ausdrucken.
Das gedruckte Ergebnis ist 40E86A00. Was ich jedoch erwarten würde, wäre 47435000. Ich gehe davon aus, dass dieser Wert auf der Verwendung von https://gregstoll.com/~gregstoll/floattohex/ basiert, um 50000,0 in einen Hexadezimalwert umzuwandeln.
Ich habe auch einen Bibliothekscode, der den Float über den UART sendet. Die auf dem UART übertragenen Daten sind ebenfalls 40E86A00 (jedoch mit vertauschter Bytereihenfolge aufgrund von Endianness).
Wenn ich diesen Code auf einem Intel-basierten Linux-PC ausführe, ist das Ergebnis 47435000, was meinen Erwartungen entspricht.
Was fehlt mir?
Ergänzungen zur ursprünglichen Frage
Using uint32_t val1; memcpy(&val1, &setVal, 4); printf("%x\n", val1); von @SteveSummit erhalte ich die erwarteten 47435000. Dies erklärt jedoch nicht die Bibliotheksfunktion, die den Wert erzeugt, der effektiv Daten an den UART sendet.
Hier ist ein Beispiel für den Beginn eines der Aufrufe an den Compiler: arm-none-eabi-gcc -c -mcpu=cortex-m7 -mthumb -O2 -ggdb -fomit-frame-pointer -falign-functions=16 -ffunction-sections -fdata-sections -fno-common -flto -Wall -Wextra -Wundef -Wstrict-prototypes -Wa,-alms=./build/lst/crt1.lst -DCORTEX_USE_FPU=FALSE -DSTM32_ENFORCE_H7_REV_XY -MD -MP -MF
Hier sind die Versionsnummerninformationen zu den Compilern: arm-none-eabi-gcc (Arm GNU Toolchain 11.3.Rel1) 11.3.1 20220712 und arm-none-eabi-g++ (Arm GNU Toolchain 11.3.Rel1) 11.3.1 20220712

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post