本帖最后由 xstong 于 2016-3-25 11:07 编辑
故障现象是:向发送寄存器写入数据时,寄存器监视窗里面看到,写入发送寄存器的数值却是另外一个值。
1. 用这段代码,串口发送的数据,在其中一块板子上出现异常(其它板子全部正常):
void Uart_SendData(int8u_t *buf,int8u_t len)
{
while(len--)
{
while (!(IFG2&UCA0TXIFG));
UCA0TXBUF = *buf++;
}
}
2. 修改发送函数如下,全部都正常了:
void Uart_SendData(int8u_t *buf,int8u_t len)
{
int8u_t i;
for(i=0;i<len;i++){
while (!(IFG2&UCA0TXIFG));
UCA0TXBUF = *buf++;
}
}
相信很少有人遇到过这个问题,做了很多产品,也是无意中发现这样一个问题。
3. 另外一个问题,如果这样写代码 while(len--); 在某个应用里面,即便初值必定大于0,也会出现陷入死循环,跳不出来。
因用量相对较大,都是原厂直接代理处提的货,货品只能说是正品。但对原厂这正品的质量表示怀疑。
430编译器、单片机都是处处暗藏杀机。不是我乱喷,事实没少折磨人啊。
|