Полная версия этой страницы:
Вопрос к IARу
LeoLabs
Jul 12 2005, 06:28
пишу следующее:
Код
__eeprom volatile unsigned char CPU_status;
__C_task void main (void)
{
CPU_status = 1;
....
компилятор ругается:
Цитата
Error[e133]: The output format intel-standard cannot handle multiple address spaces. Use format variants (-y -O) to specify which address space is wanted
может чего не так делаю?
Все делаешь так. Просто надо настроить выходной формат линкера. Например поставь Debug, а остальное почитай
в этом топике
MALLOY2
Jul 15 2005, 12:03
можно гараздо проще не меняя формата
__eeprom __no_init volatile unsigned char CPU_status;
если так обьявиш не будет ни каких вопросов.
Цитата(MALLOY2 @ Jul 15 2005, 15:03)
можно гараздо проще не меняя формата
__eeprom __no_init volatile unsigned char CPU_status;
если так обьявиш не будет ни каких вопросов.
В Error[e133] говорится, что пересекаются адресные пространства EEPROM и FLASH, а формат intel-standard не может упаковать различные виды памяти в один выходной файл. По этому __no_init здесь не поможет.
VladislavS
Jul 15 2005, 12:52
А ты попробуй. Ведь если не использовать __eeprom не возникает e133. При __no_init в сегмент XDATA тоже ничего не попадает и ошибки не будет.
Единственное, это будет работать, если вы не шьете программатором начальные значение EEPROM. Я, например, всегда в код программы включаю проверку содержимого EEPROM и его инициализацию в случае первого старта.
MALLOY2
Jul 15 2005, 13:06
если не указать __no_init программа при старте запишет туда 0, тоесть твоя переменная попадает в сегмент для данных он NEAR_Z (для еепром не помню), но суть в следующем если указать тип переменной __no_init в сегменте NEAR_N который не входит в *.hex, и не будет ошибки. Но ты в программе должен придусмотреть то что при первом запуске у тебя в переменной будет "мусор".
MALLOY2
Jul 15 2005, 13:14
У меня так работает, и будет работать даже если внешним программатором прошьеш EEPROM, точнее им и надо прошивать, я так делал. Эта команда заставляет компилятор разместить в сегменте который не инициализируется при загрузке следовательно и не попадает в Hex и не вызывает ошибок
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.