This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28386D:软件嵌套导致的数学运算错误

Guru**** 2450870 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1331200/tms320f28386d-error-in-math-operation-due-to-sw-nesting

器件型号:TMS320F28386D

您好、C2000专家!

我正在编写用于电机控制的裸机代码。

我有与定时器1和定时器2触发的两个中断嵌套相关的问题。

具体而言、ISR2由计时器2触发、ISR1由计时器1触发。  

首先, 让我澄清一下 两个中断的嵌套效果很好:我可以在 ISR2中嵌套 ISR1。

但是、我注意到如果 ISR1在 数学运算期间内嵌套 ISR2、则会出现一些问题。

如下图所示:  

VADC =-1.5;

IPCA=vADC/16.6664;

 

预期结果 IADC =-0.09

已获得的结果 IADC =-0.0312

为什么会发生这种情况?

很明显、我注意到、  如果 我在指令  IADC 执行期间禁用嵌套、则不会出现此问题;IADC = vADC/16.6664。

例如、

IER = 0x0;//禁用嵌套

 IPCA=vADC/16.6664;

IER = 0x2000;//启用 嵌套

另一方面,如果我用 IPCA=vADC*0.06000096 (实际上0.06000096是16.6664的倒数)替换前面的等式,问题就不会发生。

我愿意做进一步的说明。

等待您的帮助...

此致、

贝尼托

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Benito、

    您是否启用了任何优化? 如果是、禁用它们时是否会出现问题? 如果您在程序中有问题的位置放置了一个断点、您能否检查用于条件/方程的所有变量的值?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的先生: Amir,Omer

    感谢您的反馈

    您是否打开了任何优化? 如果是,则禁用它们时是否会出现问题?

    否、我尚未启用编译器优化  

    如果您在程序中有问题的位置放置一个断点,您可以检查用于条件/方程的所有变量的值吗?

    就在这里。  

    您可以看到、第583行(绿线)有一个断点。

    左侧(选项卡表达式)显示了变量:

    VADC 实际上等于-1.5。

    空间碎片协委会=-1.5/16.6664=-0.03125. 这是错误的结果。 正确结果应为-0.09。

    如果我修改代码以禁用嵌套、同时微控制器执行计算 IADC = vADC/16.6664、不会发生这个错误。

    同样,如果我 用等效的乘法替换除法(例如 IADC = vADC*0.060),也不会发生此错误。

    我可作进一步澄清。

    此致、

    贝尼托

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Benito、

    类似地,如果我 用等效的乘法替换除法(例如 IADC = vADC*0.060),则不会发生此错误。

    您能否共享 以下汇编代码的屏幕截图:

    1. 启用嵌套
    2. 禁用嵌套
    3. 乘法而不是除法

    是否有任何其他修改 vADC 或 IADC 的位置? 这些地方中是否有一个像中断一样的地方有可能发生在 线路 IADC = vADC/16.6664并且达到条件的时间内?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的先生: Amir,Omer

    公式的汇编代码、该公式使用 乘法

     

    761F002C    MOVW         DP, #0x2c
    088d08:   0E00        MOVU         ACC, @0x0
    088d09:   BDA90F12    MOV32        R0H, @ACC
    088d0b:   7700        NOP          
    088d0c:   E801F839    MOVIZ        R1, #0x3f07
    088d0e:   E80852A9    MOVXI        R1H, #0xa55
    088d10:   E904CBE9    MOVIX        R1L, #0x997d
    088d12:   E6870000    UI32TOF64    R0, R0H
    088d14:   E90F5659    MOVXI        R1L, #0xeacb
    088d16:   E7800040    MPYF64       R0, R0, R1
    088d18:   E801FDB9    MOVIZ        R1, #0x3fb7
    088d1a:   E80852A9    MOVXI        R1H, #0xa55
    088d1c:   E904CBE9    MOVIX        R1L, #0x997d
    088d1e:   E90F5659    MOVXI        R1L, #0xeacb
    088d20:   E7A00040    SUBF64       R0, R0, R1
    088d22:   E8020699    MOVIZ        R1, #0x40d3
    088d24:   E80C4001    MOVXI        R1H, #0x8800
    088d26:   E9000001    MOVIX        R1L, #0x0
    088d28:   E9080001    MOVXI        R1L, #0x0
    088d2a:   E7800040    MPYF64       R0, R0, R1
    088d2c:   7700        NOP          
    088d2d:   7700        NOP          
    088d2e:   E98FF800    ADDF64       R0, #0x3fe0, R0
    088d30:   7700        NOP          
    088d31:   7700        NOP          
    088d32:   E6840000    F64TOI32     R0H, R0
    088d34:   761F05C6    MOVW         DP, #0x5c6
    088d36:   E2130031    MOV16        @0x31, R0H

    下面、使用德州仪器 TI.com.cn 分部:

    088d0a:   761F002C    MOVW         DP, #0x2c
    088d0c:   0E00        MOVU         ACC, @0x0
    088d0d:   BDA90F12    MOV32        R0H, @ACC
    088d0f:   7700        NOP          
    088d10:   E802069C    MOVIZ        R4, #0x40d3
    088d12:   E80C4004    MOVXI        R4H, #0x8800
    088d14:   E8020183    MOVIZ        R3, #0x4030
    088d16:   E6870000    UI32TOF64    R0, R0H
    088d18:   E9000004    MOVIX        R4L, #0x0
    088d1a:   E94FD200    MPYF64       R0, #0x3f48, R0
    088d1c:   E80D54CB    MOVXI        R3H, #0xaa99
    088d1e:   E90185F3    MOVIX        R3L, #0x30be
    088d20:   E9AFFE02    ADDF64       R2, #0xbff8, R0
    088d22:   E9086F6B    MOVXI        R3L, #0xded
    088d24:   E9080004    MOVXI        R4L, #0x0
    088d26:   E5BE        PREDIVF64    R0H, R2, R1, R3
    088d27:   E566        SUBC3F64     R2, R1, R3
    088d28:   E566        SUBC3F64     R2, R1, R3
    088d29:   E566        SUBC3F64     R2, R1, R3
    088d2a:   E566        SUBC3F64     R2, R1, R3
    088d2b:   E566        SUBC3F64     R2, R1, R3
    088d2c:   E566        SUBC3F64     R2, R1, R3
    088d2d:   E566        SUBC3F64     R2, R1, R3
    088d2e:   E566        SUBC3F64     R2, R1, R3
    088d2f:   E566        SUBC3F64     R2, R1, R3
    088d30:   E566        SUBC3F64     R2, R1, R3
    088d31:   E566        SUBC3F64     R2, R1, R3
    088d32:   E566        SUBC3F64     R2, R1, R3
    088d33:   E566        SUBC3F64     R2, R1, R3
    088d34:   E566        SUBC3F64     R2, R1, R3
    088d35:   E566        SUBC3F64     R2, R1, R3
    088d36:   E566        SUBC3F64     R2, R1, R3
    088d37:   E566        SUBC3F64     R2, R1, R3
    088d38:   E566        SUBC3F64     R2, R1, R3
    088d39:   E566        SUBC3F64     R2, R1, R3
    088d3a:   E5BF        POSTDIVF64   R1, R0H
    088d3b:   E7800108    MPYF64       R0, R1, R4
    088d3d:   7700        NOP          
    088d3e:   7700        NOP          
    088d3f:   E98FF800    ADDF64       R0, #0x3fe0, R0
    088d41:   7700        NOP          
    088d42:   7700        NOP          
    088d43:   E6840000    F64TOI32     R0H, R0
    088d45:   761F05C6    MOVW         DP, #0x5c6
    088d47:   E2130031    MOV16        @0x31, R0H

    下面、托管乘法/除法的函数的代码:  

     E20204BD    MOV32        *SP++, R4L
    0875d4:   E20304BD    MOV32        *SP++, R4H
    0875d6:   E20205BD    MOV32        *SP++, R5L
    0875d8:   E20305BD    MOV32        *SP++, R5H
    0875da:   E20206BD    MOV32        *SP++, R6L
    0875dc:   E20306BD    MOV32        *SP++, R6H
    0875de:   E20207BD    MOV32        *SP++, R7L
    0875e0:   E20307BD    MOV32        *SP++, R7H
    0875e2:   FE0A        ADDB         SP, #10
    647     	i1Rout = 0.0; i1Sout = 0.0; i1Tout = 0.0;
    0875e3:   E590        ZERO         R0
    0875e4:   E2020046    MOV32        *-SP[6], R0L
    0875e6:   E2030044    MOV32        *-SP[4], R0H
    0875e8:   E202004A    MOV32        *-SP[10], R0L
    0875ea:   E2030048    MOV32        *-SP[8], R0H
    0875ec:   E597        ZERO         R7
    648     	vRSout = 0.0; vSTout = 0.0; vTRout = 0.0;
    0875ed:   E596        ZERO         R6
    0875ee:   E595        ZERO         R5
    0875ef:   E594        ZERO         R4
    650     	indWin++;
    0875f0:   761F02A5    MOVW         DP, #0x2a5
    0875f2:   0A09        INC          @0x9
    651     	indWin = indWin % NCAMPEFF;
    0875f3:   027D        MOVB         ACC, #125
    0875f4:   BDA90F1E    MOV32        R3H, @ACC
    0875f6:   7700        NOP          
    0875f7:   E2C80109    I16TOF32     R1H, @0x9
    0875f9:   7700        NOP          
    0875fa:   E851E009    MPYF32       R1H, #0x4780, R1H
    0875fc:   E68D001B    I16TOF32     R3H, R3H
    0875fe:   E6880009    F32TOI32     R1H, R1H
    087600:   E688001B    F32TOI32     R3H, R3H
    087602:   7700        NOP          
    087603:   E568        ABSI32DIV32   R2H, R1H, R3H
    087604:   E564        SUBC4UI32    R2H, R1H, R3H
    087605:   E564        SUBC4UI32    R2H, R1H, R3H
    087606:   E564        SUBC4UI32    R2H, R1H, R3H
    087607:   E564        SUBC4UI32    R2H, R1H, R3H
    087608:   E56A        NEGI32DIV32   R1H, R2H
    087609:   7700        NOP          
    08760a:   BFA90F1A    MOV32        @ACC, R2H
    08760c:   9609        MOV          @0x9, AL
    654     	xi1R[indWin] = ((float)(varCpu1.tar)) * ((float)(varCpu1.tar));
    08760d:   3B01        SETC         SXM
    08760e:   761F05C7    MOVW         DP, #0x5c7
    087610:   E2C80032    I16TOF32     R0H, @0x32
    087612:   761F02A5    MOVW         DP, #0x2a5
    087614:   56030109    MOV          ACC, @0x9 << 1
    087616:   761F05C7    MOVW         DP, #0x5c7
    087618:   E2C80132    I16TOF32     R1H, @0x32
    08761a:   8F01743A    MOVL         XAR4, #0x01743a
    08761c:   E7000008    MPYF32       R0H, R1H, R0H
    08761e:   560100A4    ADDL         @XAR4, ACC
    087620:   E20300C4    MOV32        *+XAR4[0], R0H
    655     	xi1S[indWin] = ((float)(varCpu1.tas)) * ((float)(varCpu1.tas));
    087622:   E2C80033    I16TOF32     R0H, @0x33
    087624:   761F02A5    MOVW         DP, #0x2a5
    087626:   56030109    MOV          ACC, @0x9 << 1
    087628:   761F05C7    MOVW         DP, #0x5c7
    08762a:   E2C80133    I16TOF32     R1H, @0x33
    08762c:   8F017534    MOVL         XAR4, #0x017534
    08762e:   E7000008    MPYF32       R0H, R1H, R0H
    087630:   560100A4    ADDL         @XAR4, ACC
    087632:   E20300C4    MOV32        *+XAR4[0], R0H
    656     	xi1T[indWin] = ((float)(varCpu1.tat)) * ((float)(varCpu1.tat));
    087634:   E2C80034    I16TOF32     R0H, @0x34
    087636:   761F02A5    MOVW         DP, #0x2a5
    087638:   56030109    MOV          ACC, @0x9 << 1
    08763a:   761F05C7    MOVW         DP, #0x5c7
    08763c:   E2C80134    I16TOF32     R1H, @0x34
    08763e:   8F01762E    MOVL         XAR4, #0x01762e
    087640:   E7000008    MPYF32       R0H, R1H, R0H
    087642:   560100A4    ADDL         @XAR4, ACC
    087644:   E20300C4    MOV32        *+XAR4[0], R0H
    657     	xvRS[indWin] = ((float)(varCpu1.vRS)) * ((float)(varCpu1.vRS));
    087646:   E2C8003B    I16TOF32     R0H, @0x3b
    087648:   761F02A5    MOVW         DP, #0x2a5
    08764a:   56030109    MOV          ACC, @0x9 << 1
    08764c:   761F05C7    MOVW         DP, #0x5c7
    08764e:   E2C8013B    I16TOF32     R1H, @0x3b
    087650:   8F017728    MOVL         XAR4, #0x017728
    087652:   E7000008    MPYF32       R0H, R1H, R0H
    087654:   560100A4    ADDL         @XAR4, ACC
    087656:   E20300C4    MOV32        *+XAR4[0], R0H
    658     	xvST[indWin] = ((float)(varCpu1.vST)) * ((float)(varCpu1.vST));
    087658:   E2C8003C    I16TOF32     R0H, @0x3c
    08765a:   761F02A5    MOVW         DP, #0x2a5
    08765c:   56030109    MOV          ACC, @0x9 << 1
    08765e:   761F05C7    MOVW         DP, #0x5c7
    087660:   E2C8013C    I16TOF32     R1H, @0x3c
    087662:   8F017822    MOVL         XAR4, #0x017822
    087664:   E7000008    MPYF32       R0H, R1H, R0H
    087666:   560100A4    ADDL         @XAR4, ACC
    087668:   E20300C4    MOV32        *+XAR4[0], R0H
    659     	xvTR[indWin] = ((float)(varCpu1.vTR)) * ((float)(varCpu1.vTR));
    08766a:   E2C8003D    I16TOF32     R0H, @0x3d
    08766c:   761F02A5    MOVW         DP, #0x2a5
    08766e:   56030109    MOV          ACC, @0x9 << 1
    087670:   761F05C7    MOVW         DP, #0x5c7
    087672:   E2C8013D    I16TOF32     R1H, @0x3d
    087674:   8F01791C    MOVL         XAR4, #0x01791c
    087676:   E7000008    MPYF32       R0H, R1H, R0H
    087678:   560100A4    ADDL         @XAR4, ACC
    08767a:   E20300C4    MOV32        *+XAR4[0], R0H
    662     	for(i=0; i< NCAMPEFF; i++)
    08767c:   BE00        MOVB         XAR6, #0x00
    08767d:   92A6        MOV          AL, @AR6
    08767e:   527D        CMPB         AL, #0x7d
    08767f:   6356        SB           $C$L132, GEQ
    087680:   3B01        SETC         SXM
    664     		i1Rout += (float64_t)(xi1R[i]);
            $C$L131:
    087681:   560301A6    MOV          ACC, @AR6 << 1
    087683:   8F01743A    MOVL         XAR4, #0x01743a
    087685:   560100A4    ADDL         @XAR4, ACC
    087687:   E2AF0044    MOV32        R0H, *-SP[4], UNCF
    087689:   E29F0046    MOV32        R0L, *-SP[6], UNCF
    08768b:   E28C01C4    F32TOF64     R1, *+XAR4[0]
    08768d:   E7900040    ADDF64       R0, R0, R1
    08768f:   7700        NOP          
    087690:   7700        NOP          
    087691:   E2020046    MOV32        *-SP[6], R0L
    087693:   E2030044    MOV32        *-SP[4], R0H
    665     		i1Sout += (float64_t)(xi1S[i]);
    087695:   560301A6    MOV          ACC, @AR6 << 1
    087697:   8F017534    MOVL         XAR4, #0x017534
    087699:   560100A4    ADDL         @XAR4, ACC
    08769b:   E2AF0048    MOV32        R0H, *-SP[8], UNCF
    08769d:   E29F004A    MOV32        R0L, *-SP[10], UNCF
    08769f:   E28C01C4    F32TOF64     R1, *+XAR4[0]
    0876a1:   E7900040    ADDF64       R0, R0, R1
    0876a3:   7700        NOP          
    0876a4:   7700        NOP          
    0876a5:   E202004A    MOV32        *-SP[10], R0L
    0876a7:   E2030048    MOV32        *-SP[8], R0H
    666     		i1Tout += (float64_t)(xi1T[i]);
    0876a9:   560301A6    MOV          ACC, @AR6 << 1
    0876ab:   8F01762E    MOVL         XAR4, #0x01762e
    0876ad:   560100A4    ADDL         @XAR4, ACC
    0876af:   E28C02C4    F32TOF64     R2, *+XAR4[0]
    0876b1:   E79000BF    ADDF64       R7, R7, R2
    667     		vRSout += (float64_t)(xvRS[i]);
    0876b3:   560301A6    MOV          ACC, @AR6 << 1
    0876b5:   8F017728    MOVL         XAR4, #0x017728
    0876b7:   560100A4    ADDL         @XAR4, ACC
    0876b9:   E28C02C4    F32TOF64     R2, *+XAR4[0]
    0876bb:   E79000B6    ADDF64       R6, R6, R2
    668     		vSTout += (float64_t)(xvST[i]);
    0876bd:   560301A6    MOV          ACC, @AR6 << 1
    0876bf:   8F017822    MOVL         XAR4, #0x017822
    0876c1:   560100A4    ADDL         @XAR4, ACC
    0876c3:   E28C02C4    F32TOF64     R2, *+XAR4[0]
    0876c5:   E79000AD    ADDF64       R5, R5, R2
    669     		vTRout += (float64_t)(xvTR[i]);
    0876c7:   560301A6    MOV          ACC, @AR6 << 1
    0876c9:   8F01791C    MOVL         XAR4, #0x01791c
    0876cb:   560100A4    ADDL         @XAR4, ACC
    0876cd:   E28C02C4    F32TOF64     R2, *+XAR4[0]
    0876cf:   E79000A4    ADDF64       R4, R4, R2
    662     	for(i=0; i< NCAMPEFF; i++)
    0876d1:   DE01        ADDB         XAR6, #1
    0876d2:   92A6        MOV          AL, @AR6
    0876d3:   527D        CMPB         AL, #0x7d
    0876d4:   64AD        SB           $C$L131, LT
    673     	i1Rout /= NCAMPEFF ;
            $C$L132:
    0876d5:   E80202FB    MOVIZ        R3, #0x405f
    0876d7:   E2AF0244    MOV32        R2H, *-SP[4], UNCF
    0876d9:   E80A0003    MOVXI        R3H, #0x4000
    0876db:   E29F0246    MOV32        R2L, *-SP[6], UNCF
    0876dd:   E9000003    MOVIX        R3L, #0x0
    0876df:   E9080003    MOVXI        R3L, #0x0
    0876e1:   E5BE        PREDIVF64    R0H, R2, R1, R3
    0876e2:   E566        SUBC3F64     R2, R1, R3
    0876e3:   E566        SUBC3F64     R2, R1, R3
    0876e4:   E566        SUBC3F64     R2, R1, R3
    0876e5:   E566        SUBC3F64     R2, R1, R3
    0876e6:   E566        SUBC3F64     R2, R1, R3
    0876e7:   E566        SUBC3F64     R2, R1, R3
    0876e8:   E566        SUBC3F64     R2, R1, R3
    0876e9:   E566        SUBC3F64     R2, R1, R3
    0876ea:   E566        SUBC3F64     R2, R1, R3
    0876eb:   E566        SUBC3F64     R2, R1, R3
    0876ec:   E566        SUBC3F64     R2, R1, R3
    0876ed:   E566        SUBC3F64     R2, R1, R3
    0876ee:   E566        SUBC3F64     R2, R1, R3
    0876ef:   E566        SUBC3F64     R2, R1, R3
    0876f0:   E566        SUBC3F64     R2, R1, R3
    0876f1:   E566        SUBC3F64     R2, R1, R3
    0876f2:   E566        SUBC3F64     R2, R1, R3
    0876f3:   E566        SUBC3F64     R2, R1, R3
    0876f4:   E566        SUBC3F64     R2, R1, R3
    0876f5:   E5BF        POSTDIVF64   R1, R0H
    0876f6:   E2020146    MOV32        *-SP[6], R1L
    0876f8:   E2030144    MOV32        *-SP[4], R1H
    674     	i1Sout /= NCAMPEFF ;
    0876fa:   E2AF0248    MOV32        R2H, *-SP[8], UNCF
    0876fc:   E80202FB    MOVIZ        R3, #0x405f
    0876fe:   E29F024A    MOV32        R2L, *-SP[10], UNCF
    087700:   E80A0003    MOVXI        R3H, #0x4000
    087702:   E9000003    MOVIX        R3L, #0x0
    087704:   E9080003    MOVXI        R3L, #0x0
    087706:   E5BE        PREDIVF64    R0H, R2, R1, R3
    087707:   E566        SUBC3F64     R2, R1, R3
    087708:   E566        SUBC3F64     R2, R1, R3
    087709:   E566        SUBC3F64     R2, R1, R3
    08770a:   E566        SUBC3F64     R2, R1, R3
    08770b:   E566        SUBC3F64     R2, R1, R3
    08770c:   E566        SUBC3F64     R2, R1, R3
    08770d:   E566        SUBC3F64     R2, R1, R3
    08770e:   E566        SUBC3F64     R2, R1, R3
    08770f:   E566        SUBC3F64     R2, R1, R3
    087710:   E566        SUBC3F64     R2, R1, R3
    087711:   E566        SUBC3F64     R2, R1, R3
    087712:   E566        SUBC3F64     R2, R1, R3
    087713:   E566        SUBC3F64     R2, R1, R3
    087714:   E566        SUBC3F64     R2, R1, R3
    087715:   E566        SUBC3F64     R2, R1, R3
    087716:   E566        SUBC3F64     R2, R1, R3
    087717:   E566        SUBC3F64     R2, R1, R3
    087718:   E566        SUBC3F64     R2, R1, R3
    087719:   E566        SUBC3F64     R2, R1, R3
    08771a:   E5BF        POSTDIVF64   R1, R0H
    08771b:   E202014A    MOV32        *-SP[10], R1L
    08771d:   E2030148    MOV32        *-SP[8], R1H
    675     	i1Tout /= NCAMPEFF ;
    08771f:   E6DF003A    MOV64        R2, R7, UNCF
    087721:   E80202FB    MOVIZ        R3, #0x405f
    087723:   E80A0003    MOVXI        R3H, #0x4000
    087725:   E9000003    MOVIX        R3L, #0x0
    087727:   E9080003    MOVXI        R3L, #0x0
    087729:   E5BE        PREDIVF64    R0H, R2, R1, R3
    08772a:   E566        SUBC3F64     R2, R1, R3
    08772b:   E566        SUBC3F64     R2, R1, R3
    08772c:   E566        SUBC3F64     R2, R1, R3
    08772d:   E566        SUBC3F64     R2, R1, R3
    08772e:   E566        SUBC3F64     R2, R1, R3
    08772f:   E566        SUBC3F64     R2, R1, R3
    087730:   E566        SUBC3F64     R2, R1, R3
    087731:   E566        SUBC3F64     R2, R1, R3
    087732:   E566        SUBC3F64     R2, R1, R3
    087733:   E566        SUBC3F64     R2, R1, R3
    087734:   E566        SUBC3F64     R2, R1, R3
    087735:   E566        SUBC3F64     R2, R1, R3
    087736:   E566        SUBC3F64     R2, R1, R3
    087737:   E566        SUBC3F64     R2, R1, R3
    087738:   E566        SUBC3F64     R2, R1, R3
    087739:   E566        SUBC3F64     R2, R1, R3
    08773a:   E566        SUBC3F64     R2, R1, R3
    08773b:   E566        SUBC3F64     R2, R1, R3
    08773c:   E566        SUBC3F64     R2, R1, R3
    08773d:   E5BF        POSTDIVF64   R1, R0H
    08773e:   E6DF000F    MOV64        R7, R1, UNCF
    676     	vRSout /= NCAMPEFF ;
    087740:   E6DF0032    MOV64        R2, R6, UNCF
    087742:   E80202FB    MOVIZ        R3, #0x405f
    087744:   E80A0003    MOVXI        R3H, #0x4000
    087746:   E9000003    MOVIX        R3L, #0x0
    087748:   E9080003    MOVXI        R3L, #0x0
    08774a:   E5BE        PREDIVF64    R0H, R2, R1, R3
    08774b:   E566        SUBC3F64     R2, R1, R3
    08774c:   E566        SUBC3F64     R2, R1, R3
    08774d:   E566        SUBC3F64     R2, R1, R3
    08774e:   E566        SUBC3F64     R2, R1, R3
    08774f:   E566        SUBC3F64     R2, R1, R3
    087750:   E566        SUBC3F64     R2, R1, R3
    087751:   E566        SUBC3F64     R2, R1, R3
    087752:   E566        SUBC3F64     R2, R1, R3
    087753:   E566        SUBC3F64     R2, R1, R3
    087754:   E566        SUBC3F64     R2, R1, R3
    087755:   E566        SUBC3F64     R2, R1, R3
    087756:   E566        SUBC3F64     R2, R1, R3
    087757:   E566        SUBC3F64     R2, R1, R3
    087758:   E566        SUBC3F64     R2, R1, R3
    087759:   E566        SUBC3F64     R2, R1, R3
    08775a:   E566        SUBC3F64     R2, R1, R3
    08775b:   E566        SUBC3F64     R2, R1, R3
    08775c:   E566        SUBC3F64     R2, R1, R3
    08775d:   E566        SUBC3F64     R2, R1, R3
    08775e:   E5BF        POSTDIVF64   R1, R0H
    08775f:   E6DF000E    MOV64        R6, R1, UNCF
    677     	vSTout /= NCAMPEFF ;
    087761:   E6DF002A    MOV64        R2, R5, UNCF
    087763:   E80202FB    MOVIZ        R3, #0x405f
    087765:   E80A0003    MOVXI        R3H, #0x4000
    087767:   E9000003    MOVIX        R3L, #0x0
    087769:   E9080003    MOVXI        R3L, #0x0
    08776b:   E5BE        PREDIVF64    R0H, R2, R1, R3
    08776c:   E566        SUBC3F64     R2, R1, R3
    08776d:   E566        SUBC3F64     R2, R1, R3
    08776e:   E566        SUBC3F64     R2, R1, R3
    08776f:   E566        SUBC3F64     R2, R1, R3
    087770:   E566        SUBC3F64     R2, R1, R3
    087771:   E566        SUBC3F64     R2, R1, R3
    087772:   E566        SUBC3F64     R2, R1, R3
    087773:   E566        SUBC3F64     R2, R1, R3
    087774:   E566        SUBC3F64     R2, R1, R3
    087775:   E566        SUBC3F64     R2, R1, R3
    087776:   E566        SUBC3F64     R2, R1, R3
    087777:   E566        SUBC3F64     R2, R1, R3
    087778:   E566        SUBC3F64     R2, R1, R3
    087779:   E566        SUBC3F64     R2, R1, R3
    08777a:   E566        SUBC3F64     R2, R1, R3
    08777b:   E566        SUBC3F64     R2, R1, R3
    08777c:   E566        SUBC3F64     R2, R1, R3
    08777d:   E566        SUBC3F64     R2, R1, R3
    08777e:   E566        SUBC3F64     R2, R1, R3
    08777f:   E5BF        POSTDIVF64   R1, R0H
    087780:   E6DF000D    MOV64        R5, R1, UNCF
    678     	vTRout /= NCAMPEFF ;
    087782:   E6DF0022    MOV64        R2, R4, UNCF
    087784:   E80202FB    MOVIZ        R3, #0x405f
    087786:   E80A0003    MOVXI        R3H, #0x4000
    087788:   E9000003    MOVIX        R3L, #0x0
    08778a:   E9080003    MOVXI        R3L, #0x0
    08778c:   E5BE        PREDIVF64    R0H, R2, R1, R3
    08778d:   E566        SUBC3F64     R2, R1, R3
    08778e:   E566        SUBC3F64     R2, R1, R3
    08778f:   E566        SUBC3F64     R2, R1, R3
    087790:   E566        SUBC3F64     R2, R1, R3
    087791:   E566        SUBC3F64     R2, R1, R3
    087792:   E566        SUBC3F64     R2, R1, R3
    087793:   E566        SUBC3F64     R2, R1, R3
    087794:   E566        SUBC3F64     R2, R1, R3
    087795:   E566        SUBC3F64     R2, R1, R3
    087796:   E566        SUBC3F64     R2, R1, R3
    087797:   E566        SUBC3F64     R2, R1, R3
    087798:   E566        SUBC3F64     R2, R1, R3
    087799:   E566        SUBC3F64     R2, R1, R3
    08779a:   E566        SUBC3F64     R2, R1, R3
    08779b:   E566        SUBC3F64     R2, R1, R3
    08779c:   E566        SUBC3F64     R2, R1, R3
    08779d:   E566        SUBC3F64     R2, R1, R3
    08779e:   E566        SUBC3F64     R2, R1, R3
    08779f:   E566        SUBC3F64     R2, R1, R3
    0877a0:   E5BF        POSTDIVF64   R1, R0H
    0877a1:   E6DF000C    MOV64        R4, R1, UNCF
    681     	varCpu1.i1REff = (short)sqrtf(i1Rout);
    0877a3:   E2AF0044    MOV32        R0H, *-SP[4], UNCF
    0877a5:   E29F0046    MOV32        R0L, *-SP[6], UNCF
    0877a7:   E6900000    F64TOF32     R0H, R0
    0877a9:   7648CFB8    LCR          sqrtf
    0877ab:   E68C0000    F32TOI16     R0H, R0H
    0877ad:   761F05C7    MOVW         DP, #0x5c7
    0877af:   E2130035    MOV16        @0x35, R0H
    682     	varCpu1.i1SEff = (short)sqrtf(i1Sout);
    0877b1:   E2AF0048    MOV32        R0H, *-SP[8], UNCF
    0877b3:   E29F004A    MOV32        R0L, *-SP[10], UNCF
    0877b5:   E6900000    F64TOF32     R0H, R0
    0877b7:   7648CFB8    LCR          sqrtf
    0877b9:   E68C0000    F32TOI16     R0H, R0H
    0877bb:   761F05C7    MOVW         DP, #0x5c7
    0877bd:   E2130036    MOV16        @0x36, R0H
    683     	varCpu1.i1TEff = (short)sqrtf(i1Tout);
    0877bf:   E6900038    F64TOF32     R0H, R7
    0877c1:   7648CFB8    LCR          sqrtf
    0877c3:   E68C0000    F32TOI16     R0H, R0H
    0877c5:   761F05C7    MOVW         DP, #0x5c7
    0877c7:   E2130037    MOV16        @0x37, R0H
    684     	varCpu1.vRSEff = (short)sqrtf(vRSout);
    0877c9:   E6900030    F64TOF32     R0H, R6
    0877cb:   7648CFB8    LCR          sqrtf
    0877cd:   E68C0000    F32TOI16     R0H, R0H
    0877cf:   761F05C7    MOVW         DP, #0x5c7
    0877d1:   E2130038    MOV16        @0x38, R0H
    685     	varCpu1.vSTEff = (short)sqrtf(vSTout);
    0877d3:   E6900028    F64TOF32     R0H, R5
    0877d5:   7648CFB8    LCR          sqrtf
    0877d7:   E68C0000    F32TOI16     R0H, R0H
    0877d9:   761F05C7    MOVW         DP, #0x5c7
    0877db:   E2130039    MOV16        @0x39, R0H
    686     	varCpu1.vTREff = (short)sqrtf(vTRout);
    0877dd:   E6900020    F64TOF32     R0H, R4
    0877df:   7648CFB8    LCR          sqrtf
    0877e1:   E68C0000    F32TOI16     R0H, R0H
    0877e3:   761F05C7    MOVW         DP, #0x5c7
    0877e5:   E213003A    MOV16        @0x3a, R0H
    688     	dV = varCpu1.vFil2 - varCpu1.vF2Fil; 
    0877e7:   922B        MOV          AL, @0x2b
    0877e8:   9E2C        SUB          AL, @0x2c
    0877e9:   9641        MOV          *-SP[1], AL
    689     	varCpu1.vF2Fil += dV / 5; //kfvF;
    0877ea:   0205        MOVB         ACC, #5
    0877eb:   BDA90F1E    MOV32        R3H, @ACC
    0877ed:   7700        NOP          
    0877ee:   E2C80141    I16TOF32     R1H, *-SP[1]
    0877f0:   7700        NOP          
    0877f1:   E851E009    MPYF32       R1H, #0x4780, R1H
    0877f3:   E68D001B    I16TOF32     R3H, R3H
    0877f5:   E6880009    F32TOI32     R1H, R1H
    0877f7:   E688001B    F32TOI32     R3H, R3H
    0877f9:   7700        NOP          
    0877fa:   E568        ABSI32DIV32   R2H, R1H, R3H
    0877fb:   E564        SUBC4UI32    R2H, R1H, R3H
    0877fc:   E564        SUBC4UI32    R2H, R1H, R3H
    0877fd:   E564        SUBC4UI32    R2H, R1H, R3H
    0877fe:   E564        SUBC4UI32    R2H, R1H, R3H
    0877ff:   E56A        NEGI32DIV32   R1H, R2H
    087800:   7700        NOP          
    087801:   BFA90F16    MOV32        @ACC, R1H
    087803:   722C        ADD          @0x2c, AL
    690     }
    087804:   FE8A        SUBB         SP, #10
    087805:   E2AF07BE    MOV32        R7H, *--SP, UNCF
    087807:   E29F07BE    MOV32        R7L, *--SP, UNCF
    087809:   E2AF06BE    MOV32        R6H, *--SP, UNCF
    08780b:   E29F06BE    MOV32        R6L, *--SP, UNCF
    08780d:   E2AF05BE    MOV32        R5H, *--SP, UNCF
    08780f:   E29F05BE    MOV32        R5L, *--SP, UNCF
    087811:   E2AF04BE    MOV32        R4H, *--SP, UNCF
    087813:   E29F04BE    MOV32        R4L, *--SP, UNCF
    087815:   0006        LRETR        
    462     

    是否有任何其他位置修改 vADC 或 IADC? 这些地方中是否有一个像中断一样的地方可能发生在 线路 IADC = vADC/16.6664且达到条件的时间内?

    我进行了此检查、因为出现了问题。

    没有其它修改 vADC 或 IADC 的点。  

    感谢您的支持。

    贝尼托

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Benito、

    从效率和解决问题的角度来看、我想说您可能应该使用乘法而不是除法:

    您为嵌套而附加的代码不会显示在 getAdcc4函数中 IADC 和 vADC 正在修改的位置、请仅限制您附加的汇编、以便我可以进行适当的一对一比较。  你有一个使用乘法的权变措施、所以你可以继续这样做、但是如果你想要调试带有嵌套中断的除法、那么我将需要这个信息。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Omer:

    根据您的要求、我在此处附上  getAdcc4函数在三种情况下的汇编代码:

    1)乘法+嵌套启用(无错误)

    2) 2)除法+嵌套启用(错误)

    3) 3)除法+嵌套禁用(无错误)

    1) 1)在下方   使用乘法的 getAdcc4函数

    C 函数  

    signed int getAdcc4(unsigned int k_trasd, unsigned int k)
    {
        static float vADC = 0;
        static float iADC = 0;
        static float iLem = 0;
        static unsigned int err = 0;
    
        vADC = -1.5;
    
        if ((vADC > -1.45) || (vADC < -1.55))
            err++;
    
        iADC = vADC*0.06000096;
    
        if ((iADC > -0.09) || (iADC < -0.1))
                err++;
    
        iLem = (k*k_trasd*iADC)+0.5;
        
        if (iLem > -1700)
            err++;
            
        return ((signed int)(iLem));
    }

    汇编代码

            getAdcc4():
     FE04        ADDB         SP, #4
    08b333:   9744        MOV          *-SP[4], AH
    08b334:   9643        MOV          *-SP[3], AL
    575         vADC = -1.5;
    08b335:   E805FE00    MOVIZ        R0, #0xbfc0
    08b337:   761F02A4    MOVW         DP, #0x2a4
    08b339:   E203001C    MOV32        @0x1c, R0H
    576         if ((vADC > -1.45) || (vADC < -1.55))
    08b33b:   E805FFB9    MOVIZ        R1, #0xbff7
    08b33d:   E8099999    MOVXI        R1H, #0x3333
    08b33f:   E28C001C    F32TOF64     R0, @0x1c
    08b341:   E9019999    MOVIX        R1L, #0x3333
    08b343:   E9099999    MOVXI        R1L, #0x3333
    08b345:   E6980008    CMPF64       R0, R1
    08b347:   AD14        MOVST0       NF,ZF
    08b348:   620F        SB           $C$L104, GT
    08b349:   E805FFC1    MOVIZ        R1, #0xbff8
    08b34b:   E28C001C    F32TOF64     R0, @0x1c
    08b34d:   E80E6661    MOVXI        R1H, #0xcccc
    08b34f:   E9066661    MOVIX        R1L, #0xcccc
    08b351:   E90E6669    MOVXI        R1L, #0xcccd
    08b353:   E6980008    CMPF64       R0, R1
    08b355:   AD14        MOVST0       NF,ZF
    08b356:   6302        SB           $C$L105, GEQ
    577             err++;
            $C$L104:
    08b357:   0A11        INC          @0x11
    579         iADC = vADC*0.06000096;
            $C$L105:
    08b358:   E801FD71    MOVIZ        R1, #0x3fae
    08b35a:   E28C001C    F32TOF64     R0, @0x1c
    08b35c:   E80DC391    MOVXI        R1H, #0xb872
    08b35e:   E9010ED9    MOVIX        R1L, #0x21db
    08b360:   E90B9009    MOVXI        R1L, #0x7201
    08b362:   E7800008    MPYF64       R0, R1, R0
    08b364:   7700        NOP          
    08b365:   7700        NOP          
    08b366:   E6900000    F64TOF32     R0H, R0
    08b368:   7700        NOP          
    08b369:   E203001E    MOV32        @0x1e, R0H
    580         if ((iADC > -0.09) || (iADC < -0.1))
    08b36b:   E805FDB9    MOVIZ        R1, #0xbfb7
    08b36d:   E28C001E    F32TOF64     R0, @0x1e
    08b36f:   E80851E9    MOVXI        R1H, #0xa3d
    08b371:   E9038519    MOVIX        R1L, #0x70a3
    08b373:   E90EB851    MOVXI        R1L, #0xd70a
    08b375:   E6980008    CMPF64       R0, R1
    08b377:   AD14        MOVST0       NF,ZF
    08b378:   620F        SB           $C$L106, GT
    08b379:   E805FDC9    MOVIZ        R1, #0xbfb9
    08b37b:   E28C001E    F32TOF64     R0, @0x1e
    08b37d:   E80CCCC9    MOVXI        R1H, #0x9999
    08b37f:   E904CCC9    MOVIX        R1L, #0x9999
    08b381:   E90CCCD1    MOVXI        R1L, #0x999a
    08b383:   E6980008    CMPF64       R0, R1
    08b385:   AD14        MOVST0       NF,ZF
    08b386:   6302        SB           $C$L107, GEQ
    581                 err++;
            $C$L106:
    08b387:   0A11        INC          @0x11
    582         iLem = (k*k_trasd*iADC)+0.5;
            $C$L107:
    08b388:   2D43        MOV          T, *-SP[3]
    08b389:   1244        MPY          ACC, T, *-SP[4]
    08b38a:   0EA9        MOVU         ACC, @AL
    08b38b:   BDA90F12    MOV32        R0H, @ACC
    08b38d:   7700        NOP          
    08b38e:   7700        NOP          
    08b38f:   7700        NOP          
    08b390:   7700        NOP          
    08b391:   E68B0000    UI32TOF32    R0H, R0H
    08b393:   E2AF011E    MOV32        R1H, @0x1e, UNCF
    08b395:   E7000008    MPYF32       R0H, R1H, R0H
    08b397:   7700        NOP          
    08b398:   E88FC000    ADDF32       R0H, #0x3f00, R0H
    08b39a:   7700        NOP          
    08b39b:   E2030020    MOV32        @0x20, R0H
    583         if (iLem > -1700)
    08b39d:   E80626A0    MOVIZ        R0, #0xc4d4
    08b39f:   E2AF0120    MOV32        R1H, @0x20, UNCF
    08b3a1:   E80C0000    MOVXI        R0H, #0x8000
    08b3a3:   E6940001    CMPF32       R1H, R0H
    08b3a5:   AD14        MOVST0       NF,ZF
    08b3a6:   6502        SB           $C$L108, LEQ
    584             err++;
    08b3a7:   0A11        INC          @0x11
    585         return ((signed int)(iLem));
            $C$L108:
    08b3a8:   E2AF0020    MOV32        R0H, @0x20, UNCF
    08b3aa:   E68C0000    F32TOI16     R0H, R0H
    08b3ac:   7700        NOP          
    08b3ad:   7700        NOP          
    08b3ae:   BFA90F12    MOV32        @ACC, R0H
    586     }
    08b3b0:   FE84        SUBB         SP, #4
    08b3b1:   0006        LRETR        

    2) 2)在下方   使用除法的 getAdcc4函数

    C 函数  

    signed int getAdcc4(unsigned int k_trasd, unsigned int k)
    {
        static float vADC = 0;
        static float iADC = 0;
        static float iLem = 0;
        static unsigned int err = 0;
    
        vADC = -1.5;
        if ((vADC > -1.45) || (vADC < -1.55))
            err++;
    
        iADC = vADC/16.6664;
    
        if ((iADC > -0.09) || (iADC < -0.1))
                err++;
    
        iLem = (k*k_trasd*iADC)+0.5;
    
        if (iLem > -1700)
            err++;
            
        return ((signed int)(iLem));
    }

    汇编代码

            getAdcc4():
    08ae58:   FE04        ADDB         SP, #4
    08ae59:   9744        MOV          *-SP[4], AH
    08ae5a:   9643        MOV          *-SP[3], AL
    575         vADC = -1.5;
    08ae5b:   E805FE00    MOVIZ        R0, #0xbfc0
    08ae5d:   761F02A4    MOVW         DP, #0x2a4
    08ae5f:   E203001C    MOV32        @0x1c, R0H
    576         if ((vADC > -1.45) || (vADC < -1.55))
    08ae61:   E805FFB9    MOVIZ        R1, #0xbff7
    08ae63:   E8099999    MOVXI        R1H, #0x3333
    08ae65:   E28C001C    F32TOF64     R0, @0x1c
    08ae67:   E9019999    MOVIX        R1L, #0x3333
    08ae69:   E9099999    MOVXI        R1L, #0x3333
    08ae6b:   E6980008    CMPF64       R0, R1
    08ae6d:   AD14        MOVST0       NF,ZF
    08ae6e:   620F        SB           $C$L104, GT
    08ae6f:   E805FFC1    MOVIZ        R1, #0xbff8
    08ae71:   E28C001C    F32TOF64     R0, @0x1c
    08ae73:   E80E6661    MOVXI        R1H, #0xcccc
    08ae75:   E9066661    MOVIX        R1L, #0xcccc
    08ae77:   E90E6669    MOVXI        R1L, #0xcccd
    08ae79:   E6980008    CMPF64       R0, R1
    08ae7b:   AD14        MOVST0       NF,ZF
    08ae7c:   6302        SB           $C$L105, GEQ
    577             err++;
            $C$L104:
    08ae7d:   0A11        INC          @0x11
    578         iADC = vADC/16.6664;
            $C$L105:
    08ae7e:   E8020183    MOVIZ        R3, #0x4030
    08ae80:   E28C021C    F32TOF64     R2, @0x1c
    08ae82:   E80D54CB    MOVXI        R3H, #0xaa99
    08ae84:   E90185F3    MOVIX        R3L, #0x30be
    08ae86:   E9086F6B    MOVXI        R3L, #0xded
    08ae88:   E5BE        PREDIVF64    R0H, R2, R1, R3
    08ae89:   E566        SUBC3F64     R2, R1, R3
    08ae8a:   E566        SUBC3F64     R2, R1, R3
    08ae8b:   E566        SUBC3F64     R2, R1, R3
    08ae8c:   E566        SUBC3F64     R2, R1, R3
    08ae8d:   E566        SUBC3F64     R2, R1, R3
    08ae8e:   E566        SUBC3F64     R2, R1, R3
    08ae8f:   E566        SUBC3F64     R2, R1, R3
    08ae90:   E566        SUBC3F64     R2, R1, R3
    08ae91:   E566        SUBC3F64     R2, R1, R3
    08ae92:   E566        SUBC3F64     R2, R1, R3
    08ae93:   E566        SUBC3F64     R2, R1, R3
    08ae94:   E566        SUBC3F64     R2, R1, R3
    08ae95:   E566        SUBC3F64     R2, R1, R3
    08ae96:   E566        SUBC3F64     R2, R1, R3
    08ae97:   E566        SUBC3F64     R2, R1, R3
    08ae98:   E566        SUBC3F64     R2, R1, R3
    08ae99:   E566        SUBC3F64     R2, R1, R3
    08ae9a:   E566        SUBC3F64     R2, R1, R3
    08ae9b:   E566        SUBC3F64     R2, R1, R3
    08ae9c:   E5BF        POSTDIVF64   R1, R0H
    08ae9d:   E6900008    F64TOF32     R0H, R1
    08ae9f:   7700        NOP          
    08aea0:   E203001E    MOV32        @0x1e, R0H
    580         if ((iADC > -0.09) || (iADC < -0.1))
    08aea2:   E805FDB9    MOVIZ        R1, #0xbfb7
    08aea4:   E28C001E    F32TOF64     R0, @0x1e
    08aea6:   E80851E9    MOVXI        R1H, #0xa3d
    08aea8:   E9038519    MOVIX        R1L, #0x70a3
    08aeaa:   E90EB851    MOVXI        R1L, #0xd70a
    08aeac:   E6980008    CMPF64       R0, R1
    08aeae:   AD14        MOVST0       NF,ZF
    08aeaf:   620F        SB           $C$L106, GT
    08aeb0:   E805FDC9    MOVIZ        R1, #0xbfb9
    08aeb2:   E28C001E    F32TOF64     R0, @0x1e
    08aeb4:   E80CCCC9    MOVXI        R1H, #0x9999
    08aeb6:   E904CCC9    MOVIX        R1L, #0x9999
    08aeb8:   E90CCCD1    MOVXI        R1L, #0x999a
    08aeba:   E6980008    CMPF64       R0, R1
    08aebc:   AD14        MOVST0       NF,ZF
    08aebd:   6302        SB           $C$L107, GEQ
    581                 err++;
            $C$L106:
    08aebe:   0A11        INC          @0x11
    582         iLem = (k*k_trasd*iADC)+0.5;
            $C$L107:
    08aebf:   2D43        MOV          T, *-SP[3]
    08aec0:   1244        MPY          ACC, T, *-SP[4]
    08aec1:   0EA9        MOVU         ACC, @AL
    08aec2:   BDA90F12    MOV32        R0H, @ACC
    08aec4:   7700        NOP          
    08aec5:   7700        NOP          
    08aec6:   7700        NOP          
    08aec7:   7700        NOP          
    08aec8:   E68B0000    UI32TOF32    R0H, R0H
    08aeca:   E2AF011E    MOV32        R1H, @0x1e, UNCF
    08aecc:   E7000008    MPYF32       R0H, R1H, R0H
    08aece:   7700        NOP          
    08aecf:   E88FC000    ADDF32       R0H, #0x3f00, R0H
    08aed1:   7700        NOP          
    08aed2:   E2030020    MOV32        @0x20, R0H
    583         if (iLem > -1700)
    08aed4:   E80626A0    MOVIZ        R0, #0xc4d4
    08aed6:   E2AF0120    MOV32        R1H, @0x20, UNCF
    08aed8:   E80C0000    MOVXI        R0H, #0x8000
    08aeda:   E6940001    CMPF32       R1H, R0H
    08aedc:   AD14        MOVST0       NF,ZF
    08aedd:   6502        SB           $C$L108, LEQ
    584             err++;
    08aede:   0A11        INC          @0x11
    585         return ((signed int)(iLem));
            $C$L108:
    08aedf:   E2AF0020    MOV32        R0H, @0x20, UNCF
    08aee1:   E68C0000    F32TOI16     R0H, R0H
    08aee3:   7700        NOP          
    08aee4:   7700        NOP          
    08aee5:   BFA90F12    MOV32        @ACC, R0H
    586     }
    08aee7:   FE84        SUBB         SP, #4
    08aee8:   0006        LRETR     

    3)在下面    禁用除法和嵌套的 getAdcc4函数

    C 函数  

    signed int getAdcc4(unsigned int k_trasd, unsigned int k)
    {
        static float vADC = 0;
        static float iADC = 0;
        static float iLem = 0;
        static unsigned int err = 0;
    
        vADC = -1.5;
        
        if ((vADC > -1.45) || (vADC < -1.55))
            err++;
            
        IER = 0;
        iADC = vADC/16.6664;
        IER =  M_INT13 ;
    
        if ((iADC > -0.09) || (iADC < -0.1))
                err++;
                
        iLem = (k*k_trasd*iADC)+0.5;
        
        if (iLem > -1700)
            err++;
            
        return ((signed int)(iLem));
    }

    汇编代码

            getAdcc4():
    08ae58:   FE04        ADDB         SP, #4
    08ae59:   9744        MOV          *-SP[4], AH
    08ae5a:   9643        MOV          *-SP[3], AL
    575         vADC = -1.5;
    08ae5b:   E805FE00    MOVIZ        R0, #0xbfc0
    08ae5d:   761F02A4    MOVW         DP, #0x2a4
    08ae5f:   E203001C    MOV32        @0x1c, R0H
    576         if ((vADC > -1.45) || (vADC < -1.55))
    08ae61:   E805FFB9    MOVIZ        R1, #0xbff7
    08ae63:   E8099999    MOVXI        R1H, #0x3333
    08ae65:   E28C001C    F32TOF64     R0, @0x1c
    08ae67:   E9019999    MOVIX        R1L, #0x3333
    08ae69:   E9099999    MOVXI        R1L, #0x3333
    08ae6b:   E6980008    CMPF64       R0, R1
    08ae6d:   AD14        MOVST0       NF,ZF
    08ae6e:   620F        SB           $C$L104, GT
    08ae6f:   E805FFC1    MOVIZ        R1, #0xbff8
    08ae71:   E28C001C    F32TOF64     R0, @0x1c
    08ae73:   E80E6661    MOVXI        R1H, #0xcccc
    08ae75:   E9066661    MOVIX        R1L, #0xcccc
    08ae77:   E90E6669    MOVXI        R1L, #0xcccd
    08ae79:   E6980008    CMPF64       R0, R1
    08ae7b:   AD14        MOVST0       NF,ZF
    08ae7c:   6302        SB           $C$L105, GEQ
    577             err++;
            $C$L104:
    08ae7d:   0A11        INC          @0x11
    578         IER = 0;
            $C$L105:
    08ae7e:   76260000    AND          IER, #0x0000
    579         iADC = vADC/16.6664;
    08ae80:   E8020183    MOVIZ        R3, #0x4030
    08ae82:   E28C021C    F32TOF64     R2, @0x1c
    08ae84:   E80D54CB    MOVXI        R3H, #0xaa99
    08ae86:   E90185F3    MOVIX        R3L, #0x30be
    08ae88:   E9086F6B    MOVXI        R3L, #0xded
    08ae8a:   E5BE        PREDIVF64    R0H, R2, R1, R3
    08ae8b:   E566        SUBC3F64     R2, R1, R3
    08ae8c:   E566        SUBC3F64     R2, R1, R3
    08ae8d:   E566        SUBC3F64     R2, R1, R3
    08ae8e:   E566        SUBC3F64     R2, R1, R3
    08ae8f:   E566        SUBC3F64     R2, R1, R3
    08ae90:   E566        SUBC3F64     R2, R1, R3
    08ae91:   E566        SUBC3F64     R2, R1, R3
    08ae92:   E566        SUBC3F64     R2, R1, R3
    08ae93:   E566        SUBC3F64     R2, R1, R3
    08ae94:   E566        SUBC3F64     R2, R1, R3
    08ae95:   E566        SUBC3F64     R2, R1, R3
    08ae96:   E566        SUBC3F64     R2, R1, R3
    08ae97:   E566        SUBC3F64     R2, R1, R3
    08ae98:   E566        SUBC3F64     R2, R1, R3
    08ae99:   E566        SUBC3F64     R2, R1, R3
    08ae9a:   E566        SUBC3F64     R2, R1, R3
    08ae9b:   E566        SUBC3F64     R2, R1, R3
    08ae9c:   E566        SUBC3F64     R2, R1, R3
    08ae9d:   E566        SUBC3F64     R2, R1, R3
    08ae9e:   E5BF        POSTDIVF64   R1, R0H
    08ae9f:   E6900008    F64TOF32     R0H, R1
    08aea1:   7700        NOP          
    08aea2:   E203001E    MOV32        @0x1e, R0H
    580         IER =  M_INT13 ;
    08aea4:   28A91000    MOV          @AL, #0x1000
    08aea6:   23A9        MOV          IER, @AL
    582         if ((iADC > -0.09) || (iADC < -0.1))
    08aea7:   E805FDB9    MOVIZ        R1, #0xbfb7
    08aea9:   E28C001E    F32TOF64     R0, @0x1e
    08aeab:   E80851E9    MOVXI        R1H, #0xa3d
    08aead:   E9038519    MOVIX        R1L, #0x70a3
    08aeaf:   E90EB851    MOVXI        R1L, #0xd70a
    08aeb1:   E6980008    CMPF64       R0, R1
    08aeb3:   AD14        MOVST0       NF,ZF
    08aeb4:   620F        SB           $C$L106, GT
    08aeb5:   E805FDC9    MOVIZ        R1, #0xbfb9
    08aeb7:   E28C001E    F32TOF64     R0, @0x1e
    08aeb9:   E80CCCC9    MOVXI        R1H, #0x9999
    08aebb:   E904CCC9    MOVIX        R1L, #0x9999
    08aebd:   E90CCCD1    MOVXI        R1L, #0x999a
    08aebf:   E6980008    CMPF64       R0, R1
    08aec1:   AD14        MOVST0       NF,ZF
    08aec2:   6302        SB           $C$L107, GEQ
    583                 err++;
            $C$L106:
    08aec3:   0A11        INC          @0x11
    584         iLem = (k*k_trasd*iADC)+0.5;
            $C$L107:
    08aec4:   2D43        MOV          T, *-SP[3]
    08aec5:   1244        MPY          ACC, T, *-SP[4]
    08aec6:   0EA9        MOVU         ACC, @AL
    08aec7:   BDA90F12    MOV32        R0H, @ACC
    08aec9:   7700        NOP          
    08aeca:   7700        NOP          
    08aecb:   7700        NOP          
    08aecc:   7700        NOP          
    08aecd:   E68B0000    UI32TOF32    R0H, R0H
    08aecf:   E2AF011E    MOV32        R1H, @0x1e, UNCF
    08aed1:   E7000008    MPYF32       R0H, R1H, R0H
    08aed3:   7700        NOP          
    08aed4:   E88FC000    ADDF32       R0H, #0x3f00, R0H
    08aed6:   7700        NOP          
    08aed7:   E2030020    MOV32        @0x20, R0H
    585         if (iLem > -1700)
    08aed9:   E80626A0    MOVIZ        R0, #0xc4d4
    08aedb:   E2AF0120    MOV32        R1H, @0x20, UNCF
    08aedd:   E80C0000    MOVXI        R0H, #0x8000
    08aedf:   E6940001    CMPF32       R1H, R0H
    08aee1:   AD14        MOVST0       NF,ZF
    08aee2:   6502        SB           $C$L108, LEQ
    586             err++;
    08aee3:   0A11        INC          @0x11
    587         return ((signed int)(iLem));
            $C$L108:
    08aee4:   E2AF0020    MOV32        R0H, @0x20, UNCF
    08aee6:   E68C0000    F32TOI16     R0H, R0H
    08aee8:   7700        NOP          
    08aee9:   7700        NOP          
    08aeea:   BFA90F12    MOV32        @ACC, R0H
    588     }
    08aeec:   FE84        SUBB         SP, #4
    08aeed:   0006        LRETR        
     396

    感谢您的支持!

    此致、

    贝尼托

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Benito、

    是否可以尝试用全局浮点变量(volatile 和非 voltail)和宏(即#define)替换16.6664值? 我想看看这是否与操作数是一个常数相关。

    如果结果相同、我认为这可能与浮点运算之间所需的 NOP 相关。 在单步执行代码时、是否可以复制情况2 (启用嵌套的除法)中的问题?  如果是、您能看到浮点寄存器(即 R0、R1、R2和 R3)加载了哪些值、并将其与情况3进行比较吗? 这些值必须不同、但大会中没有任何内容向我表明这一点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的先生: Amir,Omer  

    您能尝试用全局浮点变量(volatile 和非 voltail)和宏(即#define)替换16.6664值吗? 我想看看这是否与操作数是一个常量相关。

    我在调试开始时进行了此测试、并验证了是否发生了错误。

    然后我用常数值16.6664...替换了宏或变量

    。 在单步执行代码时、是否可以复制情况2 (启用嵌套的除法)中的问题?  如果是、您能看到浮点寄存器(即 R0、R1、R2和 R3)加载了哪些值、并将其与情况3进行比较吗?

    下面我附上了您建议的测试结果。

    启用嵌套的除法  

    下面、 如果 没有发生错误、FP 寄存器会在除法之后的状态:

    如下所示、  发生错误时 FP 寄存器会在除法之后的状态

    禁用嵌套的除法  

    下面是 fp 寄存器的状态、然后是除法。 在 这种情况下、不会发生错误。

    如果您需要进一步的数据、请告诉我。

    感谢您的支持、

    贝尼托

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Benito、

    是否可以向我发送您项目的压缩版本? 此调试的其余部分需要单步执行汇编代码、并观察 R0-R3寄存器的加载方式  之前 通过除法了解这些值为何不同。 如果您无法发送工程、则需要执行此操作并尝试找出寄存器值差异的根本原因。 当您找到  为什么 值是不同的、您可以在此处发布、我可以进一步帮助您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的先生: Amir,Omer

    很遗憾、我 无法 发送项目的版本。

    我将尝试监控寄存器 R0-R3。

    贝尼托

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Benito、

      欧默尔本周不在办公室。 我们将等待您的监控寄存器 R0-R3的结果。