[an error occurred while processing this directive]
Опции volatile не выставлены. С автоматическим объявлением не совсем понял. Я делаю следующим образом:...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Igor 16 августа 2005 г. 16:10
В ответ на: Ответ: не стоит под GCC злоупотреблять автоматическим объявлением переменных - опиши ее до блока, проверь, не выставлена случайно опция ''-fvolatile'' или ''-fvolatile-global'' в makefile отправлено Mim 16 августа 2005 г. 15:48

В файле 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: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru