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

 
 
> МК зависает при попытке чтения буфера, cortex-m3 lm3s
marco
сообщение Jan 8 2011, 09:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 12-12-10
Пользователь №: 61 580



Здравствуйте.
Имею EVB с LM3S2965 (64КБайт RAM). openocd over ftdi.
В данный момент работаю с флеш. Требуется корректно обработать ситуацию изменения состояния бита '0' -> '1'. Для этого нужно сохранить всю страницу (1Кбайт == unsigned long [32]) во временный буфер, стереть страницу, изменить требуемые данные в буфере и записать буфер на флеш.
При попытке чтения данных из буфера МК зависает. Сам проект мизерный. Игрался с размером буфера: при его резком уменьшении МК работает, но меня это не устраивает. Реализовывать буфер на самой флеш не хочу: это медленно и таким образом можно убить саму флеш.
Доберусь до работы - там в IAR попробую отладить и пробежаться по регистрам.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
skripach
сообщение Jan 8 2011, 16:11
Сообщение #2


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата
Ткните пальцем

Прям ткнуть затрудняюсь, на ламинариях флеш не писал. Непонятно почему вы не пользуйтесь функциями записи во флеш из этого самого an01237 ?
К примеру, не вижу в приведённом вами куске кода установки адреса куда писать, ожидания конца записи?


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
marco
сообщение Jan 8 2011, 19:00
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 12-12-10
Пользователь №: 61 580



Цитата(skripach @ Jan 8 2011, 22:11) *
Прям ткнуть затрудняюсь, на ламинариях флеш не писал.

Не могли бы привезти аналогичное описание для вашего МК? Очень бы хотелось хранить настройки прямо на борту.
Цитата(skripach @ Jan 8 2011, 22:11) *
Непонятно почему вы не пользуйтесь функциями записи во флеш из этого самого an01237 ?

В функциях, приведённых в StellarisWare от Luminary нет обработки ситуации, когда нужно в бите '0' обратить обратно в '1' (позволю напомнить, что запись производится по логическому И). Вернее, обработка есть, но она заключается лишь в возврате ошибки, если результат (настоящая информация на флеш) не соответствует ожиданию (данным, записанным а FMD).
В "правильном" случае надо:
1. Посмотреть, стоит ли вобще записывать данные в блок (возможно, записываемое слово идентично уже находящемуся по этому адресу).
2. IF ( <текущие данные в блоке> И <записываемые данные> != <записываемые данные> ), то нужно стереть страницу (сохранив всю страницу, помимо целевого слова), записать страницу на флеш с внесёнными изменениями.
ELSE ( просто записываем слово на флеш без танцев).

Цитата(skripach @ Jan 8 2011, 22:11) *
К примеру, не вижу в приведённом вами куске кода установки адреса куда писать, ожидания конца записи?

Эта часть кода следует за присвоением FMD. Я её опустил, ибо выполнение оной не происходит. Проверяется (мной) расcтавлением return-ов в произвольных места: перед чтением буфера return отрабатывает, после - нет.
Go to the top of the page
 
+Quote Post



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

 


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


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