]在定义数组的时候,需要在a[]内开辟元素的个数,如果不写,会被编译器当做是变量
例如:INT8U Uart0_Rxbuf[];编译器可能就认为 Uart0_Rxbuf[]是个变量而不是数组。
当执行以下程序时
/*UART0接受中断服务函数*/
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
Uart0_Rxbuf[Rindex] =UCA0RXBUF;
Rindex=Rindex+1;
if(Rindex>=20)
{
Rindex=0;
}
if(Uart0_Rxbuf[Rindex-1]==0x55) //接收完毕
{
Rxdbuflen = Rindex; //接收数据长度
if(Rxdbuflen<6) //根据协议,0x55结束标志必然出现在5个字节后
{
flag.Rx_Command_Ready=0;
}
else //接收完
{
flag.Rx_Command_Ready=1;
Rindex=0;
Rxdbuflen=0;
if(Uart0_Rxbuf[0]==0xaa) //帧头正确
{
LPM3_EXIT; //退出休眠状态
}
else //帧头不正确
flag.Rx_Command_Ready=0;
}
}
}
数组被当成变量,所以,发了一串数据,回打印到调试助手,发现只打印了第一个数据
当INT8U Uart0_Rxbuf[20];
情况就不一样了,因为编译器吧Uart0_Rxbuf[20];当成数组,开辟而了20个内存
文章评论(0条评论)
登录后参与讨论