Страница 1 из 1
IAR проблема с глобальными переменными
Добавлено: Сб май 30, 2009 01:01:17
YWAS
Добрый всем денек !!
после долгих мучений и непоняток, я все таки нашел причину, почему не хочет работать так как написано, программа много модульная, и есть глобальные переменные, уж незнаю правильно я понял или нет но они получили префикс extern типа внешние
extern unsigned char _RxBuf;
и т.д.
как бы все прекрасно во всех модулях видятся и т.п. компилятор не ругается, НО
как оказалось видятся они то видятся но значение их отличается в одном модуле и другом, и от этого бардак и безобразие программа вытворяет
Кто сталкивался с такой проблемой - как её правильно решить ?
Re: IAR проблема с глобальными переменными
Добавлено: Сб май 30, 2009 07:51:40
asteroid7
YWAS писал(а):...как оказалось видятся они то видятся но значение их отличается в одном модуле и другом...
Это как? Чем смотрели?
extern используется для резервирования переменной, которая будет объявлена позднее по ходу компиляции.
Для уверенного хранения глобальной переменной в ОЗУ используйте volatile.
Добавлено: Сб май 30, 2009 09:44:18
YWAS
как видятся по разному?
ну в одном модуле допустим переменная а=5;
в другом эта же а=86;
смотрю как обычно - вывожу через ЮАРТ значение переменных на ПК, переменные не локальные т.е. не объявлены в процедурах
Re: IAR проблема с глобальными переменными
Добавлено: Сб май 30, 2009 10:48:09
mackerel
YWAS писал(а):
extern unsigned char _RxBuf;
и т.д.
Не совсем понятно, они что, всюду так объявлены? Что, нигде нет их объявления без extern?
Добавлено: Сб май 30, 2009 10:55:30
YWAS
в хидере
extern unsigned char _RxBuf;
в модуле
unsigned char _RxBuf=0;
Добавлено: Сб май 30, 2009 12:14:21
mackerel
Наверное, я небольшой спец по "Ц". У меня в проектах ВСЕ переменные объявляется в неком одном главном модуле, а в остальных модулях все они заданы как внешние, extern.
Если задавать их в заголовочном файле, то, я думаю, его не нужно подключать к тому модулю, где, собственно и объявляются переменные (не extern).
Добавлено: Сб май 30, 2009 13:35:20
asteroid7
YWAS писал(а):...смотрю как обычно - вывожу через ЮАРТ...
Посмотрите в дебагере иара с какого адреса загружается эта переменная из разных мест. Адрес должен быть один.
Добавлено: Сб май 30, 2009 23:47:24
YWAS
Ребята СПАСИБО вы меня спасли
воспользовался советом mackerel, перенес нужные переменнные в главный модуль, в остальных прописал extern где неободимо
Песня....
все заработало
СПАСИБО ОГРОМНОЕ
нет предела моей радости
