IAR проблема с глобальными переменными

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 13
Зарегистрирован: Сб май 30, 2009 00:49:39

Сообщение YWAS »

Добрый всем денек !!
после долгих мучений и непоняток, я все таки нашел причину, почему не хочет работать так как написано, программа много модульная, и есть глобальные переменные, уж незнаю правильно я понял или нет но они получили префикс extern типа внешние

extern unsigned char _RxBuf;
и т.д.

как бы все прекрасно во всех модулях видятся и т.п. компилятор не ругается, НО
как оказалось видятся они то видятся но значение их отличается в одном модуле и другом, и от этого бардак и безобразие программа вытворяет

Кто сталкивался с такой проблемой - как её правильно решить ?
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

YWAS писал(а):...как оказалось видятся они то видятся но значение их отличается в одном модуле и другом...
Это как? Чем смотрели?

extern используется для резервирования переменной, которая будет объявлена позднее по ходу компиляции.
Для уверенного хранения глобальной переменной в ОЗУ используйте volatile.
Реклама
Родился
Сообщения: 13
Зарегистрирован: Сб май 30, 2009 00:49:39

Сообщение YWAS »

как видятся по разному?
ну в одном модуле допустим переменная а=5;
в другом эта же а=86;
смотрю как обычно - вывожу через ЮАРТ значение переменных на ПК, переменные не локальные т.е. не объявлены в процедурах
Контактная информация:
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

YWAS писал(а): extern unsigned char _RxBuf;
и т.д.
Не совсем понятно, они что, всюду так объявлены? Что, нигде нет их объявления без extern?
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 13
Зарегистрирован: Сб май 30, 2009 00:49:39

Сообщение YWAS »

в хидере

extern unsigned char _RxBuf;

в модуле
unsigned char _RxBuf=0;
Контактная информация:
Реклама
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

Наверное, я небольшой спец по "Ц". У меня в проектах ВСЕ переменные объявляется в неком одном главном модуле, а в остальных модулях все они заданы как внешние, extern.
Если задавать их в заголовочном файле, то, я думаю, его не нужно подключать к тому модулю, где, собственно и объявляются переменные (не extern).
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

YWAS писал(а):...смотрю как обычно - вывожу через ЮАРТ...
Посмотрите в дебагере иара с какого адреса загружается эта переменная из разных мест. Адрес должен быть один.
Родился
Сообщения: 13
Зарегистрирован: Сб май 30, 2009 00:49:39

Сообщение YWAS »

Ребята СПАСИБО вы меня спасли

воспользовался советом mackerel, перенес нужные переменнные в главный модуль, в остальных прописал extern где неободимо
Песня....
все заработало
СПАСИБО ОГРОМНОЕ
нет предела моей радости :))
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»