реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вопрос к IARу, работа с eeprom
LeoLabs
сообщение Jul 12 2005, 06:28
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 5-03-05
Пользователь №: 3 082



пишу следующее:
Код
__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

может чего не так делаю?
Go to the top of the page
 
+Quote Post
Maxim
сообщение Jul 12 2005, 06:39
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 24-06-04
Пользователь №: 165



Все делаешь так. Просто надо настроить выходной формат линкера. Например поставь Debug, а остальное почитай в этом топике
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jul 15 2005, 12:03
Сообщение #3


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



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

__eeprom __no_init volatile unsigned char CPU_status;

если так обьявиш не будет ни каких вопросов.
Go to the top of the page
 
+Quote Post
Maxim
сообщение Jul 15 2005, 12:28
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 36
Регистрация: 24-06-04
Пользователь №: 165



Цитата(MALLOY2 @ Jul 15 2005, 15:03)
можно гараздо проще не меняя формата

__eeprom __no_init volatile unsigned char  CPU_status;

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

В Error[e133] говорится, что пересекаются адресные пространства EEPROM и FLASH, а формат intel-standard не может упаковать различные виды памяти в один выходной файл. По этому __no_init здесь не поможет.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jul 15 2005, 12:52
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



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

Единственное, это будет работать, если вы не шьете программатором начальные значение EEPROM. Я, например, всегда в код программы включаю проверку содержимого EEPROM и его инициализацию в случае первого старта.
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jul 15 2005, 13:06
Сообщение #6


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



если не указать __no_init программа при старте запишет туда 0, тоесть твоя переменная попадает в сегмент для данных он NEAR_Z (для еепром не помню), но суть в следующем если указать тип переменной __no_init в сегменте NEAR_N который не входит в *.hex, и не будет ошибки. Но ты в программе должен придусмотреть то что при первом запуске у тебя в переменной будет "мусор".
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Jul 15 2005, 13:14
Сообщение #7


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



У меня так работает, и будет работать даже если внешним программатором прошьеш EEPROM, точнее им и надо прошивать, я так делал. Эта команда заставляет компилятор разместить в сегменте который не инициализируется при загрузке следовательно и не попадает в Hex и не вызывает ошибок
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 02:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016