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

 
 
> IAR AVR 4.10A, как обеспечить доступ к EEPROM
Sergio66
сообщение Mar 17 2005, 15:52
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Еще один вопрос - никак не могу найти ни одной библиотечной функции для доступа к EEPROM. Компилятор Embedded C++, библиотека DLIB. Подскажите, плз.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alex_St
сообщение Mar 23 2005, 12:23
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 32
Регистрация: 26-11-04
Из: Одесса, Украина
Пользователь №: 1 240



2 Тумблер:

А что в таком случае мешает использовать CRC или прочие алгоритмы контроля целостности данных? И для особо важных данных писать резервные копии?

А то, что Вы привели, относится к любым типам памяти, будь то RAM, eeprom или HDD. А не к способу их описания.
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Mar 24 2005, 11:34
Сообщение #3


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

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



Цитата(Alex_St @ Mar 23 2005, 15:23)
А что в таком случае мешает использовать CRC или прочие алгоритмы контроля целостности данных? И для особо важных данных писать резервные копии?



Совершенно верно. Так делаю я - также как и Билли Гейтс.
Делаем резервные копии в количестве N штук. Снабжаем
каждую CRC16. Хочется CRC32, но для avr это все таки затруднительно.

Фактически, алгоритм такой же (или очень похожий) как у FAT.
А теперь попробуйте описать это переменной вида:
int my_var;
Конечно, можно попытаться.
Но это черезвычайно не удобно. Эта переменная должна быть удвоена,
утроена и.т.п. Как обратится к ее конкретному образу? huh.gif
Или придется описывать класс MY_INT_VAR и перегружать все операции.
Или что-то вроде:
int my_var_1;
int my_var_2; /* где то далеко от _1 - но ГДЕ ? */
...
А потом массив указателей. Что-то это все не красиво.

Гораздо легче и понятней:
#define ADDR_MY_VAR 0x.....

#define OFFSET1 0x...
#define OFFSET2 0x...
а потом write_eerpom (word addr, byte dat, word offset);

byte read_eerpom (word addr, word offset);

Все просто, понятно и точно известно - где каждая переменная и
где каждая из таблиц данных (я решил сохранить это определение,
поскольку воспользовался алгоритмом как у FAT)

Цитата(Alex_St @ Mar 23 2005, 15:23)
А то, что Вы привели, относится к любым типам памяти, будь то RAM, eeprom или HDD. А не к способу их описания.


Мне кажется, вы сами себе противоречите. smile.gif
Уж конечно, описание переменной в RAM сильно отличается от того,
что на HD. То, что на HD вообще как бы и не описывается - туда
доступ "описанием" нельзя обеспечить. К HD можно обратиться, как
к внешнему устройству. И к eeprom я предлагаю обращаться также.

Кроме того, RAM с одной стороны и HD, eeprom с другой - существенно
разные памяти по степени "опастности".
Дело в том, что в случае сбоя и после перезапуска RAM обновляется и
все OK. А HD и eeprom запоминают неверный результат и в этом все дело.
Вот и получается, что для работы с ними я выбрал сходные алгоритмы.
По моему, это естественно. На мой взгляд, странно предложить другое.
smile.gif
Применив "FAT-алгоритм" мы вдруг с удивлением обнаружим что:
1. мы можем работать с частично разрушенным физически (навсегда) eeprom
2. мы можем восстанавливать разрушенные (по любым причинам)участки eeprom
3. мы можем не ставить больше системный монитор (экономия $0.5/шт)
4. мы не нуждаемся в средствах бесперебойного питания
5. мы можем наслаждаться красивым алгоритмом который изобрели сами
(увы - мы были не первые, но все-таки)

Кстати - "FAT-алгоритм" работает в IBM-PC, да еще как!!!!!
Просто мы не знаем об этом.
Но однажды, когда посыпался мой Fujitsu - 20гб, я вдруг получил
сообщение:
что то вроде: "Обе фат коррупт, не могу починить..."
После этого диск я сдал назад в Техмаркет, а сам стал делать
от 3 до 6 дублей в eeprom
<_<


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
dxp
сообщение Mar 24 2005, 13:57
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(-Tумблер- @ Mar 24 2005, 17:34)
Совершенно верно. Так делаю я - также как и Билли Гейтс.
Делаем резервные копии в количестве N штук. Снабжаем
каждую CRC16. Хочется CRC32, но для avr это все таки затруднительно.

[...]

Или придется описывать класс MY_INT_VAR и перегружать все операции.

А чем не нравится класс?

Цитата(-Tумблер- @ Mar 24 2005, 17:34)
Гораздо легче и понятней:
#define ADDR_MY_VAR 0x.....

#define OFFSET1 0x...
#define OFFSET2 0x...
а потом write_eerpom (word addr, byte dat, word offset);

byte read_eerpom (word addr,  word offset);

Все просто, понятно и точно известно - где каждая переменная и
где каждая из таблиц данных (я решил сохранить это определение,
поскольку воспользовался алгоритмом как у FAT)


И чем это лучше? Неслабое нагромождение кода в глобаном scope. В то время как, написав класс, где для вашей переменной объявить массив копий в EEPROM, который и обслуживать:

Код
class TMyEEPROM_Var
{
public:
    TMyEEPROM_Var();
    TMyEEPROM_Var(typename x);
    ... // остальной интерфейс

private:
   __eeprom typename CopyArray[N];
};



Тут уж и проверки сделать при обращениях, и журналирование, и все необходимые операции определить. Т.ч. снаружи это будет просто как обычная переменная. А если уж хочется и отдельные копии смотреть, то и для них функцию определить - типа:

Код
typename TMyEEPROM_Var::get_copy(byte intex)
{
    return CopyArray[intex];
}


Но обращаться именно в EEPROM посредством __eeprom. Только это будет тоже скрыто внутри класса. А функции явные ee_read, ee_write - это явно излишне. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Mar 25 2005, 12:14
Сообщение #5


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

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



Цитата(dxp @ Mar 24 2005, 16:57)
А чем не нравится класс?


Обьясню - чем не нравится класс.
1 Как быть с внешними eeprom-ами ? Концепцию менять каждый раз ?
Вдобавок, в некоторых проектах использовались оба типа.
huh.gif

2. Использую то я C. Так вышло, мне часто приходится
переходить с процессора на процессор. С с++ бывают
проблемы - например для Fujitsu просто нет.
С переносимостью программ на С проблем (у меня) не было до сих пор.
С пол-оборота всегда и везде все работает.


А вот теперь серьезно:
3. Если мы озабочены сохранностью данных eeprom,
то делать приходится вот что:
разные таблицы-копии располагаются на разном смещении,
обязательно с "проплешинами" между собой. Чтобы не портились сразу
две таблицы.
Дело в том, что "исследования" показали - когда данные портятся,
то они и расположены рядом. Т.е. портятся смежные байты.
Поэтому совет расположить подряд N копий не кажется мне удачным.
Кроме того, возникнут большие затруднения написания подсчета CRC
в такой концепции.
В предложенном мной варианте известен начальный адрес таблицы
и ее размер. А это значит удобно обратиться к такой таблице как к массиву.
Причем, к любому. Хотите - к байтовому, хотите - к вордовому.
Подсчет CRC дело циклическое и "длительное". Удобство
доступа всерьез повлияет на скорость процедуры.

Любое прямое описание переменной в С приводит к ее автоматическому
размещению компилятором. Собственно, это одно из больших достоинств
этого языка. Как раз это, на мой взгляд, и мешает при работе с eeprom.
В этом случае удобно распределить память самому. Это не сложно, поскольку
таких данных сравнительно немного. И это приведет скорей к более компактной
программе - это же к ассемблеру ближе, чем к c++

Цитата(dxp @ Mar 24 2005, 16:57)
... Неслабое нагромождение кода в глобаном scope. 


Извините - я этот вопрос просто не понял . huh.gif
Понятно, что я описал идею, а не приводил в конференции
исходных текстов коммерческих программ.
"..Идею дал? - Наморщи ум..".
Я так понял - мы оба согласились сделать "ЭТО", но с разным описанием
переменных. Но это значит, размеры исполнимых кодов у нас
не сильно отличаются. Причем точно известно - дополнительная "оплата"
размером за ооп обязательно будет. Полагаю от 5% - 10 %.
Так что кодов больше будет
у Вас.
Вот исходных текстов может быть больше у меня. Но это мне не тяжко.
Написал отдельный модуль один раз + .def файл макроопределений.
Этот модуль кочует из проекта в проект. Как впрочем и многие другие.
glare.gif
Удачи !
smile.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Sergio66   IAR AVR 4.10A   Mar 17 2005, 15:52
- - IgorKossak   Не нужно никакой функции. Просто обьявите переменн...   Mar 17 2005, 16:53
- - Sergio66   Цитата(Sergio66 @ Mar 17 2005, 18:52)Еще один...   Mar 17 2005, 16:59
|- - KRS   Цитата(Sergio66 @ Mar 17 2005, 19:59)Цитата(S...   Mar 17 2005, 17:01
- - IgorKossak   !!! Не следует также забывать, что кол...   Mar 18 2005, 09:22
- - -Tумблер-   Цитата(Sergio66 @ Mar 17 2005, 18:52)Еще один...   Mar 18 2005, 12:20
|- - IgorKossak   Цитата(-Tумблер- @ Mar 18 2005, 15:...   Mar 18 2005, 15:30
|- - KRS   Цитата(IgorKossak @ Mar 18 2005, 18:30)Цитата...   Mar 18 2005, 15:38
|- - IgorKossak   Цитата(KRS @ Mar 18 2005, 18:38)Это не поможе...   Mar 18 2005, 15:59
|- - KRS   Цитата(IgorKossak @ Mar 18 2005, 18:59)Цитата...   Mar 18 2005, 16:16
|- - vet   Цитата(KRS @ Mar 18 2005, 19:16)Откуда взялис...   Mar 18 2005, 20:03
|- - IgorKossak   Цитата(KRS @ Mar 18 2005, 19:16)...Откуда взя...   Mar 21 2005, 07:25
- - IgorKossak   Существует бесконечно малое количество причин в пр...   Mar 21 2005, 08:08
|- - -Tумблер-   Цитата(IgorKossak @ Mar 21 2005, 11:08)Сущест...   Mar 22 2005, 07:34
- - IgorKossak   Интересное мнение, хотя и не бесспорное. Из под мо...   Mar 23 2005, 09:27
|- - -Tумблер-   Цитата(IgorKossak @ Mar 23 2005, 12:27)лет и ...   Mar 23 2005, 11:33
- - IgorKossak   -Tумблер-, Вы похоже очень спешите читать пост и в...   Mar 23 2005, 12:21
- - dxp   Цитата(-Tумблер- @ Mar 25 2005, 18:...   Mar 25 2005, 14:37
- - IgorKossak   Далеко не единственный случай, когда программист н...   Mar 28 2005, 09:29
- - -Tумблер-   Цитата(dxp @ Mar 25 2005, 17:37)Я не понимаю,...   Mar 28 2005, 10:21


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

 


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


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