原创 数组的陷阱

2010-8-11 14:29 1482 3 3 分类: 工程师职场

]在定义数组的时候,需要在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; 
            }
        }  
}


8fc2c038-2cde-42bc-94b9-d5d0293e55fd.jpg


数组被当成变量,所以,发了一串数据,回打印到调试助手,发现只打印了第一个数据


当INT8U Uart0_Rxbuf[20];


情况就不一样了,因为编译器吧Uart0_Rxbuf[20];当成数组,开辟而了20个内存


67e761ce-8f1c-4d43-9a86-6b3624c6a88a.jpg


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条