|
scmRTOS + XMEGA, порт scmRTOS для XMEGA |
|
|
|
 |
Ответов
|
Feb 8 2011, 15:52
|

Участник

Группа: Участник
Сообщений: 22
Регистрация: 23-12-05
Пользователь №: 12 594

|
Может быть вопрос немного не в тему, но не хочется создавать товый топик. Как scmRTOS относится к записи данных в EEPROM? Ведь для корректной записи в EEPROM необходимо отключать прерывания на несколько милисекунд. Я использую специально для этих целей файл eeprom.s90 Не окажет ли это влияние на работу операционки?
Сообщение отредактировал quarter2 - Feb 8 2011, 15:53
Прикрепленные файлы
eeprom.rar ( 3.25 килобайт )
Кол-во скачиваний: 24
|
|
|
|
|
Feb 9 2011, 07:48
|

Участник

Группа: Участник
Сообщений: 22
Регистрация: 23-12-05
Пользователь №: 12 594

|
Цитата(ReAl @ Feb 9 2011, 00:06)  Зачем ??? проблема есть реально, если на время записи в еепром не запрещать прерывание - данные могут записаться некорректно. после того как начал использовать вышеприведённый файл - проблема устранилась. вот здесь этот вопрос обсуждается http://electronix.ru/forum/lofiversion/index.php/t16140.htmlhttp://electronix.ru/forum/index.php?showt...amp;#entry71028Вот пример записи в еепром из даташита на Atmega128: Assembly Code Examplein r16, SREG ; store SREG value cli ; disable interrupts during timed sequence sbi EECR, EEMWE ; start EEPROM write sbi EECR, EEWE out SREG, r16 ; restore SREG value (I-bit) C Code Examplechar cSREG; cSREG = SREG; /* store SREG value */ /* disable interrupts during timed sequence */ __disable_interrupt(); EECR |= (1<<EEMWE); /* start EEPROM write */ EECR |= (1<<EEWE); SREG = cSREG; /* restore SREG value (I-bit) */
Сообщение отредактировал quarter2 - Feb 9 2011, 08:17
|
|
|
|
|
Feb 9 2011, 08:34
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (quarter2 @ Feb 9 2011, 09:48)  проблема есть реально, если на время записи в еепром не запрещать прерывание - данные могут записаться некорректно. Неверно. Прерывания во время записи не мешают. QUOTE (quarter2 @ Feb 9 2011, 09:48)  Вот пример записи в еепром из даташита на Atmega128: Покажите, где тут запрещение прерываний на время записи, где тут миллисекунды запрещенных прерываний? QUOTE (quarter2 @ Feb 9 2011, 09:48)  после того как начал использовать вышеприведённый файл - проблема устранилась. Все вменяемые компиляторы имеют встроенные инструменты делать то же самое без этого файла.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 9 2011, 09:00
|

Участник

Группа: Участник
Сообщений: 22
Регистрация: 23-12-05
Пользователь №: 12 594

|
Цитата(Сергей Борщ @ Feb 9 2011, 10:34)  Неверно. Прерывания во время записи не мешают. Покажите, где тут запрещение прерываний на время записи The following example shows how this can be used to avoid interrupts during the timed EEPROM write sequence /* disable interrupts during timed sequence */ __disable_interrupt(); EECR |= (1<<EEMWE); /* start EEPROM write */ EECR |= (1<<EEWE); SREG = cSREG; /* restore SREG value (I-bit) */Есть ни что иное, как запрещение прерываний на время окончания записи в ЕЕПРОМ Время записи в ЕЕПРОМ в Atmega128 согласно тому же даташиту: Цитата(Сергей Борщ @ Feb 9 2011, 10:34)  где тут миллисекунды запрещенных прерываний? Table 2. EEPROM Programming TimeEEPROM Write (from CPU) = 8.5 ms Цитата(Сергей Борщ @ Feb 9 2011, 10:34)  Все вменяемые компиляторы имеют встроенные инструменты делать то же самое без этого файла. В IAR EWAVR 5.50 в файле eeprom.s90 нет запрещений прерываний на время ожидания окончания записи в ЕЕПРОМ
Сообщение отредактировал quarter2 - Feb 9 2011, 09:06
|
|
|
|
|
Feb 9 2011, 09:35
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (quarter2 @ Feb 9 2011, 11:00)  Есть ни что иное, как запрещение прерываний на время окончания записи в ЕЕПРОМ Внимательно читайте даташит и включайте голову. Это запрещение прерываний на две команды запуска процесса записи, 4 такта. QUOTE (quarter2 @ Feb 9 2011, 11:00)  В IAR EWAVR 5.50 в файле eeprom.s90 нет запрещений прерываний на время ожидания окончания записи в ЕЕПРОМ В IAR EWAVR 5.50 есть ключевое слово __eeprom. eeprom.s90 пора забыть еще в версии 1.26. Ждать окончания записи можно и с разрешенными прерываниями.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 9 2011, 10:03
|

Участник

Группа: Участник
Сообщений: 22
Регистрация: 23-12-05
Пользователь №: 12 594

|
Цитата(Сергей Борщ @ Feb 9 2011, 11:35)  Внимательно читайте даташит и включайте голову. Это запрещение прерываний на две команды запуска процесса записи, 4 такта. Про пример из даташита - согласен. В примере как раз прерывания отключаются на время запуска процесса записи в ЕЕПРОМ. Но в файле eeprom.s90 как раз прерывания отключаются на время окончания записи в ЕЕПРОМ: ;---------------------------------------------------------- ; ?eewait ; ; Wait for previous eeprom write operation to complete ; ; SIZE: 6 bytes
RSEG CODE:CODE:NOROOT(1) ?eewait: CLI SBIS EECR,EEWE ; Loop until previous write is completed RET OUT SREG,T0 RJMP ?eewait
Цитата(Сергей Борщ @ Feb 9 2011, 11:35)  В IAR EWAVR 5.50 есть ключевое слово __eeprom. eeprom.s90 пора забыть еще в версии 1.26. Неправильно. Все переменные, которые объявлены ключевым словом __eeprom при компиляции для работы с областью памяти ЕЕПРОМ используют файл eeprom.s90 Цитата(Сергей Борщ @ Feb 9 2011, 11:35)  Ждать окончания записи можно и с разрешенными прерываниями. Если бы не наступал на эти грабли - не поднимал бы вопрос. Без запрещения прерываний на время окончания записи есть вероятность некорректной записи данных в область ЕЕПРОМ
Сообщение отредактировал quarter2 - Feb 9 2011, 10:07
|
|
|
|
|
Feb 9 2011, 11:14
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (quarter2 @ Feb 9 2011, 12:03)  Неправильно. Все переменные, которые объявлены ключевым словом __eeprom при компиляции для работы с областью памяти ЕЕПРОМ используют файл eeprom.s90 Не совсем так - они используют функции из библиотеки. Возможно, источником при компиляции библиотеки является этот самый eeprom.s90. Если вы добавите этот файл в проект, то его функции заменять одноименные библиотечные. Давно не пользуюсь ИАРом для AVR, не могу посмотреть что он там берет из библиотеки. Посмотрел старый проект - использовался компилятор версии 2.28, прерывания мною не запрещались, прерывания шли довольно активно, сбоев при записи не было. QUOTE (quarter2 @ Feb 9 2011, 12:03)  Без запрещения прерываний на время окончания записи есть вероятность некорректной записи данных в область ЕЕПРОМ Прерывания тут не при чем - никогда не держу прерывания запрещенными во время записи и ни разу не нарывался на некорректную запись. Возможно вы используете (хотя бы и на чтение) __eprom-переменные в прерываниях, в этом случае - да, будут проблемы. Но это уже не проблема прерываний, а неверное архитектурное решение.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
quarter2 scmRTOS + XMEGA Jan 19 2011, 14:45 ReAl Пока туда не лазил. Точнее, по диагонали просмотре... Jan 20 2011, 07:42 SWD Пытаюсь запустить scmRTOS на ATxmega128A1.
Вопросы... Jan 20 2011, 11:43 ReAl Я веду AVR/GCC порт и потихоньку подхватываю AVR/I... Jan 20 2011, 16:20 SWD Спасибо, я так и думал, осталось разобраться, как ... Jan 24 2011, 07:15 ReAl Цитата(SWD @ Jan 24 2011, 09:15) В файле ... Jan 24 2011, 16:08 SWD В файле OS_Target_asm.s90 заботливо описаны все RA... Jan 25 2011, 04:40 ReAl Цитата(SWD @ Jan 25 2011, 06:40) В файле ... Jan 25 2011, 08:40 SWD ЦитатаИ это место надо под #ifdef пустить об Xmega... Jan 25 2011, 11:35 ReAl Цитата(SWD @ Jan 25 2011, 13:35) Может лу... Jan 25 2011, 20:19        quarter2 Цитата(Сергей Борщ @ Feb 9 2011, 13:14) Н... Feb 9 2011, 11:47 SWD Здравствуйте.
scmRTOS работает на ATxmega128A1 (с... Feb 28 2011, 07:48 ReAl Цитата(SWD @ Feb 28 2011, 09:48) Возникли... Mar 1 2011, 08:16 SWD Добавил сохранение в контекст RAMPD и RAMPX.
Пробл... Mar 1 2011, 07:37 quarter2 Вопрос к разработчикам scmRTOS:
1. почему исходник... Apr 22 2011, 13:55 ReAl Цитата(quarter2 @ Apr 22 2011, 16:55) 1. ... Apr 22 2011, 19:06  _Артём_ Здраствуйте.
Попробовал недавно scmRTOS - понравил... Jan 16 2012, 23:57 ReAl Ой-ой-ой... Мне самому xmega до сих пор как-то не ... Feb 12 2012, 11:48 _Артём_ Цитата(ReAl @ Feb 12 2012, 13:48) Ой-ой-о... Feb 12 2012, 14:59  ReAl Цитата(_Артём_ @ Feb 12 2012, 16:59) Это ... Feb 12 2012, 17:41 a9d Стмка на порядок дешевле. И там есть свои вкусност... Feb 12 2012, 15:52 _Артём_ Цитата(a9d @ Feb 12 2012, 17:52) Стмка на... Feb 12 2012, 16:25 a9d stm8 настолько дешевые, что стоят почти как stm32.... Feb 12 2012, 17:04 _Артём_ Цитата(a9d @ Feb 12 2012, 19:04) stm8 нас... Feb 12 2012, 17:59 ReAl Цитата(a9d @ Feb 12 2012, 19:04) В ST кон... Feb 12 2012, 18:19 a9d Как раз по этому они и умные.
Другие не догадалис... Feb 12 2012, 18:28 Anatoly74 Что-то тема порта XMega давно не обсуждалась. Каки... Mar 29 2012, 06:02 Сергей Борщ QUOTE (Anatoly74 @ Mar 29 2012, 09:02) Уж... Mar 29 2012, 07:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|