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

 
 
> IAR: запись в EEPROM по прерыванию, как это организовать?
vitko
сообщение May 24 2007, 10:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 8-03-06
Из: Kyiv, UA
Пользователь №: 15 066



Подскажите, пожалуйста, как в IAR оpганизовать запись во встроенную EEPROM из буфера по прерыванию, так чтобы это не мешало обращению к переменным в EEPROM как обычным переменным в памяти данных.

Сообщение отредактировал vitko - May 24 2007, 10:23
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
vitko
сообщение May 24 2007, 13:35
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 8-03-06
Из: Kyiv, UA
Пользователь №: 15 066



Мне нужно переписать N байт из ОЗУ в ЕЕПРОМ. Если я напишу:

for (i=0, i<N, i++ ) *EE_ptr++ = *RAM_ptr++ ;

- надеюсь компилятор не запретит глобально прерывания на все время записи масива ?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 24 2007, 13:50
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(vitko @ May 24 2007, 16:35) *
Мне нужно переписать N байт из ОЗУ в ЕЕПРОМ. Если я напишу:

for (i=0, i<N, i++ ) *EE_ptr++ = *RAM_ptr++ ;

- надеюсь компилятор не запретит глобально прерывания на все время записи масива ?

Нет!
Если взглянуть как реализованы библиотечные функции обращения к ЕЕПРОМ (\avr\src\lib\eeprom.s90), то видно, что прерывания там запрещаются на крайне непродолжительное время.
Когда-то в форуме Кросплатформенный компилятор IAR я выкладывал доработанный файл eeprom.s90 (с исправленным багом). Поищите.
Go to the top of the page
 
+Quote Post
singlskv
сообщение May 24 2007, 18:08
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(vitko @ May 24 2007, 14:22) *
Подскажите, пожалуйста, как в IAR оpганизовать запись во встроенную EEPROM из буфера по прерыванию, так чтобы это не мешало обращению к переменным в EEPROM как обычным переменным в памяти данных.

Цитата(vitko @ May 24 2007, 17:35) *
Мне нужно переписать N байт из ОЗУ в ЕЕПРОМ. Если я напишу:

for (i=0, i<N, i++ ) *EE_ptr++ = *RAM_ptr++ ;

- надеюсь компилятор не запретит глобально прерывания на все время записи масива ?

Цитата(IgorKossak @ May 24 2007, 17:50) *
Нет!
Если взглянуть как реализованы библиотечные функции обращения к ЕЕПРОМ (\avr\src\lib\eeprom.s90), то видно, что прерывания там запрещаются на крайне непродолжительное время.

И чем это поможет(запрет прерываний на очень короткое время) когда нужно
писать в eeprom и из основного цикла и из прерывания ?
И как нужно написать обработчик прерывания что бы он правильно разруливал
эту ситуацию (конкурирующие запросы на запись в eeprom)?

ИМХО
Для столь медленного устройства каким является eeprom есть только 2 стратегии его использования
1. Все делаем в прерывании eeprom, заводим буфер обмена с eeprom, как-то разруливаем
переполнение этого буфера.
2. Делаем все поллингом или через стандартный доступ к ЕЕ переменным в IAR, или, что намного
лучше, если в системе есть переодическая обработка событий (например прерывание таймера/
ADC или что-то еще ) опрашиваем окончание последней записи и запускаем новую(если надо),
ну и опять же как-то разруливаем возможные переполнения буфера(ну или как вариант,
делаем функцию опроса занятости буфера и пишем в него только если он свободен)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 24 2007, 20:28
Сообщение #5


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(singlskv @ May 24 2007, 21:08) *
И как нужно написать обработчик прерывания что бы он правильно разруливал
эту ситуацию (конкурирующие запросы на запись в eeprom)?

И не только на запись. Чтение сразу после записи требует окончания предыдущего процесса.
Не следует при этом забывать одно из пожелений в теме - обращение к обьектам в ЕЕПРОМ как к переменным.
При этом предположение, что всё можно поставить в очередь и эта очередь будет разгребаться где то по прерываниям, а фоновый процесс будет идти без ожиданий, по моему некорректно. Ибо прежде чем прочесть какую то переменную в одном процессе, нужно дождаться окончания записи, начатой в другом процессе (или в этом же). Ситуация, когда нужно только писать, может быть решена с помощью очереди, но это частный случай.
Go to the top of the page
 
+Quote Post
singlskv
сообщение May 24 2007, 20:55
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(IgorKossak @ May 25 2007, 00:28) *
И не только на запись. Чтение сразу после записи требует окончания предыдущего процесса.
Не следует при этом забывать одно из пожелений в теме - обращение к обьектам в ЕЕПРОМ как к переменным.
При этом предположение, что всё можно поставить в очередь и эта очередь будет разгребаться где то по прерываниям, а фоновый процесс будет идти без ожиданий, по моему некорректно. Ибо прежде чем прочесть какую то переменную в одном процессе, нужно дождаться окончания записи, начатой в другом процессе (или в этом же). Ситуация, когда нужно только писать, может быть решена с помощью очереди, но это частный случай.

Про чтение не упоминал по тому что с ним все гораздо проще.
Никто ведь не мешает нам организовать 2 очереди, одна на запись другая на чтение,
и учитывая то, что чтение практически не отнимает ресурсов, можно при каждом прерывании
по окончанию записи выполнять все отложенные процедуры чтения прямо в этом прерывании.

P.S. Правда это все не имеет никакого отношения к использованию IARом переменных
в области EEPROM, зато имеет отношение к грамотному использованию eeprom.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение May 25 2007, 07:16
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(singlskv @ May 25 2007, 00:55) *
Про чтение не упоминал по тому что с ним все гораздо проще.
Никто ведь не мешает нам организовать 2 очереди, одна на запись другая на чтение,
и учитывая то, что чтение практически не отнимает ресурсов, можно при каждом прерывании
по окончанию записи выполнять все отложенные процедуры чтения прямо в этом прерывании.

P.S. Правда это все не имеет никакого отношения к использованию IARом переменных
в области EEPROM, зато имеет отношение к грамотному использованию eeprom.


Как бы не пытались, но природу не обманешь. ЕЕПРОМ медленное устройство, поэтому основная программа должна это учитывать. Как это сделать, вариантов предложено достаточно. ИМХО разработчик разберется, выберет или предложит собственный вариант решения СВОЕЙ ЗАДАЧИ. А IAR здесь в самом деле ни причем. Предлагаю тему закрыть.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vitko   IAR: запись в EEPROM по прерыванию   May 24 2007, 10:22
- - CSB   Пологаю нужно переписывать eeprom.s90 для работы с...   May 24 2007, 11:38
- - BratherLU   Я бы просто запретил прерывания на время обращения...   May 24 2007, 12:03
- - VladimirYU   Цитата(vitko @ May 24 2007, 14:22) Подска...   May 24 2007, 12:07
|- - BratherLU   А, ну если с этой стороны на проблему смотреть то ...   May 24 2007, 13:27
- - IgorKossak   VladimirYU, всё это конечно правильно, но речь шла...   May 24 2007, 12:48
|- - VladimirYU   Цитата(IgorKossak @ May 24 2007, 16:48) V...   May 24 2007, 13:15
|- - BratherLU   Да тут вообще все ок должно быть, только в прерыва...   May 24 2007, 13:50
|- - VladimirYU   Цитата(IgorKossak @ May 24 2007, 17:50) Н...   May 24 2007, 14:09
||- - IgorKossak   Цитата(VladimirYU @ May 24 2007, 17:09) И...   May 24 2007, 15:06
|- - IgorKossak   Цитата(VladimirYU @ May 25 2007, 10:16) П...   May 25 2007, 07:32
|- - singlskv   Цитата(IgorKossak @ May 25 2007, 11:32) А...   May 25 2007, 07:54
|- - BratherLU   По-моему проще надо быть - и работать с еепром (чи...   May 25 2007, 08:26
- - CSB   IgorKossak писал >Дело в глюке, содержащемся в ...   May 24 2007, 14:21
- - vitko   Спасибо, с темой понятно. Обойдусь без прерываний.   May 25 2007, 14:19


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

 


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


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