i具有名为unpack
的函数,并且编译C 代码会导致几个错误。代码如下:
static void unpack(void *v, ekf_t *ekf, int n, int m) {
/* skip over n, m in data structure */
char *cptr = (char *) v;
cptr += 2 * sizeof(int);
double *dptr = (double *) cptr;
ekf->x = dptr;
dptr += n;
ekf->P = dptr;
dptr += n * n;
ekf->Q = dptr;
dptr += n * n;
ekf->R = dptr;
dptr += m * m;
ekf->G = dptr;
dptr += n * m;
ekf->F = dptr;
dptr += n * n;
ekf->H = dptr;
dptr += m * n;
ekf->Ht = dptr;
dptr += n * m;
ekf->Ft = dptr;
dptr += n * n;
ekf->Pp = dptr;
dptr += n * n;
ekf->fx = dptr;
dptr += n;
ekf->hx = dptr;
dptr += m;
ekf->tmp0 = dptr;
dptr += n * n;
ekf->tmp1 = dptr;
dptr += n * m;
ekf->tmp2 = dptr;
dptr += m * n;
ekf->tmp3 = dptr;
dptr += m * m;
ekf->tmp4 = dptr;
dptr += m * m;
ekf->tmp5 = dptr;
}
我在代码的每一行上都会传播这些错误:
.../src/ekf.c:203:12: error: assignment to expression with array type
ekf->x = dptr;
^
.../src/ekf.c:205:12: error: assignment to expression with array type
ekf->P = dptr;
应注意的是,代码unpack
被从C库中获取。我尝试使用extern
,但这似乎并不好。现在,当我 make
原始存储库(https://github.com/simondlevy/tinyekf)时,它似乎没有问题而编译。包含和使用此代码的Tinyekf的编译命令是:
gcc -Wall -I. -I../../src -o gps_ekf gps_ekf.c ../../src/tiny_ekf.c -lm
这是在存储库中的/extras/c/
中找到的,当然使用unpack
函数。
根据此, ekf.x
是类型double x[]
。正如错误所说,您不能只分配给ekf->x = dptr;
等数组。如果要将dptr
的数据复制到ekf->x
,则可以使用memcpy
:
memcpy(&ekf->x, dptr, sizeof(ekf->x));
所有其他任务都一样,大多数字段是double
数组。