关于串口发送数组和指针的差异

2019-10-16 06:52发布

项目中需要发送几百KB的数据,采用缓存到数组然后发送的方式。
最开始采用直接定义数组的方式,发现发送出去的数据中出现了一些错误数据,而通过Debug查看数组中的内容,发现发送时数组的值都为正确值。
[mw_shl_code=applescript,true]        u8 usartdata[2409],Bag_Cnt=1;
  u8 ifo[6]={00,0x09,0x66,0xAA,0xB1,0xE2};
        u8 *p;       
        u32 stataddr,count=0;
       
        stataddr = rec_addr;
        usartdata[2408]=0xFF;
        usartdata[6]=FZ_ID;
        memcpy(usartdata,ifo,6);
        while(stataddr < ADDR_FLASH_END)
        {
    p=Data_Out(stataddr);
    if(p)
                {
                  memcpy(usartdata+8+(count*12),p,12*sizeof(u8));
/*************************&#187;o′&#230;200×éêy&#212;ù·¢*****************************/                 
                        stataddr += 12;
                  count++;
                       
                        if(count%200==0)                  //200ì&#245;′&#171;ê&#228;ò&#187;′&#206;
                        {
                                usartdata[7]=Bag_Cnt;
                                USART3_SendData(usartdata,2409);
                                memset(usartdata+7,0,2400*sizeof(u8));
                                Bag_Cnt++;
                        }
                }
                else
      break;
        }                [/mw_shl_code]
后来改为采用malloc的方式,就可以正确发送数据了,但还是不清楚到底中间哪里出了问题。
[mw_shl_code=applescript,true]        u8 Bag_Cnt=1;
  u8 ifo[6]={00,0x09,0x66,0xAA,0xB1,0xE2};
        u8 push[10]={0xEE,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};
        u8 *p,*q;       
        u32 stataddr,count=0;
       
        stataddr = rec_addr;
        q=(u8*)malloc(2049*sizeof(u8));
        memset(q,0,2409);
        *(q+2408)=0xFF;
        *(q+6)=FZ_ID;
        memcpy(q,ifo,6*sizeof(u8));
        while(stataddr < ADDR_FLASH_END)
        {
    p=Data_Out(stataddr);
    if(p)
                {
                  memcpy(q+8+((count%200)*12+1),p+1,11*sizeof(u8));
/*************************&#187;o′&#230;200×éêy&#212;ù·¢*****************************/                 
                        stataddr += 12;
                  count++;
                       
                        if(count%200==0)                  //200ì&#245;′&#171;ê&#228;ò&#187;′&#206;
                        {
                                *(q+7)=Bag_Cnt;
                                USART1_SendData(q,2409);
//                                free(q);
                                memset(q+8,0,2400*sizeof(u8));
                                Bag_Cnt++;
                                delay_ms(10);
                        }
                }
                else
      break;
        }                [/mw_shl_code]

求大神指点迷津~~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。