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

 
 
 
Reply to this topicStart new topic
> Глюки при записе в EEPROM Atmega128, При записе в EEPROM дурит другой процесс программы.
Д_М
сообщение Jun 20 2014, 14:14
Сообщение #1


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

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Здравствуйте!
Программа откомпилирована в IAR C 6.40. Используются оба UART, кооперативная многозадачность. Одним словом, источников для неприятностей масса.
Механизм кооперативной многозадачности хорошо отработан. Его использую давно и без проблем. Неприятность возникла, как обычно там, где её не ждал.
Когда производится запись числа в EEPROM, программа дурит. Когда записывал 32-разрядное long int, то программа зависала. Когда процесс разбил на части
(пишу побайтно), зависать перестала, но некоторая дурь сохранилась. Вроде бы не может ничего такого сделать процесс запись в EEPROM. Самое худшее,
что он делает - тормозит программу, сканируя бит готовности EEPROM. Сетую на то, что один UART работает в режиме пассивного слушателя, а не в режиме
запроc / ответ. Можно предположить, что за время записи в EEPROM в буфер UART накидали что-то, сбилась синхронизация... Может быть у кого-то есть
ещё соображения на этот счёт? А ещё, может быть, у кого-то есть фрагмент кода, который позволяет производить запись в EEPROM, с использованием
прерывания, вместо сканирования бита готовности?
Заранее благодарен!
Go to the top of the page
 
+Quote Post
Копейкин
сообщение Jun 20 2014, 16:24
Сообщение #2


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

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Может дело в том, что строб записи EEWE должен быть активирован не позднее 4 тактов после EEMWE.
Посмотрите внимательно порядок записи EEPROM в даташите.
Атмел рекомендует запретить прерывания на время записи.
А у Вас многозадачность...
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 21 2014, 07:40
Сообщение #3


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Вы сами пишете или используете возможности IAR?
Квалификатор __eeprom long long int не помагает?
Дабы не происходило ничего непредвиденного во время записи в еепром попробуйте на время записи запретить прерывание __disable_interrupt()
Go to the top of the page
 
+Quote Post
demiurg1978
сообщение Aug 9 2014, 07:16
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 333
Регистрация: 19-12-13
Из: Новосибирск
Пользователь №: 79 709



IAR отключает прерывание при записи в EEPROM. У меня была проблема с ATMEGA8535. ATMEGA32 работает. 8535 упорно не хочет писать. По листингу вроде все нормально. Я тогда плюнул и заменил кристалл на 32 мегу. Для 8535 нужно функции на асме писать. А я этого в IAR не умею. Нужно как-то уметь, чтобы асмовская функция принимала значения из си кода.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:30
Рейтинг@Mail.ru


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