最近在使用keil编译ST的upsd3234的单片机时,遇到一个怪事。描述如下:
我的代码中有一段是这样的:
//检测CAN总线发送数据
if(!CanHaveSendOver){ReadyToSend();}
//检测CAN总线付初始数据
else{InPutCanData();}
其中在ReadyToSend();中将CanHaveSendOver变为1,InPutCanData();函数中将
CanHaveSendOver变为0。这一段主要作用是发送CAN数据。此时代码编译正常。现在我不需要发送CAN数据了,故我将这段注释掉,结果编译通过,但是连接时出现异常,报告说数据溢出。我感到很纳闷,按理来讲注释掉后,所占用的资源更少了啊。怎么会编译不成功呢?我后来把代码改写成如下:
//检测CAN总线发送数据
if(!CanHaveSendOver){/*ReadyToSend();*/}
//检测CAN总线付初始数据
else{InPutCanData();}
此时,编译可以通过。但是把下面的InPutCanData()函数注掉,又不通过了。必须要调用InPutCanData()函数才能通过。不知道是什么原因。有哪位高手能否指点一下。 |