我正在使用Keil uVision
编译gcc
器(ARM EABI 的 Sourcery Codebenchlite )对STM32F4 cortex M4
芯片进行编程。
我设置的编译器控制字符串是:
-march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -std=gnu99 -fsingle-precision-constant
当调试器遇到一些数学函数(例如asinf()
,atan2f()
等)时,它会停止。
我检查过这些函数的参数也是单精度的。
我认为这是因为缺少一些使用VFP
浮点的编译器指令,但无法识别它。
有什么我错过了吗?
我做的一个例子的反汇编代码:
调试器可以评估 atan2f(0.3,0.4),但在评估 atan2f(a,b) 时会在 0x0803B9CA 处停止。不知道为什么数字有效但变量无效。
377: float a = 0.3;
0x0803B9BA 4B1E LDR r3,[pc,#120] ; @0x0803BA34
0x0803B9BC 63BB STR r3,[r7,#0x38]
378: float b = 0.4;
379:
0x0803B9BE 4B1E LDR r3,[pc,#120] ; @0x0803BA38
0x0803B9C0 637B STR r3,[r7,#0x34]
380: float c = atan2f(0.3,0.4);
0x0803B9C2 4B1E LDR r3,[pc,#120] ; @0x0803BA3C
0x0803B9C4 633B STR r3,[r7,#0x30]
381: float d = atan2f(a,b);
382:
0x0803B9C6 6BB8 LDR r0,[r7,#0x38]
0x0803B9C8 6B79 LDR r1,[r7,#0x34]
0x0803B9CA F004F993 BL.W atan2f (0x0803FCF4)
0x0803B9CE 62F8 STR r0,[r7,#0x2C]