TI中文支持网
TI专业的中文技术问题搜集分享网站

CCS5.3编译出现问题,请求帮助

C源代码编译后,对照汇编,发现问题,不知该如何解决

原码:

if(g_CtrlData.errTb >= 20)
{//200ms
     g_CtrlData.errTb = 20;
     gp_RamCtoM->errNum = DEF_ERR_TB;
}

对应汇编:

91                                     if(g_CtrlData.errTb >= 20)
102a9d: 761F0260                 MOVW DP, #0x260
102a9f: 921F                           MOV AL, @0x1f
102aa0: 5214                         CMPB AL, #0x14
93                                       g_CtrlData.errTb = 20;
102aa1: 56B7141F               MOVB @0x1f, #0x14, HIS
94                                       gp_RamCtoM->errNum = DEF_ERR_TB;
102aa3: 761F0238               MOVW DP, #0x238
102aa5: 8A0E                        MOVL XAR4, @0xe
102aa6: 56B712A0               MOVB @AR0, #0x12, HIS
102aa8: 56B70194               MOVB *+XAR4[AR0], #0x01, HIS

问题在于CMPB比较指令之后,少了SB判断标志并跳转的指令,导致不管if的条件是否成立,都继续执行{}中的代码了,如果比较值大于256,编译后生成的是CMP指令,之后肯定会有SB跳转指令,程序则运行正常.

现在找不到解决方法,求助高手帮忙

Forrest:

虽然不管if是否成立都会运行这几句汇编,但并不会进行赋值操作,因为MOVB后面有一个HIS的条件意思是只有在Higher Or Same的情况下该指令才执行。

C源代码编译后,对照汇编,发现问题,不知该如何解决

原码:

if(g_CtrlData.errTb >= 20)
{//200ms
     g_CtrlData.errTb = 20;
     gp_RamCtoM->errNum = DEF_ERR_TB;
}

对应汇编:

91                                     if(g_CtrlData.errTb >= 20)
102a9d: 761F0260                 MOVW DP, #0x260
102a9f: 921F                           MOV AL, @0x1f
102aa0: 5214                         CMPB AL, #0x14
93                                       g_CtrlData.errTb = 20;
102aa1: 56B7141F               MOVB @0x1f, #0x14, HIS
94                                       gp_RamCtoM->errNum = DEF_ERR_TB;
102aa3: 761F0238               MOVW DP, #0x238
102aa5: 8A0E                        MOVL XAR4, @0xe
102aa6: 56B712A0               MOVB @AR0, #0x12, HIS
102aa8: 56B70194               MOVB *+XAR4[AR0], #0x01, HIS

问题在于CMPB比较指令之后,少了SB判断标志并跳转的指令,导致不管if的条件是否成立,都继续执行{}中的代码了,如果比较值大于256,编译后生成的是CMP指令,之后肯定会有SB跳转指令,程序则运行正常.

现在找不到解决方法,求助高手帮忙

user718275:

回复 Forrest:

可能是没有赋值,但运行结果是不对的,按我那样修改之后,运行结果是对的.

好像是其它操作的执行了的了

赞(0)
未经允许不得转载:TI中文支持网 » CCS5.3编译出现问题,请求帮助
分享到: 更多 (0)