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

 
 
> 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
 
Start new topic
Ответов
k155la3
сообщение Oct 21 2017, 19:49
Сообщение #2


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

Группа: Свой
Сообщений: 1 123
Регистрация: 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



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

 


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


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