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

 
 
> IAR для MSP430, удобная работа с флешью
Zelepuk
сообщение Nov 19 2011, 10:11
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



если какие-то особенности компилятора, может pragma какие-ниубдь, позволяющие работать с переменными во flash так же лекго как с обычными переменными?

например могу ли я объявить как-то по хитрому переменную "x", чтобы потом легко её инкрементировать в коде

x++; //например
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Zelepuk
сообщение Nov 21 2011, 11:32
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
=DS=
сообщение Nov 21 2011, 12:22
Сообщение #3


Участник
*

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



А что тут комментировать? Стандартная процедура, о которой говорили выше - сохранить где-то содержимое страницы, стереть ее и записать повторно, за исключением модифицируемой переменной. Просто тут для временного хранения используется другая страница флеши. Имеет ли это смысл? Трудно сказать, разве что катастрофически припрет со свободной RАМ. Все остальное в минусе - временные затраты, энергия, ресурс флеши. Чтобы выбрать оптимальный для Вас вариант, надо знать гораздо больше о количестве сохраняемых переменных, частоте их изменения, и куче других параметров.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 22 2011, 20:35
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



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


если предположить что таких переменных для хранения не более десяти. Частота изменения около 15 минут.

-наверное лучше написать функцию которая сразу меняет 10 переменных во флеши, чтобы как-то сбереч ресурс флеши?
-при перезаписи каждые 15 минут и количестве циклов флеши 100 000(как у MSP430) получается имеем всего 25000 часов такой работы, после чего флешь загнётся...

наверное лучше на какую-то внешнюю ПЗУ перейти.
Go to the top of the page
 
+Quote Post
=DS=
сообщение Nov 23 2011, 00:53
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Nov 23 2011, 05:58
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(=DS= @ Nov 23 2011, 03:53) *
Не так все плохо. Там 255 ячеек памяти в инфо области, прежде чем ее стирать можно заполнить 25 - 10 блоками настроек в завистимости от их типа, что уже дает 250000-500000 часов работы...


можно по подробнее об этом?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - Дмитрий К.   QUOTE (Zelepuk @ Nov 23 2011, 08:58) можн...   Nov 23 2011, 07:11
- - 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


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

 


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


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