我有一个嵌入式系统,应根据其状态存储不同的结果集。
一种可能的解决方案是使用联合:
typedef struct
{
union
{
struct
{
double Val1;
double Val2;
} State1;
struct
{
double Val3;
} State2;
};
} strBuf;
strBuf Buf;
现在我可以使用这些函数存储值(我可以通过函数指针调用它来切换测量类型):
void meas1(strRes* res)
{
Buf.State1.Val1 = res->v1;
Buf.State1.Val2 = res->v2;
}
void meas2(strRes* res)
{
Buf.State2.Val3 = res->v1;
}
我们的想法是根据测量结果使用State1或State2。
我认为union结构是一种可靠的方式,因为在分配内存时我不会犯错误。 缺点是在State2中不必要地使用内存。 另一个缺点是可以访问错误的变量。
但出于好奇:我如何用指针做到这一点? 您建议的解决方案的优缺点是什么?
编辑:
系统每100 ms生成一次值。这些都是在RX210上处理的。
第一个状态从两个双精度数d1 [n],d2 [n]和先前的值d1 [n-1],d2 [n-1]计算如下: m = log2(d1 [n] / d1 [n-1])/ log2(d2 [n] / d2 [n-1]) (我想log2是最快的日志)
第二个状态仅计算两个双打的比率: p = d1 [n] / d2 [n]
这意味着我不必存储n-1值。
编辑2: strRes是指向之前生成的值的指针。像
这样的东西typedef struct
{
double v1;
double v2;
} strRes;
答案 0 :(得分:2)
您可以使用以下代码。
typedef struct {
double *val;
} strBuf;
strBuf Buf;
void meas1(strRes* res)
{
Buf.val = malloc(2 * sizeof(double));
Buf.val[0] = res->v1;
Buf.val[1] = res->v2;
}
void meas2(strRes* res)
{
Buf.val = malloc(1 * sizeof(double));
Buf.val[0] = res->v1;
}
优点:在需要时动态分配内存。 没有不必要的记忆浪费。
缺点:速度,因为内存是在运行时分配的。