Перейти к содержанию
    

Вопрос к IARу

пишу следующее:

__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

можно гараздо проще не меняя формата

 

__eeprom __no_init volatile unsigned char CPU_status;

 

если так обьявиш не будет ни каких вопросов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно гараздо проще не меняя формата

 

__eeprom __no_init volatile unsigned char  CPU_status;

 

если так обьявиш не будет ни каких вопросов.

В Error[e133] говорится, что пересекаются адресные пространства EEPROM и FLASH, а формат intel-standard не может упаковать различные виды памяти в один выходной файл. По этому __no_init здесь не поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А ты попробуй. Ведь если не использовать __eeprom не возникает e133. При __no_init в сегмент XDATA тоже ничего не попадает и ошибки не будет.

 

Единственное, это будет работать, если вы не шьете программатором начальные значение EEPROM. Я, например, всегда в код программы включаю проверку содержимого EEPROM и его инициализацию в случае первого старта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость MALLOY2

если не указать __no_init программа при старте запишет туда 0, тоесть твоя переменная попадает в сегмент для данных он NEAR_Z (для еепром не помню), но суть в следующем если указать тип переменной __no_init в сегменте NEAR_N который не входит в *.hex, и не будет ошибки. Но ты в программе должен придусмотреть то что при первом запуске у тебя в переменной будет "мусор".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость MALLOY2

У меня так работает, и будет работать даже если внешним программатором прошьеш EEPROM, точнее им и надо прошивать, я так делал. Эта команда заставляет компилятор разместить в сегменте который не инициализируется при загрузке следовательно и не попадает в Hex и не вызывает ошибок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...