У меня есть встроенная система, которая должна хранить разные наборы результатов на основе своего состояния.C указатели вместо объединения
Одним из возможных решений является использование союза:
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 мс. Они обрабатываются на RX210.
Первое состояние вычисляет из двух удвоений d1 [n], d2 [n], а предыдущие значения d1 [n-1], d2 [n-1] следующие: m = log2 (d1 [n]/d1 [п-1])/log2 (d2 [п]/d2 [п-1]) (я полагаю log2 это самый быстрый лог)
Второе состояние только вычисляет отношение двух двойников: р = d1 [n]/d2 [n]
Это означает, что мне не нужно сохранять значения n-1.
Редактировать 2: strRes - это указатель на значения, ранее используемые ранее. Что-то вроде
typedef struct
{
double v1;
double v2;
} strRes;
На самом базовом уровне у вас будут указатели 'void *', содержащие адреса для структур разных типов. Более сложная форма может использовать структуры внутри структур, чтобы имитировать наследование. Ваш вопрос довольно расплывчатый, и поэтому неясно, как вы ожидаете, что ваша проблема будет решена. – user694733
Что такое 'strRes' здесь? –
@ Lưu Vĩnh Phúc strRes - это указатель на измеренные значения, которые содержат либо напряжение, либо ток (как двойной), либо два напряжения (как двойной). –