Seguinte para entenderem melhor o que fiz, vou explicar como que trabalho.
Imajinem um cabo com 16 sensores (exemplo), parte destes 16 sensoes ficam no meio do produto, outra parte deles ficam fora....
Digamos que 8 estão fora do produto e 8 estão no meio do produto.
os 8 que estão dentro dele digamos que estaram assim :
20°C - 21°C - 20°C - 22°C - 21°C - 20°C - 22°C - 20°C
os que estão fora do produto, estaram assim :
35°C - 36°C - 36°C - 37°C - 36°C - 37°C - 38°C - 35°C
Demostra uma caracteristica, as temperaturas vão ficar en torno de um maximo e de um minimo....
O que eu fiz, armazeno a teperatura minima e a temperatura maxima....
e fiz um struct da seguinte forma :
struct{
maximo : 8;
minimo : 8;
amos_1 : 4;
amos_2 : 4;
......
......
amos_15 : 4;
amos_16 : 4;
} *amostrs;
leio os 16 sensores e armazeno as diferenças... mas da seguinte forma.
os dados nas variaveis de 4 bits ficariam assim :
1111 - somo 0 a menor temperatura para obter a temperatura do sensor.
1110 - somo 1 a menor temperatura para obter a temperatura do sensor.
1101 - somo 2 a menor temperatura para obter a temperatura do sensor.
......
......
1001 - somo 6 a menor temperatura para obter a temperatura do sensor.
1000 - somo 7 a menor temperatura para obter a temperatura do sensor.
0111 - subtraio 6 da maior temperatura para ob. a temp. do sensor.
0110 - subtraio 5 da maior temperatura para ob. a temp. do sensor.
......
......
0011 - subtraio 2 da maior temperatura para ob. a temp. do sensor.
0010 - subtraio 1 da maior temperatura para ob. a temp. do sensor.
0001 - subtraio 0 da maior temperatura para ob. a temp. do sensor.
0000 - sensor com defeito
Observem que deixei o maior RANGE de 0 a 7 para as temperaturas mais baixas que são os sensores que estão dentro do produto, e são as temperaturas que devo analizar... as outras não presisam ser exatamente certas são valores altos que estão fora do produto...
ai eu crio uma função pra codificar e outra pra decodificar que leve en consideração a temperatura maxima e minima...
Acabei usando dois consetos que os colegas que apresentaram ai, um que utiliza um struct do fabim se não me engano e outro do colega que sugeriu salvar apenas as diferenças.
Quando li a sugestão de salvar apenas as diferenças, pedi para clientes algums relatorios deles e analizei que considerando a minima e a maxima temperatura o resto dos sensores giram em torno dessas "referencias", variando muito pouco.
com isso para salvar 16 registrou ou temperaturas como preferirem, uso 10 bytes:
Quero salvar 100 mil :
10000 / 16 = 6250 cabos de 16 sensores
6250 * 10 (numeros de bytes utilizados para salvar cada cabo) = 62500 bytes
ainda sobra um espacinho pra salvar outras coisinhas
