История изменений
Исправление tailgunner, (текущая версия) :
Какой ужас. Си++, итераторы, классы, Q_BYTE_ORDER (!!!11), и поверх всего - не-слово Reading.
#include <stdint.h>
#define ALEN(a) (sizeof(a)/sizeof((a)[0]))
const double delta = 1.25/0xffffff;
const double Vcm = 1.25;
struct adc_sample { uint8_t parts[3]; };
struct adc_packet {
uint8_t pad1[8];
struct adc_sample samples[150];
};
static unsigned cvt1(struct adc_sample *n)
{
/* никаких проверок Q_BYTE_ORDER, блеать */
return (n->parts[0] << 16) | (n->parts[1] << 8) | n-> parts[2];
}
void convert_adc_packet(const struct adc_packet *pkt, double *numbers)
{
int i;
for (i = 0; i < ALEN(pkt->samples); i++)
numbers[i] = cvt1(&pkt->samples[i])*delta - Vcm;
}
P.S. не пользуйся битовыми полями.
P.P.S. к перемежающейся проблеме код преобразования наверняка не имеет никакого отношения.
Исходная версия tailgunner, :
Какой ужас. Си++, итераторы, классы, Q_BYTE_ORDER (!!!11), и поверх всего - не-слово Reading.
#include <stdint.h>
#define ALEN(a) (sizeof(a)/sizeof((a)[0]))
const double delta = 1.25/0xffffff;
const double Vcm = 1.25;
struct adc_sample { uint8_t parts[3]; };
struct adc_packet {
uint8_t pad1[8];
struct adc_sample samples[150];
};
static unsigned cvt1(struct adc_sample *n)
{
/* никаких проверок Q_BYTE_ORDER, блеать */
return (n->parts[0] << 16) | (n->parts[1] << 8) | n-> parts[2];
}
void convert_adc_packet(const struct adc_packet *pkt, double *numbers)
{
int i;
for (i = 0; i < ALEN(pkt->samples); i++)
numbers[i] = cvt1(&pkt->samples[i])*delta - Vcm;
}
P.S. не пользуйся битовыми полями.