Size: a a a

2019 December 26

С

Сергей in STM32
У меня камень и так 128к)
источник

s

stD in STM32
Поиск последней записи...

#define ENDMEMORY (0x0801FC00 + 1024) // последняя ячейка флеша (F103)

uint32_t flash_search_adress(uint32_t address, uint8_t cnt)
{
 uint8_t count_byte = cnt;

 while(count_byte)
 {
   if(0xFF == *(uint8_t*)address++) count_byte--;
   else count_byte = cnt;

   if(address == ENDMEMORY - 1) return 0;
 }

 return address -= cnt;
}


Перед тем как записать очередную порцию, вызываем функцию...

uint32_t adr = flash_search_adress(0x0801FC00, 10);

Первый аргумент это адрес с которого начинаются ваши записи (здесь это адрес начала последней страницы)

Второй аргумент - будет искать место, с которого начнутся десять ячеек с FF

Если найдет, то вернёт адрес с которого нужно начинать запись. Если вернёт ноль, значит память закончилась, нужно поновой затирать всю память.

В дефайне записана предпоследняя ячейка флеша, чтоб не выскочить за границы.
источник

С

Сергей in STM32
stD
Поиск последней записи...

#define ENDMEMORY (0x0801FC00 + 1024) // последняя ячейка флеша (F103)

uint32_t flash_search_adress(uint32_t address, uint8_t cnt)
{
 uint8_t count_byte = cnt;

 while(count_byte)
 {
   if(0xFF == *(uint8_t*)address++) count_byte--;
   else count_byte = cnt;

   if(address == ENDMEMORY - 1) return 0;
 }

 return address -= cnt;
}


Перед тем как записать очередную порцию, вызываем функцию...

uint32_t adr = flash_search_adress(0x0801FC00, 10);

Первый аргумент это адрес с которого начинаются ваши записи (здесь это адрес начала последней страницы)

Второй аргумент - будет искать место, с которого начнутся десять ячеек с FF

Если найдет, то вернёт адрес с которого нужно начинать запись. Если вернёт ноль, значит память закончилась, нужно поновой затирать всю память.

В дефайне записана предпоследняя ячейка флеша, чтоб не выскочить за границы.
Спасибо большое!
источник

s

stD in STM32
источник

YL

Yury Lyushnevsky in STM32
Проще поставить внешнюю eeprom и не париться.
источник

С

Сергей in STM32
Yury Lyushnevsky
Проще поставить внешнюю eeprom и не париться.
Само собой,  но плата уже давно разведена а колхозить еепром не хочется
источник

V

Vadim in STM32
Реже писать в память МК...
источник

V

Vadim in STM32
Больший период...
источник

s

stD in STM32
Vadim
Реже писать в память МК...
Выше я сделал прикидки (64 миллиона записей). Так вот, если даже писать каждую минуту, то флеша хватит на 128 лет.
источник

V

Vadim in STM32
stD
Выше я сделал прикидки (64 миллиона записей). Так вот, если даже писать каждую минуту, то флеша хватит на 128 лет.
Это же не Вояджер) можно и по вашему расчету оставить))
источник

С

Сергей in STM32
stD
Выше я сделал прикидки (64 миллиона записей). Так вот, если даже писать каждую минуту, то флеша хватит на 128 лет.
Я так и сделаю, там свободной памяти около 50 кб все равно остается 😁
источник

s

stD in STM32
Я забыл сказать, что когда будете записывать данные пакетами, добавляйте последний байт нулевой, то есть чтоб не получилось что он будет FF , и это будет расценено функцией flash_search_adress() как не записаная ячейка.
источник

s

stD in STM32
То есть, например вам нужно сохранить три значения 679, 789, 234, тогда добавляйте ещё 0.

679, 789, 234, 0x000
источник

s

stD in STM32
Ну и проверку всей памяти нужно делать только при старте, а в дальнейшем запускать flash_search_adress() с последним возвращенным адресом.
источник

С

Сергей in STM32
stD
Я забыл сказать, что когда будете записывать данные пакетами, добавляйте последний байт нулевой, то есть чтоб не получилось что он будет FF , и это будет расценено функцией flash_search_adress() как не записаная ячейка.
Ок)
источник

A

Alexander in STM32
stD
То есть, например вам нужно сохранить три значения 679, 789, 234, тогда добавляйте ещё 0.

679, 789, 234, 0x000
А если ноль нужно сохранить?
источник

С

Сергей in STM32
Закинул донат админу за помощь 👌
источник

s

stD in STM32
Alexander
А если ноль нужно сохранить?
Порой меня обуревает отчаянье из-за того, что меня не понимают.
источник

s

stD in STM32
Сергей
Закинул донат админу за помощь 👌
Благодарю.
источник

С

Сергей in STM32
Alexander
А если ноль нужно сохранить?
Ну сохраняй ноль например в третьем значении, а в четвертом у тебя будет проверочный ноль
источник