-
- Возможно, решение будет использование соответствующей ФС, например littefs (там всё с лицензией хорошо). Либо eefs... POV_(93 знак., 15.02.2020 13:12, )
- Сделал что-то функционирующее, просьба сильно не пинать. Dingo(357 знак., 07.02.2020 13:06 - 11.02.2020 07:15)
- зачем предыдущую проверять? как так выбирать целая или нет, то что установлено, оно инвалидно... допустим уставки чегойтотам? мегаБУМ не случится если выставлены параметры из "прошлой жизни"? Не знаю какое у вас ТЗ, но имхо при кривом (условно RED_DRAGON(210 знак., 15.02.2020 00:40 - 00:44)
- Ваше предложение? Я решил, что последняя валидная запись лучше, чем отсутствие любой информации (как и Aleksey_75 ). Если БУМ случится от последней, то почему он не должен случится с исходным(дефолтным) значением? Dingo(669 знак., 15.02.2020 12:14 - 12:20)
- а что говорит ТЗ на дивайс? что должно быть и как себя вести. - RED_DRAGON(15.02.2020 14:12)
- по логике, если просто CRC не совпало, то оно не валидно и считается дефолтным. NAUT(23 знак., 15.02.2020 03:47, youtube)
- Ваше предложение? Я решил, что последняя валидная запись лучше, чем отсутствие любой информации (как и Aleksey_75 ). Если БУМ случится от последней, то почему он не должен случится с исходным(дефолтным) значением? Dingo(669 знак., 15.02.2020 12:14 - 12:20)
- зачем предыдущую проверять? как так выбирать целая или нет, то что установлено, оно инвалидно... допустим уставки чегойтотам? мегаБУМ не случится если выставлены параметры из "прошлой жизни"? Не знаю какое у вас ТЗ, но имхо при кривом (условно RED_DRAGON(210 знак., 15.02.2020 00:40 - 00:44)
- Кстати, в пустыне уже была ссылка на нечто гламурное: SciFi(212 знак., 31.01.2020 20:32 - 20:36, ссылка)
- Отредактируй ссылку - добавь в конец"?", иначе 403 за хотлинкинг - MBedder(31.01.2020 20:34)
- Курсор на строку адреса, потом Enter - у меня открывается. И вообще, кто ищет, тот всегда найдёт. - SciFi(31.01.2020 20:37 - 20:41)
- Отредактируй ссылку - добавь в конец"?", иначе 403 за хотлинкинг - MBedder(31.01.2020 20:34)
- Сначала нужно определиться с количеством перезаписей на всю жизнь разрабатываемого прибора. Соотнести это с количеством перезаписей флеши микроконтроллера и ее организацией (какой минимальный объем информации можно стирать) по даташиту. Nikolaev_Aleksey(152 знак., 31.01.2020 14:54)
- т.к. в ОЗУ надо хранить копию страницы пока она стирается и переписывается, то нафиг надо - NAUT(31.01.2020 12:24)
- а если надо, то нафига эта эмуляция, если это руками проще сделать: скопировал, стер, поменял, записал? - NAUT(31.01.2020 12:24)
- старая запись не стирается, а делается сбойной. Nikolay801_(187 знак., 31.01.2020 18:42 - 18:44)
- Не страницы, а параметров; и необязательно - скопировали на новую страницу со старой последние записи, записали запрашиваемое, стёрли предыдущую. - Dingo(31.01.2020 12:28)
- На F0 делал подобное. Стирание страницы на F407 довольно длительное время занимает, у вас задача позволяет такие паузы в работе? - LightElf(31.01.2020 14:12)
- точно, я перепутал, это в F0 флешка мелкозернистая и быстрая у F1 такая же как F2 и F4 - Nikolay801_(31.01.2020 18:46)
- Распутывайся до конца - F1 идет в одной банде с F0, а не с F2,F4 :-) - il-2(31.01.2020 20:09)
- точно, я перепутал, это в F0 флешка мелкозернистая и быстрая у F1 такая же как F2 и F4 - Nikolay801_(31.01.2020 18:46)
- На F0 делал подобное. Стирание страницы на F407 довольно длительное время занимает, у вас задача позволяет такие паузы в работе? - LightElf(31.01.2020 14:12)
- а если надо, то нафига эта эмуляция, если это руками проще сделать: скопировал, стер, поменял, записал? - NAUT(31.01.2020 12:24)
- Могу посоветовать TI Flash EEPROM Emulation qov46(53 знак., 31.01.2020 12:17)
- Дополню: имел ввиду под тегами запись в странице по некоторому смещению, которое отображает состояние страницы: 0xFFFF - чистая; фиксированный ключ (0xA800 ?) - хранит данные; 0x0000 - стираем (прописать перед стиранием). - Dingo(31.01.2020 12:07, ссылка)
- "Эмуляция EEPROM" -- не нужна. Там якобы "побайтовая" запись (но далеко не у всех EEPROM), no чем она (побайтовая запись) поможет, если пишутся, например, длинные целые числа и запись оборвалась на половине (питание кончилось, произошёл сброс fk0(254 знак., 31.01.2020 11:57)
- Задачу можно и нужно упростить. Nikolay801_(473 знак., 31.01.2020 11:49)
- в моём случае - параметры; однако, хочется не всю пачку, а полями(унверсально), но в текущем применении достаточно будет и одним блоком, забирая последний целый. - Dingo(31.01.2020 12:10)
- На самом деле -- это одна вещь. Конфигурацию можно так же писать "по кругу", чем обеспечивается транзакционность. Запись или записана с верной CRC, или можем читать предыдущий вариант (в случае, когда более новая недозаписана, каждая запись имеет fk0(119 знак., 31.01.2020 11:54)
- серийный номер не нужен, более свежая версия записи всегда лежит ближе к концу страницы. - LightElf(31.01.2020 14:14)
- +1. Так и делаю. В механизм можно встроить гарантию целостности записанных данных, и это будет проще, чем прилеплять его поверх собственно эмуляции eeprom. - SciFi(31.01.2020 11:52)
- Я сделал свою реализацию. A.L.(960 знак., 31.01.2020 11:49)
- Скинул в Upload. - A.L.(31.01.2020 12:14, ссылка)
- Спасибо, поковыряю. Описание заинтересовало. - Dingo(31.01.2020 12:21)
- Скинул в Upload. - A.L.(31.01.2020 12:14, ссылка)
- есть у меня такое в своем sdk - могу в виде хидера выдернуть, если c++ допустим в проекте, то в любом месте кода это выглядеть будет так klen(4547 знак., 31.01.2020 11:43 - 11:46)
- C++ не подойдёт - проект plain C. - Dingo(31.01.2020 11:53)
- жаль - бл бы корокий и быстрый бы код, с чистым С теперь так выходит только на примитивных алгоритмах. жаль. но могу обернуть врапером и в виде либы оформить - будеш С-функции дергать. хотя тут самому писать - 15 минут писатьб 45 минут отлаживать klen(22 знак., 31.01.2020 11:56)
- А кидайте. Спасибо! Если даже мне не подойдёт, то может кому другому ваша наработка полезна будет. - Dingo(31.01.2020 12:24)
- жаль - бл бы корокий и быстрый бы код, с чистым С теперь так выходит только на примитивных алгоритмах. жаль. но могу обернуть врапером и в виде либы оформить - будеш С-функции дергать. хотя тут самому писать - 15 минут писатьб 45 минут отлаживать klen(22 знак., 31.01.2020 11:56)
- C++ не подойдёт - проект plain C. - Dingo(31.01.2020 11:53)
- А зачем тебе всякие эмуляции. Все сводится к тому, что надо одну страницу Flash выделить для хранения данных (типа - это будет EEPROM). При этом надо обеспечить, чтобы в эту страницу не попал код самой программы. Ну и особенность, если хочешь User_(315 знак., 31.01.2020 11:23)
- Про место во флеше линкеру обяснил. Писать до конца, потом на следующую, и только потом стирать заполнившуюся. Dingo(170 знак., 31.01.2020 11:30)
- Одна из главных задач алгоритма эмуляции - не ударить грязью в лицо, если питание вырубилось при записи или стирании (второе сильно вероятнее из-за длительности, но учитывать надо и то, и другое). Отсюда волшебные числа, контрольные суммы, кто во SciFi(316 знак., 31.01.2020 11:38 - 11:40)
- Всё зависит от задачи. У меня один раз, после калибровки, записать коэффициенты в сервисном режиме. Там питание и т.д. не влияет, т.к. файл с коэффициентами лежит в компьютере и после записи проверяется её правильность и CRC тоже присутствует. User_(63 знак., 31.01.2020 11:39)
- Про место во флеше линкеру обяснил. Писать до конца, потом на следующую, и только потом стирать заполнившуюся. Dingo(170 знак., 31.01.2020 11:30)
- Кстати, большая длительность стирания сектора не смущает? Внешняя spi flash для таких дел сильно лучше подходит. - SciFi(31.01.2020 11:12)
- Смущает, но учтена: приемлема. Как раз хотелось без дополнительных элементов обойтись, иначе бы проблема решилась внешней eeprom. - Dingo(31.01.2020 11:23 - 11:32)
- кстати, для таких вещей мелкие ст приятней, сектора мелкие и трутся быстро. STM32f0XX которые Nikolay801_(47 знак., 31.01.2020 12:00 - 18:52)
- Смущает, но учтена: приемлема. Как раз хотелось без дополнительных элементов обойтись, иначе бы проблема решилась внешней eeprom. - Dingo(31.01.2020 11:23 - 11:32)