Gast
#2721217
Der Variablenwert ändert sich in der while Schleife normal, jedoch hört
er dan mit f bei 256.0 auf. Der Code wird weiterhin abgeabeitet.
Meiner meinung nach müßte der Gülti wertebereich aber
von 1.5E-45 bis 3.4E38 gehen.
Habe folgenden Codeabschnitt der einfach in einer while-Schleife
abgearbeitet wird :
volatile float f=0,f2=0.00001;
while(1) {
f=f+f2;
}
Wird vom Compiler so übersetzt :
136 volatile float f=0,f2=0.00001;
0x080004ac: ldr r3, [pc, #24] ; (0x80004c8 <main+140>)
0x080004ae: str r3, [r7, #4]
0x080004b0: ldr r3, [pc, #24] ; (0x80004cc <main+144>)
0x080004b2: str r3, [r7, #0]
138 f=f+f2;
0x080004b4: vldr s14, [r7, #4]
0x080004b8: vldr s15, [r7]
0x080004bc: vadd.f32 s15, s14, s15
0x080004c0: vstr s15, [r7, #4]
141 }
0x080004c4: b.n 0x80004b4 <main+120>
0x080004c6: nop
Wie man sieht ist der vector Floating Point aktiviert und funktioniert
auch. Die wichtzigsten Compileroptionen sind:
arm-none-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mthumb -Wall
-ffunction-sections -O0 -mfloat-abi=hard -g -c -DHSE_VALUE=8000000
-DSTM32F4XX -DUSE_STDPERIPH_DRIVER -DUSE_STM32F4_DISCOVERY -DSTM32F407VG
Was ist hier los ?
An Adresse 0x080004c4 wird wieder zu 0x080004b4 zurückgesprungen und das
vadd.f32 wird auch als float ausgeführt. Anderer Code wird in dieser
Zeit nicht ausgeführt.