我正在使用 ublox m8t 进行一个项目,我正在阅读几个软件包,其中一个是 sfrbx 。
capybara-webkit
struct buffer {
// The buffer's length are overestimated
u_int8_t rawbuf[1024]; //THE LENGTH IS UNKNOW, PROB AROUND 300BYTES
u_int8_t clkbuf[NAVCLOCK_LENGTH+10];
u_int8_t navposbuf[NAVPOSLLH_LENGTH+10];
u_int8_t navpvtbuf[NAVPVT_LENGTH + 10];
u_int8_t sfrb[16][1024];
};
是我们正在讨论的二维数组。
阅读包后,我将其传递给函数进行处理。
功能委托:
sfrb
Function.c:
void decode_rxmsfrb(u_int8_t rawbuf[][],struct rxmsfrbx *ptrsubframe[], int n);
主函数调用:
void decode_rxmsfrb(u_int8_t sfrbx[][], struct rxmsfrbx *ptrsubframe[], int n)
{
int i,j;
unsigned char sv = = *((unsigned char*)&sfrbx[j][1]);
for(j=0; j<n;j++){
ptrsubframe[sv]->gnssid = *((unsigned char*)&sfrbx[j][0]);
ptrsubframe[sv]->svid = *((unsigned char*)&sfrbx[j][1]);
ptrsubframe[sv]->reserverd1 = *((unsigned char*)&sfrbx[j][2]);
ptrsubframe[sv]->freqid = *((unsigned char*)&sfrbx[j][3]);
ptrsubframe[sv]->N = *((unsigned char*)&sfrbx[j][4]);
ptrsubframe[sv]->reserverd2 = *((unsigned char*)&sfrbx[j][5]);
ptrsubframe[sv]->version = *((unsigned char*)&sfrbx[j][6]);
ptrsubframe[sv]->reserverd3 = *((unsigned char*)&sfrbx[j][7]);
/* Now we have to read the subframe and then parse it */
for(i=0; i<ptrsubframe[sv]->N;i++){
ptrsubframe[sv]->dword[i] = *((unsigned int*)&sfrbx[j][8+4*i]);
}
}
}
问题在于我猜编译器不喜欢decode_rxmsfrb(bufinformation0.sfrb, &subframe,k);
,因为它试图映射内存的2个不同区域(sfrbx[j][8+4*i]);
和J
)。
当我对普通数组使用这种寻址方式时,像这样:
8+4*i
有效。
为什么会出现此问题?
编辑解决方案:void encode_rxmsfrb(u_int8_t rawbuf [16] [1024],struct rxmsfrbx * ptrsubframe [],int n);