Dany (11.11.2010 09:38, просмотров: 3768)
C30 упаковка структуры. После упаковки структуры некорректное обращение к полю массив по индексу. Размер структуры до и после упаковки 22 байта. В данном случае проблема решится отказом от упаковки, но хочется выяснить причину.
typedef union // Тип состояние АКБ
{
struct __attribute__ ((packed))
{
unsigned Low :1; // Низкий заряд
unsigned Discharge :1; // Разряжен
unsigned ChargeProcess:1; // Заряжается
unsigned Bad :1; // Неисправен
unsigned :4;
};
BYTE Val;
} tACC_STATUS;
typedef struct /*__attribute__ ((packed))*/ // Структура параметров АКБ
{
BYTE NumSeg; // Кол-во сегментов для графического представления заряда
tACC_STATUS Status; // Состояние АКБ
float U; // Напряжение АКБ
float t[ACC_NUM_BANK]; // Температура каждой банки АКБ
} tACCUM_PARAM;
Проблемный код:
accCompare.U = acc.U = 5.;
for(cntAcc = 0; cntAcc < ACC_NUM_BANK; cntAcc++)
{
acc.t[cntAcc] = cntAcc + 1;
accCompare.t[cntAcc] = acc.t[cntAcc] + 1;
}