Перейти к содержанию
    

ATMega8: не получается запись в EEPROM

И всё таки, прочитайте последний даташит от Microchip полностью, там описаны все проблемы работы с EEPROM, в том числе проблемы самопроизвольного стирания при включении питания, с которыми я столкнулся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, A.V.Avtomat said:

...

Слушайте. Вы сделали неверные выводы. Сказал же. AVR занимаюсь с 2007 года. И работу с EEPROM примерно тогда и освоил. Мне касаемо архитектуры и внутренней периферии ваши советы не нужны. Сам могу давать советы. Мой вопрос был насчёт компилятора. Мы поняли друг друга?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, demiurg1978 сказал:

 Мне касаемо архитектуры и внутренней периферии ваши советы не нужны. Сам могу давать советы. Мой вопрос был насчёт компилятора. Мы поняли друг друга?

Поняли. Барахло ваш компилятор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Был у меня один случай. EEPROM=256 байт . Для адресации хватает одного регистра. Но, пока не обнулил старший - фиг тебе , а не данные

Посему 

Цитата

unsigned char adr,

пишу как 

Цитата

unsigned int adr,

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 hours ago, ILYAUL said:

Был у меня один случай. EEPROM=256 байт . Для адресации хватает одного регистра. Но, пока не обнулил старший - фиг тебе , а не данные

Посему 

пишу как 

 

Привет. Как бы все правильно. Работа с периферией. Указатель двухбайтный и обращение должно полным. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, ILYAUL сказал:

Только у топстартера не так.

Вообще-то, прерывание нужно закрывать до установления адреса. Почти все двухбайтовые регистры используют для записи старшей части один и тот же регистр TEMP. Если между записями старшей и младшей половины регистра произойдёт прерывание и в нём запись в двухбайтный регистр, то - беда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 минуты назад, Палыч сказал:

Вообще-то, прерывание нужно закрывать до установления адреса. Почти все двухбайтовые регистры используют для записи старшей части один и тот же регистр TEMP. Если между записями старшей и младшей половины регистра произойдёт прерывание и в нём запись в двухбайтный регистр, то - беда.

Странно. Если при входе в прерывание Вы не сохраните temp или забудете его восстановить , то беда. А адрес возврата прерывание сохранит автоматом . И вернет на не выполненную команду. 

У стартера другая проблема. Он вообще забыл про старший байт адреса 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, ILYAUL сказал:

Странно. Если при входе в прерывание Вы не сохраните temp или забудете его восстановить , то беда.

Регистр TEMP в микроконтроллере программно недоступен.

1 час назад, ILYAUL сказал:

У стартера другая проблема. Он вообще забыл про старший байт адреса 

Не забыл. Переменная unsigned char по правилам языка приводится к signed int. Используется "фишка": автоматическая трансляция доступа к двухбайтному регистру. Транслятор пересылает значения в старшую и младшую части двухбайтного регистра в "нужной" последовательности.

PS. ТС всего лишь "потерял" половину EEPROM.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цитата

Регистр TEMP в микроконтроллере программно недоступен.

Это, что-то новое для меня . Поподробнее , плиз

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

46 минут назад, ILYAUL сказал:

Поподробнее , плиз

При записи в двухбайтный регистр старшего байта значение записывается во внутренний регистр ТЕМР, а при записи младшего байта - содержимое ТЕМР копируется по назначению. Этот регистр ТЕМР не имеет адреса для доступа к нему со стороны программы.

Когда я читал доки на МК про доступ к двухбайтный регистрам, то почему-то решил для себя, что этот теневой регистр ТЕМР есть у каждого двухбайтного. Но, фиг - это оказался один регистр на весь МК для одновременной записи двух байт в регистры.

Дело было давнее, возможно, в последних ревизиях МК это пофиксили... Но, на такую неприятность как искажение регистра ТЕМР я наткнулся как-то сам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А, вот Вы о каком . Я и забыл. Да было такое , где-то в документациях, что запись в них окружают cli -sei

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...