Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Расположение глобальных переменных по адресу
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
_Артём_
Не пойму как правильно объявить переменные в c- и h-файлах.

В c-файле пишу так:

#pragma location=0xC00
__no_init unsigned char Var1[256];

__no_init unsigned char Var2[256]@0xD00;

Как при этом эти переменные должны описываться в соотв. h-файле?

Пробовал так:

#pragma location=0xC00
extern __no_init unsigned char Var1[256];

extern __no_init unsigned char Var2[256]@0xD00;

Но тогда компилятор начал почти все переменные распологать по адресам больше 0xF00 и задействовал внешнюю память (которой нет).
Dog Pawlowa
Цитата(_Артём_ @ Apr 2 2007, 18:12) *
Не пойму как правильно объявить переменные в c- и h-файлах.

1) А зачем в h-файле указывать размещение? Другим модулям нужно знать только тип переменной. Хотя от компилятора зависит, наверное.
2) прагма действует до конца компилируемого файла (со всем включениями). Ее нужно отменить типа так
#pragma location default
_Артём_
Цитата(Dog Pawlowa @ Apr 2 2007, 18:18) *
1) А зачем в h-файле указывать размещение? Другим модулям нужно знать только тип переменной. Хотя от компилятора зависит, наверное.
#pragma location default


Хотелось бы знать для IAR-а...
И ещё: где правильнее располагать переменные, чтобы не помешать компилятору расположить стек и переменные (или IAR-у всё равно?).
IgorKossak
Цитата(_Артём_ @ Apr 2 2007, 18:39) *
Хотелось бы знать для IAR-а...
И ещё: где правильнее располагать переменные, чтобы не помешать компилятору расположить стек и переменные (или IAR-у всё равно?).

Стеки, как правило, размещаются с прижатием к верху.
Если какие-нибудь сегменты данных или Ваши принудительно размещаемые переменные налезут на стеки (или другие сегменты), линкер выдаст ошибку.
_Артём_
Цитата(IgorKossak @ Apr 3 2007, 09:04) *
Стеки, как правило, размещаются с прижатием к верху.
Если какие-нибудь сегменты данных или Ваши принудительно размещаемые переменные налезут на стеки (или другие сегменты), линкер выдаст ошибку.


Понятно...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.