Size: a a a

2020 August 09

В

Василий in Deus Volt!
Dima Leonov
Почитай про работу с флешой стм32, алгоритм там не сложный
Разрешаешь запись (на цмсис один бит поднять в регистре флэш, на хале там одна функция) потом побайтово записать туда данные и запретить писать во флеш после этого
Ещё не забыть что тактовый генератор внутренний должен быть включен
источник

DC

Daniil Chernyshev in Deus Volt!
Еще не забыть, что флэш стирается только страницами, а размер страницы зависит от камня, и регион под данные лучше бы выделять кратно размеру страницы, дабы не стереть чего лишнего.
источник

DC

Daniil Chernyshev in Deus Volt!
из личных граблей >_>
источник

В

Василий in Deus Volt!
Daniil Chernyshev
Еще не забыть, что флэш стирается только страницами, а размер страницы зависит от камня, и регион под данные лучше бы выделять кратно размеру страницы, дабы не стереть чего лишнего.
А ещё и размеры разных страниц в одном камне могут быть разными
источник

DC

Daniil Chernyshev in Deus Volt!
вот это внезапно. в разных банках чтоль?
источник

В

Василий in Deus Volt!
Daniil Chernyshev
вот это внезапно. в разных банках чтоль?
Вроде в одном было
источник

В

Василий in Deus Volt!
При том что выяснить общий объём флеша можно программно, а вот размер страницы нельзя
источник

В

Василий in Deus Volt!
Приходится писать функции маппинга
источник

E

Evgen in Deus Volt!
Timur Kuanshkaliev
Ребят, а как сделать чтобы переменные, которые я создаю записывались не в RAM а во FLASH
эмм, написать функцию разблокировать флэш, записать в флэшс заблокировать флэш и ещё лучше всего после этого crc посчитать и записать
источник

E

Evgen in Deus Volt!
Daniil Chernyshev
вот это внезапно. в разных банках чтоль?
размер секторов бывает разный
источник

D

DeJQit in Deus Volt!
Timur Kuanshkaliev
Ребят, а как сделать чтобы переменные, которые я создаю записывались не в RAM а во FLASH
Тут нужно понимать, что хотите. Переменные это то, что мы хотим изменять, а то что не хотим это константы. Ваш кэп.

А тепепь серьезно. Вы хотите, чтобы компилятор статически размещал константы при компиляции во флеш памяти. Я правильно Вас понял?

Нужно посмотреть в сторону скриптов для линкера. Это файл с расщирением .ld, там описываются карты памяти, куда какие данные компилятор положит.

Возможно, в вашем случае в IDE придется просто настроить адреса в памяти.
В худшем найти подходящий скрипт или написать вручную.

P.S.
Тут уже походу ответили про регионы и организацию FLASH памяти
источник

D

DeJQit in Deus Volt!
Можно еще посоветовать почитать про эмуляцию EEPROM на FLASH памяти.

Оказывается что если часто стирать память, то она со временем изнашивается, поэтому надо писать как можно чаще, а стирать реже. И тут еще много других проблем.

Поэтому есть библиотеки, они работают с флешкой и делают вот это вот все. А у вас две функции прочитать и записать

Например у этого автора можно посмотреть

https://github.com/nimaltd/ee
источник

TK

Timur Kuanshkaliev in Deus Volt!
DeJQit
Тут нужно понимать, что хотите. Переменные это то, что мы хотим изменять, а то что не хотим это константы. Ваш кэп.

А тепепь серьезно. Вы хотите, чтобы компилятор статически размещал константы при компиляции во флеш памяти. Я правильно Вас понял?

Нужно посмотреть в сторону скриптов для линкера. Это файл с расщирением .ld, там описываются карты памяти, куда какие данные компилятор положит.

Возможно, в вашем случае в IDE придется просто настроить адреса в памяти.
В худшем найти подходящий скрипт или написать вручную.

P.S.
Тут уже походу ответили про регионы и организацию FLASH памяти
У меня есть 1 мегабайт флешки.

Задача
Мне нужно калибровать компас, для этого я создаю три массива для х, у и z.
Процесс калибровки можно запускать в любое время.

Проблема.
Я инициализирую три глобальных буфера int32_t размером в 20000 значений каждый. Но при компиляции эти глобальные переменные записываются в ram , а я хочу во flash. Ну они не должны быть костантами
источник

TK

Timur Kuanshkaliev in Deus Volt!
DeJQit
Можно еще посоветовать почитать про эмуляцию EEPROM на FLASH памяти.

Оказывается что если часто стирать память, то она со временем изнашивается, поэтому надо писать как можно чаще, а стирать реже. И тут еще много других проблем.

Поэтому есть библиотеки, они работают с флешкой и делают вот это вот все. А у вас две функции прочитать и записать

Например у этого автора можно посмотреть

https://github.com/nimaltd/ee
Спасибо)
источник

A

Aleksandr in Deus Volt!
Не должны быть константами, и одновременно храниться во флеше?
источник

НГ

Нафис Гимранов... in Deus Volt!
Timur Kuanshkaliev
У меня есть 1 мегабайт флешки.

Задача
Мне нужно калибровать компас, для этого я создаю три массива для х, у и z.
Процесс калибровки можно запускать в любое время.

Проблема.
Я инициализирую три глобальных буфера int32_t размером в 20000 значений каждый. Но при компиляции эти глобальные переменные записываются в ram , а я хочу во flash. Ну они не должны быть костантами
ну так создай один массив, по очереди заполняй его и сливай во флеш, как закончишь сбор данных, будешь делать анализ
источник

ВК

Владимир Кузнецов... in Deus Volt!
Могу совранть,  но существуют атрибуты, которые при компиляции и линковке определенияют размещение переменных и функций в памяти. Они имеют вид наподобие attribute((section(".flash")))
источник

ВК

Владимир Кузнецов... in Deus Volt!
Может стоит копнуть в эту сторону
источник

НК

Николай Кольцевой... in Deus Volt!
В обзорах инверторов с чистым синусом заметил, что они и на холостом ходу на выходе имеют красивый синус. Как они этого добиваются? Ведь без нагрузки выходной дроссель ничего не фильтрует.
источник

A

Anton in Deus Volt!
Николай Кольцевой
В обзорах инверторов с чистым синусом заметил, что они и на холостом ходу на выходе имеют красивый синус. Как они этого добиваются? Ведь без нагрузки выходной дроссель ничего не фильтрует.
С чего это?
источник