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

 
 
> размещение данных в EEprom не работает, пробовал варианты что нашел
bugor
сообщение Feb 26 2009, 19:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 26-02-09
Пользователь №: 45 408



Что надо:
1. желательно, чтобы после компиляции был один файл HEX (но можно и два)
2. сформировать в EEPROM данные, желательно с определенного адреса, строку символов, чтобы потом, обратившись из программы вывести ее на дисплей, чтобы при инициализации они не менялись. То есть надо просто массив данных из строк и констант (можно отдельно и переменных), которые будут при программировани записаны, а на этапе компиляции никак не меняются.
3.правил сfg1soim.xcl чтобы получить единый файл, но там даже нулей в eeprom не получилось

в общем засада - как мне это сделать - надоело отдельно формировать ручками данные для eeprom!

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

typedef struct {
__eeprom unsigned char var1;
__eeprom unsigned char zast1[3];
} struct1;

Error[Pa004]: illegal declaration

вот так:

__no_init __eeprom unsigned char zast[4];

при этом формирую два файла - для кода и eeprom - ПРОКАТЫВАЕТ но при загрузке файла eeprom
там нули - что логично. При попытке инициализировать

вот так:

__no_init __eeprom unsigned char zast[4] = {23,34,56,78};

Error[e133]: The output format intel-extended cannot handle multiple address spaces. Use format variants (-y -O) to specify which address space is

а с #pragma _locate чтото не получилось разобраться - как выставить адрес, с которого начать размещение и при этом указать, что все это дело в EEPROM?

Сообщение отредактировал bugor - Feb 26 2009, 19:43
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Mar 2 2009, 15:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Выссказывания IgorKossak относились к автору.

Автор не указывал, что у него нет обращения к переменной. То есть при объявлении типа:

__eeprom unsigned char zast[4] = {23,34,56,78};

и обращении типа

i=zast[j];

компилятор всё разместит как надо и сформирует оба файла. У меня, кпримеру, всё прекрасно формируется. Можно также явно указать адресс размещения этого массива. Либо посредством прямого указания (через @) либо адресуя сегмент соответствующий.
Всё это чётко описано в документации. Последовательность размещения переменных в EEPROM будет соответствовать последовательности объявления соответствующих переменных. Можно размещать и структуру в EEPROM. Для этого ключевое слово __eeprom должно быть вынесено за поле объявления. Не допускается только растусовка полей (одно в EEPROM, другое в ОЗУ), что совершенно очевидно и так. Хотя чётко описано в документации.

Цитата
STRUCTURES AND MEMORY TYPES
For structures, the entire object is placed in the same memory type. It is not possible to
place individual structure members in different memory types.
In the example below, the variable gamma is a structure placed in eeprom memory.
struct MyStruct
{
int alpha;
int __flash * beta; /* Pointer to variables in flash memory */
};
__eeprom struct MyStruct gamma;
The following declaration is incorrect:
struct MySecondStruct
{
int blue;
__eeprom int green; /* Error! */
};
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:08
Рейтинг@Mail.ru


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