从ICC移值过来的程序~ 到了IAR不正常,把所有优化都去掉,还是不正常。 C程序是 void ProcessCommuData(void) {
if(m_st_Commu.u8GetDataOk == 1)// { if(m_st_Commu.u8RecData[1] == (~m_st_Commu.u8RecData[0]))//看是否正确接收了数据 { //更新压缩机等状态标志 m_st_SysControl.u8JudgeBit &= 0xe0; m_st_SysControl.u8JudgeBit |= m_st_Commu.u8RecData[0]&0x1f; //m_st_SysControl.u8JudgeBit = 0xfe; } m_st_Commu.u8GetDataOk = 0;//数据处理完毕 } } 对应编译后的少了一些东西,里面判断是否接收正确的句子和里面的语句都没执行。实验了乱改改,比如把 IF语句去掉,可以,或者把IF的判断相等改成判断不相等也可以,能正常运行,看了编译文件,也能正常编译。这是为什么呢,请有经验的同志指点。
In segment CODE, align 2, keep-with-next __nearfunc __version_3 void ProcessCommuData() ProcessCommuData: 00000000 9100.... LDS R16, (m_st_Commu + 7) 00000004 3001 CPI R16, 1 00000006 F419 BRNE ??ProcessCommuData_0 00000008 E000 LDI R16, 0 0000000A 9300.... STS (m_st_Commu + 7), R16 ??ProcessCommuData_0: 0000000E 9508 RET
In segment CODE, align 2, keep-with-next __nearfunc __version_3 void a2dSetChannel(unsigned char) a2dSetChannel: |