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

 
 
 
Reply to this topicStart new topic
> создание переменной в EEPROM
TamTam
сообщение Jun 4 2006, 00:32
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Если я правильно понимаю то следующая запись
Код
eeprom char               fraza[5] = {0x0d,0x0a,0x0d,0x0a,0xFF};


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

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

В чем прикол ????
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 4 2006, 01:05
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

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

дык "прикол" в том, что
1. proteus - "фтопку";
2. созданный компилятором *.eep файл содержит данные инициализации eeprom и его надо зашивать в eeprom отдельно от основной прошивки.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jun 4 2006, 10:32
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



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


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
TamTam
сообщение Jun 4 2006, 16:47
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Цитата(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 байт
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jun 4 2006, 17:20
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



По идее так и будет - компилятор поместит массив не в обычные данные,
а в секцию EEPROM.
Вопрос в другом, правильно ли он их достанет, компилятор какой?


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 4 2006, 17:22
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(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"..
Go to the top of the page
 
+Quote Post
TamTam
сообщение Jun 4 2006, 17:56
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Цитата(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


как мне с этим быть ???
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 4 2006, 18:07
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

structure must be stored in the same memory class as defined


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

Ух может
static __eeprom TKey keys[3];
(сорри нет у меня CV чтобы проверить)
Go to the top of the page
 
+Quote Post
TamTam
сообщение Jun 4 2006, 18:44
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



Цитата(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 такого нет.

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

МК рулез.
Go to the top of the page
 
+Quote Post
Laksus
сообщение Jun 5 2006, 00:32
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Цитата
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
Go to the top of the page
 
+Quote Post
TamTam
сообщение Jun 5 2006, 01:27
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 293
Регистрация: 14-03-06
Пользователь №: 15 254



у меня вот так, и вроде все ок.

Код

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 или както так в хелпе покапался не нашол.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jun 5 2006, 04:12
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Цитата(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.А зачем неинициализированная-там-же мусор.Но в принципе можно в конфигурации пректа в опциях компилятора поставить галочку-использовать внешний старт-ап и наваять самому.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post

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

 


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


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