项目中需要发送几百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));
/*************************»o′æ200×éêyÔù·¢*****************************/
stataddr += 12;
count++;
if(count%200==0) //200ìõ′«êäò»′Î
{
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));
/*************************»o′æ200×éêyÔù·¢*****************************/
stataddr += 12;
count++;
if(count%200==0) //200ìõ′«êäò»′Î
{
*(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]
求大神指点迷津~~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>