1) кол-во циклов стирания ограничено (то ли 100, то ли 300, то ли 1000 - во всяком случае меньше чем в еепромках и намного) 2) запись идет не байтами, а словами по 16 бит.
если надо много писать во флэш - советую посмотреть на stm'овский аппноут по реализации eeprom'а (да, надо откусить под это 2 страницы флэша, но оно того стоит думаю).
если надо много писать во флэш - советую посмотреть на stm'овский аппноут по реализации eeprom'а (да, надо откусить под это 2 страницы флэша, но оно того стоит думаю).
Подскажите, а в чём преимущества эмулятора перед прямой записью в память через HAL? Эмулятор вроде использует тот же HAL_FLASH.
Цитата:
1) кол-во циклов стирания ограничено (то ли 100, то ли 300, то ли 1000 - во всяком случае меньше чем в еепромках и намного)
Если память не изменяет, вроде Flash 10'000 циклов, а EEPROM 100'000.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Здравствуйте! Кто нибудь работает сейчас с библиотекой SPL? Имеет ли смысл ее изучать и учиться по ней, ведь 90% уроков именно с ней. Сейчас возникла необходимость сохранить настройки (массив данных на 256 ячеек) во flash. Так чтобы можно было потом написать другую программу и просто обратиться к этому массиву. И у меня есть пара вопросов. Когда я заливаю прошивку, этот массив уже записывается куда-то во флеш, верно? Мне необходимо зафиксировать его так, чтобы он не пересекался с прошивкой. Как это сделать? Записать его на последнюю страницу? Как сделать так, чтобы сразу записать его куда надо, а не перезаписать уже существующий массив? Имеет ли смысл использовать SPL или проще будет работать с регистрами напрямую?
_________________ Я конечно все понимаю, но этого я не понимаю.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Кто нибудь работает сейчас с библиотекой SPL? Имеет ли смысл ее изучать и учиться по ней, ведь 90% уроков именно с ней.
Сам пользуюсь ею, довольно удобно и быстро в разработке. Но бывают моменты, когда она начинает мешать быстродействию или размеру кода. Например, при отправке через SPI быстрее будет пихать данные напрямую в регистр, чем пользоваться функцией SPL. Для работы с флэш я предпочел написать свои процедуры.
bezzabotna писал(а):
Когда я заливаю прошивку, этот массив уже записывается куда-то во флеш, верно?
Смотря как Вы его объявили. Если как константы с инициализацией, то да. Если как указатель, то нет.
bezzabotna писал(а):
Мне необходимо зафиксировать его так, чтобы он не пересекался с прошивкой. Как это сделать? Записать его на последнюю страницу? Как сделать так, чтобы сразу записать его куда надо, а не перезаписать уже существующий массив?
Честно говоря, суть вопроса не совсем ясна. Вам нужно один раз залить во флэш какой-то массив определенных значений, чтобы при последующих прошивках основной программы он оставался на своем месте нетронутый? И чтобы программы получали к нему доступ для чтения? Или программы могут перезаписывать эти значения? У себя, например, я сделал хранение настроек так: 1. Оставил две последние страницы флэш под хранение настроек, линкеру указал размер флэша за вычетом этих двух страниц. То есть программа ни при каких обстоятельствах на них уже не залезет - линкер ругнется на недостаточную память. 2. В программе объявил структуру с переменными настроек в оперативке. При старте программа считывает настройки из последних страниц в эту структуру. В процедуру чтения передаю указатель на эту структуру и внутри этой процедуры этот указатель используется просто как адрес буфера, в который нужно считать из флэш количество байт, равное размеру структуры настроек. 3. В программе предусмотрен сброс настроек, при котором всем переменным структуры в оперативке присваиваются значения по умолчанию. После этого указатель на структуру передается в процедуру записи, которая, аналогично чтению, использует указатель как адрес буфера, из которого нужно записать в последние страницы флэш количество байт, равное размеру структуры. Две страницы - это для повышения ресурса перезаписи. Настройки пишутся поочередно то в первую, то во вторую страницы. Если перезапись настроек не нужна или будет происходить редко, то можно использовать только одну страницу без возни с чередованием страниц.
bezzabotna писал(а):
Имеет ли смысл использовать SPL или проще будет работать с регистрами напрямую?
Если нет жестких требований к скорости исполнения и не упираетесь в ограничение размера прошивки, то SPL, конечно, удобнее. Но работать напрямую с регистрами - более предсказуемо и гибко, на мой взгляд
Кто нибудь работает сейчас с библиотекой SPL? Имеет ли смысл ее изучать и учиться по ней
SPL для STM32 закапывается, у ST бзик по поводу HAL. для STM8 в хидерах есть такой вот комментарий от самих ST:
Код:
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE * TIME.
я склонен понимать его буквально (вообще они там про юридическую сторону вопроса), и использую SPL в основном как то самое "guidance only" - источник для копипасты с последующим выпиливанием всего лишнего.
Спасибо за ответы! Нужно было записать массив с инициализацией как константу. Но теперь у меня проблема как с ним обращаться правильно то есть я объявляю массив и указатели глобально
Код:
const uint16_t A[256] ={0,1,2,3,...}
uint16_t *point0; uint16_t *point1; ....
Потом в функциях и теле программы мне надо к нему этими указателями обращаться, а он выдает ошибку в таких строках:
Код:
point0=&A[0];
и говорит мол сущности *point0 нельзя присвоить значение по адресу &A[0] несовместимые типы данных.
если я напишу :
Код:
*point0=A[0];
скомпилируется, но работать программа не будет.
Как мне правильно указывать на этот массив?
_________________ Я конечно все понимаю, но этого я не понимаю.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения