|
IAR для MSP430, удобная работа с флешью |
|
|
|
 |
Ответов
|
Nov 21 2011, 11:32
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
нашёл интересный код по теме поста: CODE // *********************************************************************** // This routine makes the flash looks like EEPROM. It will erase and // replace just one word // This routine copies will erase SEGA and then image SEGB to SEGA // It will then erase SEGB and copy from SEGA back to SEGB all 128 bytes // except the one to be replaced. // *********************************************************************** void flash_replace16(int16_t *ptr, int16_t word) { int *read_ptr; int *write_ptr; int w; //Optimise the case where the new and old values are the same if (*ptr == word) return; flash_clr((int *) FSEG_A);
_DINT(); //Set to write mode to prepare for copy FCTL3 = FWKEY; /* Lock = 0 */ FCTL1 = FWKEY | WRT;
//Copy block B to A read_ptr = (int *) FSEG_B; write_ptr = (int *) FSEG_A; for (w = 0; w < 64; w++) *write_ptr++ = *read_ptr++; flash_clr((int *) FSEG_B);
//Set to write mode to prepare for copy FCTL3 = FWKEY; /* Lock = 0 */ FCTL1 = FWKEY | WRT;
//Copy block A to B, slipping in the new value at the right location read_ptr = (int *) FSEG_A; write_ptr = (int *) FSEG_B; for (w = 0; w < 64; w++, read_ptr++, write_ptr++) { if (write_ptr == ptr) *write_ptr = word; else *write_ptr = *read_ptr; } flash_secure(); _EINT(); } как я понял, эта функция то, что мне нужно Прошу прокоментировать
Сообщение отредактировал Zelepuk - Nov 21 2011, 11:32
|
|
|
|
|
Nov 21 2011, 12:22
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836

|
А что тут комментировать? Стандартная процедура, о которой говорили выше - сохранить где-то содержимое страницы, стереть ее и записать повторно, за исключением модифицируемой переменной. Просто тут для временного хранения используется другая страница флеши. Имеет ли это смысл? Трудно сказать, разве что катастрофически припрет со свободной RАМ. Все остальное в минусе - временные затраты, энергия, ресурс флеши. Чтобы выбрать оптимальный для Вас вариант, надо знать гораздо больше о количестве сохраняемых переменных, частоте их изменения, и куче других параметров.
|
|
|
|
|
Nov 22 2011, 20:35
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(=DS= @ Nov 21 2011, 15:22)  А что тут комментировать? Стандартная процедура, о которой говорили выше - сохранить где-то содержимое страницы, стереть ее и записать повторно, за исключением модифицируемой переменной. Просто тут для временного хранения используется другая страница флеши. Имеет ли это смысл? Трудно сказать, разве что катастрофически припрет со свободной RАМ. Все остальное в минусе - временные затраты, энергия, ресурс флеши. Чтобы выбрать оптимальный для Вас вариант, надо знать гораздо больше о количестве сохраняемых переменных, частоте их изменения, и куче других параметров. если предположить что таких переменных для хранения не более десяти. Частота изменения около 15 минут. -наверное лучше написать функцию которая сразу меняет 10 переменных во флеши, чтобы как-то сбереч ресурс флеши? -при перезаписи каждые 15 минут и количестве циклов флеши 100 000(как у MSP430) получается имеем всего 25000 часов такой работы, после чего флешь загнётся... наверное лучше на какую-то внешнюю ПЗУ перейти.
|
|
|
|
|
Nov 23 2011, 00:53
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836

|
Цитата(Zelepuk @ Nov 23 2011, 00:35)  -при перезаписи каждые 15 минут и количестве циклов флеши 100 000(как у MSP430) получается имеем всего 25000 часов такой работы, после наверное лучше на какую-то внешнюю ПЗУ перейти. Не так все плохо. Там 255 ячеек памяти в инфо области, прежде чем ее стирать можно заполнить 25 - 10 блоками настроек в завистимости от их типа, что уже дает 250000-500000 часов работы, а если вы еще заранее знаете, что часть из них будет меняться очень редко, то можно их сгруппироать и выиграть еще больше. Или поставить кондер побольше по питанию и держать быстро меняющиеся настройки в ОЗУ, а во флеш их писать при пропадании питания.
Сообщение отредактировал =DS= - Nov 23 2011, 01:04
|
|
|
|
|
Nov 23 2011, 07:11
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 6-05-06
Из: Москва
Пользователь №: 16 848

|
QUOTE (Zelepuk @ Nov 23 2011, 08:58)  можно по подробнее об этом? имеется ввиду такая последовательность: - стереть страницу - записать данные (10 байт) со смещением 0x00 (начало страницы), - через 15 мин записать данные (10 байт) со смещением 0x0A, - через 15 мин записать данные (10 байт) со смещением 0x14, - ... так 50 раз - страница заполнилась, стирание всей страницы это для обычной страницы по 512 байт (не INFO), для INFO размер 64 байта
|
|
|
|
Сообщений в этой теме
Zelepuk IAR для MSP430 Nov 19 2011, 10:11 SSerge Чтобы изменить содержимое флэши нужно скопировать ... Nov 19 2011, 12:15 Zelepuk Спасибо.
Дело в том, что мне требуется хранить тол... Nov 19 2011, 12:55 Сергей Борщ QUOTE (Zelepuk @ Nov 19 2011, 15:55) ПЕРЕ... Nov 19 2011, 20:45  Zelepuk Цитата(Сергей Борщ @ Nov 19 2011, 23:45) ... Nov 19 2011, 22:00   dxp Цитата(Zelepuk @ Nov 20 2011, 05:00) плох... Nov 20 2011, 09:33    Zelepuk Цитата(dxp @ Nov 20 2011, 12:33) Что это ... Nov 20 2011, 11:00     =DS= Цитата(Zelepuk @ Nov 20 2011, 15:00) flas... Nov 20 2011, 19:46      Zelepuk Цитата(=DS= @ Nov 20 2011, 22:46) Прочита... Nov 21 2011, 13:11 KARLSON Вы можете сделать переменную во флеш по любому адр... Nov 19 2011, 15:51 Zelepuk спасибо, но как же быть тогда?
може тогда перед пе... Nov 21 2011, 06:18 =DS= Цитата(Zelepuk @ Nov 21 2011, 10:18) може... Nov 21 2011, 10:48 Zelepuk спасибо за ответы, я разбираю код для MSP430
так в... Nov 21 2011, 12:31 MrYuran Цитата(Zelepuk @ Nov 21 2011, 16:31) не с... Nov 21 2011, 13:01 =DS= CODE#define __infomem___ Pragma("location=... Nov 21 2011, 13:43 Zelepuk Спасибо за подсказки. Всё заработало. Кристалл F47... Nov 21 2011, 16:48 =DS= Цитата(Zelepuk @ Nov 21 2011, 20:48) Спас... Nov 21 2011, 18:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|