本帖最后由 haohaodee 于 2018-3-20 14:50 编辑
现在尝试把if(control_get_mode() == MODE_LAND){ }中的内容注释掉,飞机飞的没问题。也就是判断语句没问题,而是里面的内容会引起问题。
具体如下:
if(){}中的注释与否,就会引起问题。
没有注释前的反汇编:
297: if(control_get_mode() == MODE_LAND){
0x08006562 F001F9F1 BL.W control_get_mode (0x08007948)
0x08006566 2803 CMP r0,#0x03
0x08006568 D11D BNE 0x080065A6
0x0800656A 4863 LDR r0,[pc,#396] ; @0x080066F8
0x0800656C 9909 LDR r1,[sp,#0x24]
0x0800656E F7F9FE65 BL.W __aeabi_fmul (0x0800023C)
0x08006572 9004 STR r0,[sp,#0x10]
0x08006574 485D LDR r0,[pc,#372] ; @0x080066EC
0x08006576 6881 LDR r1,[r0,#0x08]
0x08006578 4860 LDR r0,[pc,#384] ; @0x080066FC
0x0800657A F7F9FE5F BL.W __aeabi_fmul (0x0800023C)
0x0800657E 4659 MOV r1,r11
0x08006580 9002 STR r0,[sp,#0x08]
0x08006582 485F LDR r0,[pc,#380] ; @0x08006700
0x08006584 F7F9FE5A BL.W __aeabi_fmul (0x0800023C)
0x08006588 9001 STR r0,[sp,#0x04]
0x0800658A 9902 LDR r1,[sp,#0x08]
0x0800658C F7F9FDFE BL.W __aeabi_fadd (0x0800018C)
0x08006590 9003 STR r0,[sp,#0x0C]
0x08006592 9904 LDR r1,[sp,#0x10]
0x08006594 F7F9FE4C BL.W __aeabi_fsub (0x08000230)
0x08006598 4A58 LDR r2,[pc,#352] ; @0x080066FC
0x0800659A 495A LDR r1,[pc,#360] ; @0x08006704
0x0800659C 9005 STR r0,[sp,#0x14]
0x0800659E F7FFFEF9 BL.W constrain_float (0x08006394)
0x080065A2 9008 STR r0,[sp,#0x20]
0x080065A4 E026 B 0x080065F4
注释之后就没问题了,反汇编如下:
297: if(control_get_mode() == MODE_LAND){
0x08006562 F001F9D1 BL.W control_get_mode (0x08007908)
0x08006566 2803 CMP r0,#0x03
0x08006568 D026 BEQ 0x080065B8
各位仁兄帮分析一下,不尽感谢。
|