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

 
 
> LPC2103 - сохранение данных во флэш (IAP), Запись во флэш в процессе работы
SanvaldYV
сообщение May 7 2007, 12:48
Сообщение #1


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

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Уже несколько дней пытаюсь разобраться с сохранением данных во флэш памяти (ибо EEPROMа то уже нет sad.gif ). Написал в соответствии с документацией необходимые функции для работы с флэш (In Application Programming). Запись происходит успешно, но есть 2 больших"НО":

1. Запись осуществляется в момент запуска приложения, даже не доходя до места вызова соответствующих функций (смотрел в отладчике - указатель еще стоит на main, а во флэш уже данные которые я планировал записать через несколько десятков команд).
2. Если есть переменная типа "const", лежащая по некому адресу внутри сектора флэш куда ведется запись, то это место не перезаписывается.

Если кто нибудь использовал флэш в этом или других МК для энергонезависимого хранения данных (ну как епром раньше), буду очень признателен если поможете разобраться с этим.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение May 7 2007, 14:20
Сообщение #2


Гуру
******

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



Цитата(Юрий Санвальд @ May 7 2007, 15:48) *
1. Запись осуществляется в момент запуска приложения, даже не доходя до места вызова соответствующих функций
"Само" ничего не происходит. Скорее всего эти данные у вас объявлены как инициализированные константы и они записываются на свои места как и положено одновременно с программой.
Цитата(Юрий Санвальд @ May 7 2007, 15:48) *
2. Если есть переменная типа "const", лежащая по некому адресу внутри сектора флэш куда ведется запись, то это место не перезаписывается.
Естественно. Стирается ведь весь сектор целиком. Вот тут есть статья на эту тему. Я писал кусок кода для 2214 (но они должны быть очень похожи) на основе чьего-то ответа на аналогичный вопрос. Выделил отдельный сектор под изменяемые данные, это позволяет на время перезаписи использовать буфер ОЗУ минимального (а не на весь сектор) размера и не заботится, что затрется что-то лишнее.
Использую две структуры - Config_flash и Config_ram. Перед началом работы вызываю ReadConfig(), который копирует из Config_flash в Config_ram. Далее все действия с Config_ram и когда необходимо сохранить изменения - UpdateConfig(). Конечно, этот код все еще несколько кривоват, но для начала вполне сойдет.
Прикрепленные файлы
Прикрепленный файл  config.zip ( 2.4 килобайт ) Кол-во скачиваний: 98
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение May 8 2007, 06:21
Сообщение #3


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

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Сергей Борщ, огромное спасибо!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 06:44
Рейтинг@Mail.ru


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