[an error occurred while processing this directive]
|
В файле Variable.h описываю все глобальные переменные. Это файл включаю в main.c #include "Variable.h". В конкретном случае у меня описанны переменные так:
----------------------------------------------------------
typedef struct
{
uint8_t ShareSecond; // ячейка с подсчетом долей секунды между
прерываниями
uint16_t AdcAdd; // слово с прибавляемыми значениями результатов
замеров ADC
uint16_t AdcResult; // значение последнего измерения АЦП
uint16_t AdcVolageAverage; // среднеарифметическое значение
измереного напряжения
uint16_t AdcCurrentAverage; // среднеарифметическое значение
измереного тока
uint16_t AdcVolageNew; // новое измереное значение напряжения
uint16_t AdcCurrentNew; // новое измереное значение тока
uint8_t WaitFull; // задержка перед включением на 24в.
union
{
uint8_t Byte;
struct
{
uint8_t ValveInStatus:1; // вход включения клапана
uint8_t ValveIn:1; // флаг состояния входа включения клапана
uint8_t ValveInTime:1; // временное сохранение состояния входа
включения клапана
uint8_t ReadyAdc:1; // флаг окончания цикла 64х измерений ADC
uint8_t ValveFull:1; // флаг включения клапана 1 - клапан включен
на 220в 0 - на 24в.
uint8_t ValveOn:1; // клапан включен
uint8_t AdcVoltage:1; // флаг определения источника измерения
1-напряжение, 0-ток
uint8_t Change:1; // флаг изменения состояния кнопки
};
}SystemFlags;
}Var;
Var global;
Var *Adr=&global;
--------------------------------------------------------
Далее в программе к переменным я обращаюсь как к полям структуры: Adr->Variable. Т.е. видимой причины перезагружать индексный регистр нет, но gcc это почему-то делает.
В целом я ожидал от gcc большего, в полученном коде еще несколько темных мест, пока не разбирался, но некоторые вещи с первого взгляда делаются коряво. Хотя вполне возможно мой исходник на С сам коряв.
E-mail: info@telesys.ru