J'utilise Keil uVision
avec compilateur gcc
(Sourcery Codebenchlite pour ARM EABI) pour programmer la puce STM32F4 cortex M4
.Débogueur s'arrête à l'intérieur des fonctions mathématiques qui ont des arguments à virgule flottante
Les chaînes de commande du compilateur je définis sont les suivants:
-march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -std=gnu99 -fsingle-precision-constant
Lorsque le débogueur rencontre certaines fonctions mathématiques (par exemple asinf()
, atan2f()
etc), il se bloque.
J'ai vérifié que les arguments pour ces fonctions sont également à simple précision.
Je pense que c'est à cause de certaines directives de compilation manquantes pour l'utilisation de VFP
point flottant, mais n'a pas pu l'identifier.
Y at-il quelque chose que j'ai raté?
Le code de démontage d'un exemple, je l'ai fait:
Le débogueur peut évaluer atan2f (0.3,0.4), mais arrête à 0x0803B9CA quand il évalue atan2f (a, b). Je ne savais pas pourquoi le nombre fonctionne mais pas de variables.
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]
Vous avez "un problème", mais vous ne dites pas ce que c'est? – ams
Edité la question. Désolé pour la question floue car je suis un débutant. – soonhooi
pouvez-vous fournir un démontage de la zone à problème? –