C51编程:关于keilc51优化设置的bug
我发现用keil51高级优化选项后,有些代码不能正确执行,请看下面代码:
所有变量均为idata变量。
使用的编译器为keilc6.12,4级优化以前,程序正常运行,5级以后,校验和便不能正确累加。
keilc51的代码优化性能究竟怎样,其生成的代码可靠性如何,使用有何技巧,请各路大侠不吝
赐教。
case change_customer: //change_customer=0xa5,常量。
{
com_buf_tx[0]=0; //包长度低字节
com_buf_tx[1]=5; //包长度高字节
com_buf_tx[2]=change_customer;
//高字节转换成16进制
com_buf_tx[3]=(key[4]>>4)*10+(key[4]&0x0f);
//低字节转换成16进制
com_buf_tx[4]=(key[5]>>4)*10+(key[5]&0x0f);
//把两个16进制数组合成一个整数
wp=(WORD idata *)&com_buf_tx[3];
*wp=com_buf_tx[3]*100+com_buf_tx[4];
tx_length=7;
//累加校验和
wp=(WORD idata *)(&com_buf_tx[0]+5);
*wp=0xaa+com_buf_tx[3]+com_buf_tx[4];
SBUF=0xc0;
uart_busy=1; //正在发送数据,
txorder=255;
}break;
发表时间:2002年3月15日8:49:00