STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
smacorp
Друг Кота
Сообщения: 3481
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Re: STM32 новичку в ARM что к чему

Сообщение smacorp »

Поменьше писать - максимально редко и, возможно, максимально сжимая. А то что пишется, сдвигать по кольцу. И ничего большего программно не придумать.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Реклама
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="ARV",url="/forum/viewtopic.php?p=4689784#p4689784"]В устройстве есть STM32L052 и два драйвера RS485. Не считая клемм и светодиодов.

Данные это разные параметры установки, которые воемя от времени оператор меняет. Это и байты, и 16-битные, и float-ы... Разные. И нет никаких закономерностей их изменения, кроме того, что все они вводятся вручную и приходят в МК по модбасу. Т.е. никогда не будет (кроме первой инициализации) записи чаще, чем 1 раз в несколько секунд, т.к. физически быстрее ввести данные невозможно.[/uquote]Самый простейший способ, который сразу приходит в голову:
В начале EEPROM храним сами переменные (предположим = 10 байт), а в оставшейся части - журнал изменений. При получении нового значения переменной - пишем его в журнал (добавляя к нему идентификатор). Когда журнал доходит до края EEPROM и поступает новое значение - все данные из журнала (последнее значение каждой переменной) переписываем в начальный блок переменных. Журнал стираем чтобы потом начать его заполнение вновь.
Вот и всё. Ресурс уже увеличен на величину журнала.

Кстати - кроме уменьшения износа. этот способ также даёт устойчивость к сбоям питания. В виде бонуса. А не как вы привыкли - на авось.

Также можно разбить EEPROM на ячейки одинакового размера. С идентификаторами содержимого и счётчиками записей. И писать переменные в них. Там где минимальный счётчик. И периодически проводить процедуру выравнивания для всего массива - переписывать давно лежащие без движения ячейки (у которых счётчик износа значительно меньше максимального из других ячеек) в более изношенные ячейки. Типа как в SSD. Но этот способ сложнее журналирования.
Последний раз редактировалось jcxz Вт мар 04, 2025 20:52:34, всего редактировалось 2 раза.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

Прошу подробнее, что вы подразумеваете под журналом? Что туда писать?
Я как-то не уловил, как потом читать данные? Из журнала, разыскивая самое свежее значение? Тогда нафига вообще первый блок?
Последний раз редактировалось ARV Вт мар 04, 2025 20:32:32, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: STM32 новичку в ARM что к чему

Сообщение Sergi »

У себя проверяю изменения с копией записи епром раз в минуту. При их наличии перезаписываю со сдвигом. Данных мало и 1кбайт записал за 1,5 года.
Реклама
Эиком - электронные компоненты и радиодетали
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="ARV",url="/forum/viewtopic.php?p=4689804#p4689804"]Прошу подробнее, что вы подразумеваете под журналом? Что туда писать?[/uquote]Пишем: "Новое значение переменной X равно Y".
Вроде как очевидно. Каждой переменной дать ID (имя). Числовое. Запись закодировать COBS и записать в журнал по-байтно.
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

Идея с журналом занятная. Но интуитивно представляется ужасно геморной в реализации... С учетом того, что значения-то разные по длине... Это целая файловая система получается.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="ARV",url="/forum/viewtopic.php?p=4689808#p4689808"]Идея с журналом занятная. Но интуитивно представляется ужасно геморной в реализации...[/uquote]Вот ваш предшественник видимо думал также. И просто забил болт. 8)
[uquote="ARV",url="/forum/viewtopic.php?p=4689808#p4689808"]С учетом того, что значения-то разные по длине... Это целая файловая система получается.[/uquote]Ничего там сложного нет: байт_идентификатора, за ним - байты переменной. Итого общая длина записи = 2...5 байт. Кодируем COBS получаем = 3...6 байт. Дописывает в хвост журнала. С отступом в один байт от предыдущей записи журнала. куда уж проще?

При старте программы создаём в ОЗУ копию текущих данных: читаем сами начальные данные с EEPROM, затем пробегаемся по журналу, внося изменения согласно каждой записи журнала. Все модификации (при поступлении новые значений) производим над копией данных в ОЗУ, а потом - пишем в журнал.

В качестве разделителей записей журнала (кодированных COBS) лучше использовать стёртое состояние ячеек. Если оно =0 - всё ок, пишем записи COBS как есть. Если стёртое значение ячеек == 0xFF, то после COBS-кодирования инвертируем данные кодированные COBS перед записью в EEPROM. Ну и обратно - перед COBS-декодированием.
Последний раз редактировалось jcxz Вт мар 04, 2025 20:46:47, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

Мой предшественник так не думал... Но то, как он эту проблему решал, меня немного расстроило... И я решил переделать.

За идею с журналом спасибо, я буду в этом направлении думать.

Получается, первичный блок вообще не нужен: начальную инициализацию делаем в виде записей журнала, и далее всю память по кругу заполняем журналом... Как-то так...

Добавлено after 2 minutes 56 seconds:
Даже начальную инициализацию можно вообще в коде прописать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="ARV",url="/forum/viewtopic.php?p=4689817#p4689817"]Получается, первичный блок вообще не нужен: начальную инициализацию делаем в виде записей журнала, и далее всю память по кругу заполняем журналом... Как-то так...[/uquote]Нет. Первичный блок нужен, если у вас переменные изменяются с разной частотой. Может ведь оказаться, что одна переменная изменилась 100 раз, а другие - ни одного. И тогда записи одной часто меняющейся переменной, в конце концов вытеснят из журнала записи других переменных. Вот для этого и нужно при каждом полном заполнении журнала скидывать все данные в начальное хранилище. А потом - стирать журнал и по новой.

Я выше неправильно написал - это не кольцевой журнал, а линейный. От одного края свободного пространства EEPROM до другого края. "Заполнение журнала" -это достижение им конца выделенного под него пространства. После чего следует сброс его содержимого в Начальное Хранилище и стирание журнала.
За один цикл прохождения журнала переписываются по разу все ячейки EEPROM - износ их выровнен.
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: STM32 новичку в ARM что к чему

Сообщение Sergi »

Не знаю как в L0, но во внешних лучше писать стирать страницами. По первому байту страницы (не ff) можно быстро найти крайнюю запись.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="Sergi",url="/forum/viewtopic.php?p=4689823#p4689823"]Не знаю как в L0, но во внешних лучше писать стирать страницами. По первому байту страницы (не ff) можно быстро найти крайнюю запись.[/uquote]Конечно. Для внешних. Там можно и по 256КБ-секторам искать. Чтобы быстрее. И кольцо сделать в несколько десятков МБ размером.
Но ARV говорил про внутреннюю EEPROM.
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: STM32 новичку в ARM что к чему

Сообщение Sergi »

По времени запись отдельных байт по очереди может выйти дольше чем страницы сразу. Я по BOD не успевал.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

А, кстати, BOD в stm32, так же, как и в AVR, тупо давит ресет, или может в еще безопасный момент прерывание сгенерировать?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: STM32 новичку в ARM что к чему

Сообщение Sergi »

Может. Например в G4 заведен выход монитора питания на EXTI line16.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

Ну... G4... я про свой... Так-то в них много чего может быть...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: STM32 новичку в ARM что к чему

Сообщение Sergi »

Надо смотреть в RM Programmable voltage detector (PVD) и Peripheral Voltage Monitoring (PVM) если есть.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение Аlex »

[uquote="jcxz",url="/forum/viewtopic.php?p=4689750#p4689750"]Не решается. Потому как сразу после иголки вызвавшей сброс, может воспоследовать уже обычное выключение.[/uquote]Прикольно. Сначала Вы пишете фразу "без выкл.питания", и я с её учётом делаю вывод, описывая только этот момент. Но потом Вы резко переобуваетесь в воздухе, дописывая причину, которую исключили сами же постом выше :))) :))) :)))
Я же даже в цитате выделил жирным Вашу фразу :)))
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

[uquote="Sergi",url="/forum/viewtopic.php?p=4689841#p4689841"]Надо смотреть в RM Programmable voltage detector (PVD) и Peripheral Voltage Monitoring (PVM) если есть.[/uquote]попробую иначе: если в CubeMX не найду ничего с BOD связанного, значит... :))) все РМы не перечитать никогда...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="Аlex",url="/forum/viewtopic.php?p=4689851#p4689851"]Прикольно. Сначала Вы пишете фразу "без выкл.питания", и я с её учётом делаю вывод, описывая только этот момент. Но потом Вы резко переобуваетесь в воздухе, дописывая причину, которую исключили сами же постом выше :))) :))) :)))[/uquote]В чём именно "переобуваюсь"?? не понял...
И ничего я не исключал. Сперва происходит сброс процессора без выключения питания, просто сброс от помехи. Потом, с малым интервалом после, пока программа стартует, происходит выкл.питания.
В чём здесь переобувка??? :dont_know:
Сброс от помехи не исключает же возможность выключения питания сразу после него? И старт программы происходит не мгновенно.
Аватара пользователя
Andrey_B
Сверлит текстолит когтями
Сообщения: 1101
Зарегистрирован: Пт апр 09, 2010 16:06:38
Откуда: Тула

Re: STM32 новичку в ARM что к чему

Сообщение Andrey_B »

[uquote="jcxz",url="/forum/viewtopic.php?p=4689821#p4689821"]Я выше неправильно написал - это не кольцевой журнал, а линейный.[/uquote]
В запись журнала, кроме идентификатора переменной и её значения, можно писать ещё и счётчик номера записи. По этому счётчику можно будет определять последнюю запись в журнале при включении питания. Тогда журнал можно сделать кольцевым и его не надо будет очищать целиком за раз. Для предотвращения ошибок определения (после переполнения кольца), ёмкость этого счетчика должна быть больше максимального количества записей журнала.
Ответить

Вернуться в «ARM»