Если вам нужны переменные разных размеров, вы не можете использовать тип указателя для записи во все из них.
Дизайн немного хрупкий, так как вам нужно знать, на какой элемент указывает указатель или, по крайней мере, его тип.
Я думаю, что лучшим вариантом было бы выполнить работу с memcpy
через функцию и добавить элемент 'size' в chargerRegMap_t
для проверки работоспособности.
Что-то вроде
void write_data(chargerRegMap_t* map, void* data, size_t size)
{
assert(size == map->data_size);
memcpy(map->ptrToData, data, size);
}
/* ... */
uint16_t aFinalBuff = 0x00;
aFinalBuff = buff[1] << 8;
aFinalBuff = aFinalBuff + buff[0];
write_data(charger_reg_map + nRegIndex, &aFinalBuff, sizeof(aFinalBuff));
Я бы, вероятно, добавил к этому макрос, чтобы устранить sizeof
опечатки и сделать его менее утомительным:
#define WRITE_DATA(map, data) write_data(map, &data, sizeof(data))
/* ... */
WRITE_DATA(charger_reg_map + nRegIndex, aFinalBuff);