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

 
 
 
Reply to this topicStart new topic
> MSP430F5438A. Запись во flash и ресурс памяти.
093
сообщение Oct 21 2017, 13:05
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 8-09-17
Пользователь №: 99 176



Привет!
Нашел в одном проекте любопытную организацию записи во flash: держим в ram массив размеров FLASH_PAGE_SIZE и как только он заполнится - записываем одним большим куском во flash.
Абсолютно не понимаю зачем так сделано, можно же по несколько байт записывать - и программа будет более равномерно выполняться, да и так проще гораздо.
Единственная версия - это чтобы изменять несколько байт во flash и не затрагивать все остальные, но в коде такое нигде не используется.

Может быть автор хотел так сэкономить ресурс?
Но разве это повлияет на ресурс памяти?

PS: Начинаю догадываться, что такая хитрая запись сделана для экономии электроэнергии, но в данном случае о ней речи не идет, видимо из другого проекта перенесена.


Ммм! А можно ли объявить массив вот так:
Код
__root const unsigned char place_for_archive[2048] @ 0x20000; //20000 - в начало страницы

И далее читать/записывать flash память, взяв указатель от place_for_archive? Только как бы его в начало страницы поместить?
Это же поможет избежать ситуацию, когда код программы разрастется и наедет на ту область flash памяти, в которую пишем некий архив событий sm.gif По идеи линкер нас об этом предупредит.



Сообщение отредактировал 93 - Oct 21 2017, 13:48
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 21 2017, 19:49
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 719
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Возможные причины:
1. Экономия ресурса циклов. Для MSP их мало. 10К, кажется. Надо смотреть док.
2. Экономия электричества. При батарейном питании "долгоиграющих" девайсов (например счетчик воды или газа) это очень критично, тк.
для стирания надо "раскочегарить" преобразователь. Если стирать (и записывать) "оптом" - будет намного экономнее.
3. Экономия процессорного времени. Оноже - экономия электричества sm.gif
Цитата(93 @ Oct 21 2017, 16:05) *
. . . А можно ли объявить массив вот так . .

Вместо абсолютного адреса лучше определите в файле линкера свой сегмент на требуемый адрес.
Тогда никаких "наездов" не случится.
Я пользую сегмент инфо:

Код
--файл линкера ---
// ---------------------
// Information memory
-Z(CONST)INFO=1800-19FF
-Z(CONST)INFOA=1980-19FF
-Z(CONST)INFOB=1900-197F
//-Z(CONST)INFOC=1880-18FF
-Z(CONST)MY_SEGMENT_1,MY_SEGMENT_2,INFOC=1880-18FF
-Z(CONST)INFOD=1800-187F

---- main.c --------
. . .
const WORD SerialNumber @ "MY_SEGMENT_1" = 54321;
. . .
Go to the top of the page
 
+Quote Post
093
сообщение Oct 22 2017, 08:42
Сообщение #3





Группа: Участник
Сообщений: 13
Регистрация: 8-09-17
Пользователь №: 99 176



k155la3, что есть цикл записи/стирания flash памяти? Стёрли всю страницу и записали всю страницу? Или стёрли всю страницу и записали 1 байт тоже считается за цикл?

Сообщение отредактировал 93 - Oct 22 2017, 09:07
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 22 2017, 09:14
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 775
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(93 @ Oct 22 2017, 11:42) *
k155la3, что есть цикл записи/стирания flash памяти? Стёрли всю страницу и записали всю страницу? Или стёрли всю страницу и записали 1 байт тоже считается за цикл?

Ресурс flash считается в количестве циклов стирания.
Go to the top of the page
 
+Quote Post
093
сообщение Oct 22 2017, 09:16
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 8-09-17
Пользователь №: 99 176



jcxz, ага, понятно. Значит суть того алгоритма записи, что в первом посте только в экономии энергии.
Спасибо всем!

Сообщение отредактировал 93 - Oct 22 2017, 09:16
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 22 2017, 10:20
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 719
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(93 @ Oct 22 2017, 12:16) *
jcxz, ага, понятно. Значит суть того алгоритма записи, что в первом посте только в экономии энергии.
Спасибо всем!

Экономия ресурса флеш (циклы, прежде всего, тк их мало) + экономия энергии.
DOC F5438A: slas655d, slau208o.pdf, slaz290m.pdf
Необходимое, но недостаточное sm.gif

Go to the top of the page
 
+Quote Post
093
сообщение Oct 22 2017, 10:35
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 8-09-17
Пользователь №: 99 176



k155la3, если ресурс рассчитывается в количестве циклов стирания - то алгоритм из первого поста никак не поможет продлить ресурс. Точно также можно и записывать по одному байту, а не целой страницей, при этом стирать страницами.

Сообщение отредактировал 93 - Oct 22 2017, 10:35
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 22 2017, 16:51
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 719
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(93 @ Oct 22 2017, 13:35) *
(1) . . . если ресурс рассчитывается в количестве циклов стирания - то алгоритм из первого поста никак не поможет продлить ресурс.
(2) Точно также можно и записывать по одному байту, а не целой страницей, при этом стирать страницами.

(1) Смотря как работает ваш массив.
Если это некий аналог кэш-памяти - то очень даже сэкономит (циклы стирания).
(2) Да

Курите slau208o, 7.3.2.7 Block Write, и чем оно отличается от режимов записи 1/2/4 байт.
Go to the top of the page
 
+Quote Post
093
сообщение Oct 24 2017, 16:27
Сообщение #9





Группа: Участник
Сообщений: 13
Регистрация: 8-09-17
Пользователь №: 99 176



k155la3, раз размер массива равен размеру страницы - получится такое же кол-во циклов стирания, как и в случае отсутствия массива и записи байт за байтом. Мы же не можем не стирать sm.gif

Сообщение отредактировал 93 - Oct 24 2017, 16:30
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 26 2017, 07:08
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 719
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Если в сегмент надо до-записать данные (те пишем в ячейки памяти флеш, содержащие 0xFF и продвигаем указатель записи ++), то стирание сегмента не требуется. Например, лог включений прибора. Когда будет заполнены последние ячейки сегмента - стираем сегмент и пишем опять с начала.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st November 2017 - 21:24
Рейтинг@Mail.ru


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