Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: создание переменной в EEPROM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
TamTam
Если я правильно понимаю то следующая запись
Код
eeprom char               fraza[5] = {0x0d,0x0a,0x0d,0x0a,0xFF};


должна создать переменную в eeprom, типа char c именем fraza и длинной 5 символов

но запуская хекс файл в протеусе, нечяего похожего в еепром я не вижу и даже кода записываю туда другие данные.

В чем прикол ????
defunct
Цитата(TamTam @ Jun 4 2006, 03:32) *
должна создать переменную в eeprom, типа char c именем fraza и длинной 5 символов

так она и создается с указанными именем и длиной.
А вы что ждете?
Чтобы она еще была проинициализирована вашими данными?

дык "прикол" в том, что
1. proteus - "фтопку";
2. созданный компилятором *.eep файл содержит данные инициализации eeprom и его надо зашивать в eeprom отдельно от основной прошивки.
WHALE
proteus ,может и "фтопку",а VMLAB инициализирует EEPROM в соответствии с eep файлом.
TamTam
Цитата(defunct @ Jun 4 2006, 05:05) *
Цитата(TamTam @ Jun 4 2006, 03:32) *

должна создать переменную в eeprom, типа char c именем fraza и длинной 5 символов

так она и создается с указанными именем и длиной.
А вы что ждете?
Чтобы она еще была проинициализирована вашими данными?

дык "прикол" в том, что
1. proteus - "фтопку";
2. созданный компилятором *.eep файл содержит данные инициализации eeprom и его надо зашивать в eeprom отдельно от основной прошивки.


Огромное спавсибо за ответ. а то я уж начал думать что тут что то не так.

и еще один вопрос,

Подскажите а как создать в eeprom переменную

которая хранилабы записи о ключах,

тоесть как массив со влажением

к примеру мне нужно записать 3 ключа у которых длинна 4 байта

чтобы получило примерно так key[1][3]

первый ключь 3 байт
beer_warrior
По идее так и будет - компилятор поместит массив не в обычные данные,
а в секцию EEPROM.
Вопрос в другом, правильно ли он их достанет, компилятор какой?
defunct
Цитата(TamTam @ Jun 4 2006, 19:47) *
Подскажите а как создать в eeprom переменную
которая хранилабы записи о ключах,
...
к примеру мне нужно записать 3 ключа у которых длинна 4 байта
чтобы получило примерно так key[1][3]


можно объявить тип "ключ" как массив из 4 символов, и объявить переменную "массив ключей" из трех элементов:

Код
typedef __eeprom char TKey[4];
static TKey keys[3];


можно по другому.. Например объявить тип структуру "ключ" и переменную массив - ключей:

Код
typedef __eeprom struct {
   // поля структуры
   char str[4];
} TKey;
static TKey keys[3];


Второй путь мне нравится больше.. т.к. доступ будет более наглядный:
keys[0].str = "xxx"..
TamTam
Цитата(defunct @ Jun 4 2006, 21:22) *
можно по другому.. Например объявить тип структуру "ключ" и переменную массив - ключей:

Код
typedef __eeprom struct {
   // поля структуры
   char str[4];
} TKey;
static TKey keys[3];


Второй путь мне нравится больше.. т.к. доступ будет более наглядный:
keys[0].str = "xxx"..

да я с вами обсолютно согласен второй способ удобнее, но вот незадача,
я юзаю CVAVR и он мне написал
Цитата
structure mast de stored in the same memory class as defined


как мне с этим быть ???
defunct
Цитата(TamTam @ Jun 4 2006, 20:56) *
Цитата

structure must be stored in the same memory class as defined


как мне с этим быть ???

Ух может
static __eeprom TKey keys[3];
(сорри нет у меня CV чтобы проверить)
TamTam
Цитата(kertis @ Jun 4 2006, 22:26) *
Цитата(WHALE @ Jun 4 2006, 14:32) *

proteus ,может и "фтопку",а VMLAB инициализирует EEPROM в соответствии с eep файлом.


песенка ... и протеус тоже ...

как я рекомендую в заперщенном курсе, изучение прграмы начинайте с изучения примеров к ней - к протеусу их около 70 !

Есть там пример и с еепром. откройте его и посмотрите как и что надо делать.


Читаю ваш курс, но вот последняя статья разочеровала (та что про USART) хотелось бы видеть там
Какой нибудъ пример обмена данными с компьютером. Ну к примеру получил МК данные и запихнул их в несколько переменных а потом по запросу вернул 1 из этих переменных, а то както слишком уж поверхностно получилось. Спасибо Вам за то что вы у нас есть (новичков). с нетерпением жду продолжения.

Цитата(defunct @ Jun 4 2006, 22:07) *
Цитата(TamTam @ Jun 4 2006, 20:56) *

Цитата

structure must be stored in the same memory class as defined


как мне с этим быть ???

Ух может
static __eeprom TKey keys[3];
(сорри нет у меня CV чтобы проверить)


Да именно так только это ( __ ) ЯРОВСАКЯ ШТУЧКА В CVAVR такого нет.

Огромное всем спасибо.

МК рулез.
Laksus
Цитата
TamTam
Да именно так только это ( __ ) ЯРОВСАКЯ ШТУЧКА В CVAVR такого нет.

__________
Действительно в CodeVisionAVR двойной подчерк ненужен возле eeprom,
но работает и с ним. А мешает static.
__________
Вот так будет компилироваться:
Код
//это будет в еепром
typedef eeprom struct {
  char eestr[4];
}   eeTKey;
eeprom eeTKey eekeys[3] = {{0x11,0x12,0x13,0x14},{0x21,0x22,0x23,0x24},{0x31,0x32,0x33,0x34}};
//инициализация необязательна, но без нее будут нули
//буквы ee (eestr, eeTKey и тд) необязательны
//просто так сразу видно что эта переменная в еепром

_______________
_______________
Цитата
defunct
...
Второй путь мне нравится больше.. т.к. доступ будет более наглядный:
keys[0].str = "xxx"..

_________
Ну, не знаю, как так просто присвоить в CodeVisionAVR.
По моему только по байту:
Код
//эти переменные будут в RAM
typedef struct{
  char str[4];
}   TKey;
TKey keys[3];

//....

void main(void)
{            
//...

//допустим надо передать например группу 1 из еепром в рам
    unsigned char c1;
    for(c1=0; c1<4; c1++){
       keys[1].str[c1] = eekeys[1].eestr[c1];
   }


//...

в AVR Studio все выглядит вроде нормально.
__________
Александр
2006 06 05
TamTam
у меня вот так, и вроде все ок.

Код

typedef eeprom struct {
  char key_value[4];
}   TKey;
static eeprom TKey Keys[3] = {{0x11,0x12,0x13,0x14},{0x21,0x22,0x23,0x24},{0x31,0x32,0x33,0x34}};



И кстати может кто знает как в CVAVR объявить неинециализированную переменную вроде в яре есть

no__init или както так в хелпе покапался не нашол.
WHALE
Цитата(TamTam @ Jun 5 2006, 05:27) *
у меня вот так, и вроде все ок.

Код

typedef eeprom struct {
  char key_value[4];
}   TKey;
static eeprom TKey Keys[3] = {{0x11,0x12,0x13,0x14},{0x21,0x22,0x23,0x24},{0x31,0x32,0x33,0x34}};



И кстати может кто знает как в CVAVR объявить неинециализированную переменную вроде в яре есть

no__init или както так в хелпе покапался не нашол.

Епром зачем статическим обзывать?
CV в старт-апе по дефолту всем неинициализированным переменным присваивает 0.А зачем неинициализированная-там-же мусор.Но в принципе можно в конфигурации пректа в опциях компилятора поставить галочку-использовать внешний старт-ап и наваять самому.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.