-
- Могу ld-скриптом поделиться: выделяет 2кБ для хранения настроек и
весь оставшийся свободный флеш на логи. Eddy_Em(86 знак., 26.05.2023 16:53)
- Эдик, у нас с тобой принципиально разные понятия о сложностях. Мне
гораздо проще все делать напрямую, минуя всякий скриптовый мусор.
Сохранять нужно всего ДВА БАЙТА. Это пин-код авторизации
устройства. При авторизации используется номер устройства и старый
пин-код. На основании них генерируется новый пин-код. Пользователь
сообщает администратору первые два числа и получает третье. Вводит
в форму ПО управления устройством и получает очередной месяц
использования. То есть my504(90 знак., 27.05.2023 11:46)
- Скрипт лишь выделяет секцию. Eddy_Em(124 знак., 27.05.2023 11:48)
- Мне иногда кажется, что ты бредишь... В чем проблема выделения
секции? Зачем скорость при поиске записи? Ты отдаешь себе отчет в
скорости самой записи (времени работы хардварного автомата этой
записи)? Открой даташит на МК и убей себя апстену. ))))) - my504(27.05.2023 19:55)
- При линейном поиске МК грузится две-три секунды, пока сотню кБ
флеша перелопатит с шагом в 32..64Б. Eddy_Em(72 знак., 27.05.2023 21:12)
- Линейном поиске ЧЕГО? Ты сначала напридумываешь всяких глупостей, а
потом решаешь странные проблемы... 100КБ флеша - это 25К шагов
поиска. Делим обозначенные тобой две-три секунды на 25000 и
получаем 80...120 мкс на одно слово. Эдик, ты и впрямь такой идиот
или прикидываешься? У тебя цикл чтения ОДНОГО слова флеша
составляет 5...10 тыс. машинных циклов? - my504(27.05.2023 21:39)
- А с какого перепоя операция чтения из флеша стала бесплатной, как
из ОЗУ? - Eddy_Em(27.05.2023 22:27)
- Минимальное время доступа к флешу составляет примерно 30 нс. Прежде
чем писать очередную свою ахинею, ты бы хоть попробовал посмотреть
осциллографом реальное время перебора флеша при чтении. Обычным
ногодрыгом. Поднял ногу на входе в перебор, опустил на выходе. my504(1 знак., 28.05.2023 04:47, картинка)
- Wait states - это задержка первоначального доступа. При линейном
чтении, за счёт ширины шины доступа к флеш, все последующие адреса
читаются на полной скорости. У вас табличка - latency а не clock
rate. - Nikolay_Po(28.05.2023 10:41)
- Опыт подсказывает, что нет. По крайней мере для кода это не так.
Поэтому при 3WS при реализации функции задержки нопами скорость
падает примерно в 2,3...2,5 раза. Приходится это учитывать
множителем аргумента, чтобы откалибровать 1 мкс. my504(480 знак., 28.05.2023 12:54 - 13:01)
- Вопрос возник в контексте именно линейного чтения. Это в коде с ветвлениями не угадаешь. А при линейном чтении, у STM32 будет полная скорость доступа, по крайней мере до STM32F4 (хотя специально не изучал, лучше перепроверить). У dsPIC да, встречал. Делал фильтры на 33EP. - Nikolay_Po(29.05.2023 09:26)
- Функция задержки нопами? Ужос. Такой грех будет трудно смыть... - SciFi(28.05.2023 12:58)
- Это у вас - троеперстных - грех, а у нас - старообрядцев -
богоугодное деяние. - Kpoк(28.05.2023 13:21)
- +1. Но будем иметь ввиду особенности современных чипов. - Nikolay_Po(29.05.2023 09:27)
- Я реализую на нопах МИКРОсекундные задержки. Например для
формирования строба CS для SPI или подобных вещей. Блокировка кода
практически незаметна. - my504(28.05.2023 13:04)
- Для этого DWT->CYCCNT весьма хорош. - SciFi(28.05.2023 14:57)
- Спасибо! - Nikolay_Po(29.05.2023 09:27)
- Хорош то он хорош, но является фичей STM. По нынешним временам
неактуально. Поэтому альтернативы простому циклу с калибровкой под
архитектуру/проект не видно. - my504(28.05.2023 15:25)
- Любой таймер в непрерывном режиме. Дополнительно ещё и прерывания
можно использовать под свои задачи, просто каждый раз пересчитывать
временную точку. - Dingo(29.05.2023 05:34)
- Когда нужна задержка на, тактов, 6, таймером будет не эффективно. - Nikolay_Po(29.05.2023 09:29)
- Согласен, на единицы тактов nop-ами лучше. Но следует пересчитывать
под конкретную частоту. - Dingo(29.05.2023 09:58)
- может
иконамибарьерами? - Vit(29.05.2023 14:32) - В Матлабе. - Kpoк(29.05.2023 14:07)
- может
- Как правило, при формировании строба требования к задержке "не
менее N микросекунд". Если получится N+1..2, нет повода горевать.
Экстремальная эффективность нужна крайне редко, вот и не надо
заморачиваться заранее, а то не останется времени на отдых... SciFi(1 знак., 29.05.2023 09:37, картинка)
- Такое я вообще машиной состояний делаю, пусть себе в фоне крутится, производительности не мешает... - Nikolay_Po(29.05.2023 09:41)
- Согласен, на единицы тактов nop-ами лучше. Но следует пересчитывать
под конкретную частоту. - Dingo(29.05.2023 09:58)
- Когда нужна задержка на, тактов, 6, таймером будет не эффективно. - Nikolay_Po(29.05.2023 09:29)
- Вроде как он фича кортексов M3 и выше. Емнип, на luminary я его
тоже юзал. А вот что на M0 его нет - то я щетаю косяк арма (вместе
с VTOR и BASEPRI) - LightElf(28.05.2023 16:49)
- на M23 тоже нет - Vit(28.05.2023 23:58)
- Тута пишут что есть (страница 7-9) LightElf(33 знак., 29.05.2023 12:36, ссылка)
- Только для членов профсоюза. - SciFi(29.05.2023 12:40)
- Тута пишут что есть (страница 7-9) LightElf(33 знак., 29.05.2023 12:36, ссылка)
- на M23 тоже нет - Vit(28.05.2023 23:58)
- Ну это уже совсем от безысходности. Когда и таймеры кончились, и
вообще вариантов не осталось. Не дай бог так оголодать... - SciFi(28.05.2023 15:43)
- У меня таймеры заканчиваются в каждом втором проекте. Делать из них
микросекундные задержки совсем некуртуазно. Я даже не понимаю какой
с этого профит. Другое дело - таймер больших задержек. Под это я
стандартно выделяю отдельный простой таймер (иногда SysTick) и он
генерирует прерывания с нужным мне дискретом (обычно 10 мс). - my504(28.05.2023 15:54)
- Я давно обнаружил, что большинство вопросов времени решаются в
стиле "start = current_time(); while (current_time() - start <
BLAH_BLAH) { /* wait */ }". То есть один таймер (обычно
DWT->CYCCNT) решает почти все такие вопросы. Никаких
регулярных прерываний. - SciFi(28.05.2023 16:52)
- Либо задержка блокирующая, либо работает через прерывания. Делать
блокирующие задержки значительной длительности - плохая идея. А
маленькие можно и традиционным способом через программный счетчик
циклов. По любому для них особой точности не получить и она не
требуется. - my504(28.05.2023 17:15)
- Да, по приведённому коду - блокирующая. Если без ОС - то автор, предположительно, понимает что делает: нет чего-то, что надо отслеживать на интервале такого замера; если ОС - то на крайний случай вытеснится задача. К тому же прерывания тоже имеют время реакции, сохранения на стек, загрузки из стека; так что для микросекундных - вполне вариант при определённых условиях. - Dingo(29.05.2023 04:52)
- Неблокирующая. Main Loop + protothreads. Удивительно, но решает
почти все мои вопросы. В редких случаях, когда нужна точная
времянка, есть аппаратные таймеры и прерывания. - SciFi(28.05.2023 17:32)
- Тогда у вас скорее не while(), a PT_WAIT_WHILE() :о) - Dingo(29.05.2023 04:55)
- Строго говоря, можно и while (...) { PT_YIELD(...); } :-) - SciFi(29.05.2023 09:40)
- Это частности; существенно то, что вы умолчали об используемом
вызове ОС, но утверждали, что неблокирующий и оно так работает. - Dingo(29.05.2023 09:57)
- Арестуйте меня :-) - SciFi(29.05.2023 09:58)
- Не дождётесь. ;-) - Dingo(29.05.2023 10:02)
- Арестуйте меня :-) - SciFi(29.05.2023 09:58)
- Это частности; существенно то, что вы умолчали об используемом
вызове ОС, но утверждали, что неблокирующий и оно так работает. - Dingo(29.05.2023 09:57)
- Строго говоря, можно и while (...) { PT_YIELD(...); } :-) - SciFi(29.05.2023 09:40)
- Тогда у вас скорее не while(), a PT_WAIT_WHILE() :о) - Dingo(29.05.2023 04:55)
- Либо задержка блокирующая, либо работает через прерывания. Делать
блокирующие задержки значительной длительности - плохая идея. А
маленькие можно и традиционным способом через программный счетчик
циклов. По любому для них особой точности не получить и она не
требуется. - my504(28.05.2023 17:15)
- Я давно обнаружил, что большинство вопросов времени решаются в
стиле "start = current_time(); while (current_time() - start <
BLAH_BLAH) { /* wait */ }". То есть один таймер (обычно
DWT->CYCCNT) решает почти все такие вопросы. Никаких
регулярных прерываний. - SciFi(28.05.2023 16:52)
- У меня таймеры заканчиваются в каждом втором проекте. Делать из них
микросекундные задержки совсем некуртуазно. Я даже не понимаю какой
с этого профит. Другое дело - таймер больших задержек. Под это я
стандартно выделяю отдельный простой таймер (иногда SysTick) и он
генерирует прерывания с нужным мне дискретом (обычно 10 мс). - my504(28.05.2023 15:54)
- Любой таймер в непрерывном режиме. Дополнительно ещё и прерывания
можно использовать под свои задачи, просто каждый раз пересчитывать
временную точку. - Dingo(29.05.2023 05:34)
- CS в тех же STM32 аппаратно реализуется. Другое дело, что эту ногу
зачастую приходится под более нужный интерфейс мспользовать и
реально щёлкать ногодрыгом... - Eddy_Em(28.05.2023 14:04)
- она аппаратно дергается на каждый байт? Нафиг тогда. Мне надо чтобы
после 16 байт (к примеру) или 9, или 29 - Лaгyнoв(28.05.2023 14:27)
- Такой CS в SPI есть у Микрочипа в относительно новых МК. Там и длина слова выбирается с шагом 1 бит и длина CS независимо контролируется с таким же шагом. Причем запуск CS отдельный. Поэтому можно установить нужное опережение. - my504(28.05.2023 15:10)
- У, ну, ясен пень, так оно не работает. Так - только ногодрыгом... Eddy_Em(304 знак., 28.05.2023 14:31)
- А ты сам лично использовал эту самую CS/SS или просто потрындеть
решил? )))) - my504(28.05.2023 14:15)
- Неа. Мне она только один раз нужна была - для работы с TFT. Но на
стадии трассировки платы я не знал, что протокол жёстко требует
стробирования CS, т.к. в даташите ничего такого не было. В итоге
пришлось ногой, которую я на программный резет хотел использовать,
дрыгать. Eddy_Em(84 знак., 28.05.2023 14:26)
- Вот когда сделаешь - расскажешь... - my504(28.05.2023 14:48)
- Неа. Мне она только один раз нужна была - для работы с TFT. Но на
стадии трассировки платы я не знал, что протокол жёстко требует
стробирования CS, т.к. в даташите ничего такого не было. В итоге
пришлось ногой, которую я на программный резет хотел использовать,
дрыгать. Eddy_Em(84 знак., 28.05.2023 14:26)
- она аппаратно дергается на каждый байт? Нафиг тогда. Мне надо чтобы
после 16 байт (к примеру) или 9, или 29 - Лaгyнoв(28.05.2023 14:27)
- +1, так делаю 5 мкс для LATCH в 595 - Лaгyнoв(28.05.2023 13:41)
- Для этого DWT->CYCCNT весьма хорош. - SciFi(28.05.2023 14:57)
- Только пост и молитва! - LightElf(28.05.2023 13:03)
- Это у вас - троеперстных - грех, а у нас - старообрядцев -
богоугодное деяние. - Kpoк(28.05.2023 13:21)
- Опыт подсказывает, что нет. По крайней мере для кода это не так.
Поэтому при 3WS при реализации функции задержки нопами скорость
падает примерно в 2,3...2,5 раза. Приходится это учитывать
множителем аргумента, чтобы откалибровать 1 мкс. my504(480 знак., 28.05.2023 12:54 - 13:01)
- Wait states - это задержка первоначального доступа. При линейном
чтении, за счёт ширины шины доступа к флеш, все последующие адреса
читаются на полной скорости. У вас табличка - latency а не clock
rate. - Nikolay_Po(28.05.2023 10:41)
- С того момента как были придуманы кэши, акселераторы и увеличенные разрядности шины. - VladislavS.(27.05.2023 22:51)
- Минимальное время доступа к флешу составляет примерно 30 нс. Прежде
чем писать очередную свою ахинею, ты бы хоть попробовал посмотреть
осциллографом реальное время перебора флеша при чтении. Обычным
ногодрыгом. Поднял ногу на входе в перебор, опустил на выходе. my504(1 знак., 28.05.2023 04:47, картинка)
- А с какого перепоя операция чтения из флеша стала бесплатной, как
из ОЗУ? - Eddy_Em(27.05.2023 22:27)
- Линейном поиске ЧЕГО? Ты сначала напридумываешь всяких глупостей, а
потом решаешь странные проблемы... 100КБ флеша - это 25К шагов
поиска. Делим обозначенные тобой две-три секунды на 25000 и
получаем 80...120 мкс на одно слово. Эдик, ты и впрямь такой идиот
или прикидываешься? У тебя цикл чтения ОДНОГО слова флеша
составляет 5...10 тыс. машинных циклов? - my504(27.05.2023 21:39)
- При линейном поиске МК грузится две-три секунды, пока сотню кБ
флеша перелопатит с шагом в 32..64Б. Eddy_Em(72 знак., 27.05.2023 21:12)
- Мне иногда кажется, что ты бредишь... В чем проблема выделения
секции? Зачем скорость при поиске записи? Ты отдаешь себе отчет в
скорости самой записи (времени работы хардварного автомата этой
записи)? Открой даташит на МК и убей себя апстену. ))))) - my504(27.05.2023 19:55)
- Скрипт лишь выделяет секцию. Eddy_Em(124 знак., 27.05.2023 11:48)
- Для Keil его ценность... - VladislavS.(26.05.2023 19:06)
- А что, там все по-другому? Eddy_Em(26 знак., 26.05.2023 20:59)
- Прикинь. И зачем IDE с собственной системой управления проектом
makefile? - VladislavS.(27.05.2023 11:00)
- Как все убого... Eddy_Em(110 знак., 27.05.2023 11:50)
- Это твои больные фантазии. Вот у меня проект, который из одних исходников собирается Keil, IAR, VisualGDB (Visual Studio) и makefile. VladislavS.(1 знак., 27.05.2023 12:51, картинка)
- Как все убого... Eddy_Em(110 знак., 27.05.2023 11:50)
- Прикинь. И зачем IDE с собственной системой управления проектом
makefile? - VladislavS.(27.05.2023 11:00)
- А что, там все по-другому? Eddy_Em(26 знак., 26.05.2023 20:59)
- Эдик, у нас с тобой принципиально разные понятия о сложностях. Мне
гораздо проще все делать напрямую, минуя всякий скриптовый мусор.
Сохранять нужно всего ДВА БАЙТА. Это пин-код авторизации
устройства. При авторизации используется номер устройства и старый
пин-код. На основании них генерируется новый пин-код. Пользователь
сообщает администратору первые два числа и получает третье. Вводит
в форму ПО управления устройством и получает очередной месяц
использования. То есть my504(90 знак., 27.05.2023 11:46)
- (вопрос в конце топика) Просветите пожалуйста неуча: какой смысл в
эмуляции EEPROM в сей сущности и так "конденсаторной памяти"? Но
огорчённой секторальной архитектурой прямого доступа? Тупо
пользуюсь флэш памятью по прямому назначению. Храня "иниты"
где-нибудь у потолка. И для того, чтобы перезаписать один байт
стираю нах весь сектор и восстанавливаю уже с нужным байтом - иначе
никак. А есть и ARMы с аппаратной быстрой EEPROM для специальных
нужд быстрой перезаписи. bnb62(249 знак., 25.05.2023 13:14 - 18:34)
- Обычно флеши имеют небольшое допустимое число стираний. Вот и
стараются продлить ресурс. - LightElf(25.05.2023 14:52)
- обычно иниты это несколько байт-десятков байт. Я просто перемещаю
новые значения по телу 2К-сектора. дохожу до конца и весь его
стираю. В результате стирание происходит через несколько сотен раз
смены информации. А если макс. число стираний 1000, то и всего уже
сотни тысяч. - Лaгyнoв(25.05.2023 17:23)
- я вот один раз написал библиотеку эмуляции EEPROM и теперь мне пофиг это параметры инициализации или часто меняющиеся параметры. Использовать можно как на внешней, так и на внутренней флэш. И главное не ограничен в размерах как было на пик18 1024 байта и все. abivan(1 знак., 25.05.2023 19:40, картинка)
- Разные бывают варианты. Например ряд параметров, которые могут
меняться независимо и некоторые - значительно чаще, чем другие. - LightElf(25.05.2023 19:21)
- Что их разнит и как определят быть не в ОЗУ процессора? Зачем
неоправданно циклически сохранять? Случай сохранения важняка -
прерывание от службы аппарата безопасности? Он нативно осуществлен
даже в самых примитивных процессорах :))) - bnb62(25.05.2023 19:32)
- Не у всех батарейное питание. - LightElf(25.05.2023 19:38)
- Есть чипы EERAM от мелкочипа. Само скидывает ОЗУ во флеш, когда питание проседает. SciFi(1 знак., 25.05.2023 19:35, ссылка)
- Что их разнит и как определят быть не в ОЗУ процессора? Зачем
неоправданно циклически сохранять? Случай сохранения важняка -
прерывание от службы аппарата безопасности? Он нативно осуществлен
даже в самых примитивных процессорах :))) - bnb62(25.05.2023 19:32)
- Кто бы сомневался в состоятельности опытных воплотителей! В том и фишка, что применяем диапозитарную валидацию вводных! :))) - bnb62(25.05.2023 19:05)
- Что-то не то ответили. По ресурсу = прописи в документах. Как и
зачем эмулировать память с быстрым доступом во Флеши памяти
программ? - bnb62(25.05.2023 14:57)
- Итак дано: есть проц с флешем, но без еепром. Нужно что-то типа
еепром для хранения каких-то параметров. Можно сохранять во флеш
как есть, но это 1) медленно, бо стирание целой страницы 2) есть
шанс сбоя между стиранием страницы и записью 3) часто флеш имеет
низкий ресурс перезаписи (например 10тыс - уже отлично, а бывает и
1000 и даже 100). В то же время объем параметров невелик и в одну
страницу флеша их можно много раз поместить, соответственно снизить
число стираний. - LightElf(25.05.2023 19:13)
- А можно записывать только bindiff. Скажем, пару байт за раз (если
это инкремент счётчика наработки, например). - SciFi(25.05.2023 19:16)
- Если имеется честный флеш, то счетчик наработки можно в виде
битовой карты сделать, типа раз в минуту обнулять очередной битик
;-) - LightElf(25.05.2023 19:24)
- Чем дальше, тем непонятнее, какой флеш честный. Кто-то пишет про
ограничение числа записей в страницу. Я уже боюсь побайтово писАть.
Фобия, блин... - SciFi(25.05.2023 19:26)
- Эта да, кругом обман. У STM32F0 честно писали, что внутре флеша
неонкаECC и второй раз в ячейку можно писать только 0x00, иначе опа. - LightElf(25.05.2023 19:34)- Даже не это. Кто-то пугает "запись одного байта дёргает целую
строку" или что-то типа того. Как там ресурс плывёт, вообще
непонятно. - SciFi(25.05.2023 19:37)
- А запись, емнип, вообще же на ресурс не влияет - только стирание.
Хотя да, нонеча не поймешь уже. - LightElf(25.05.2023 19:39)
- Вот ужастики на ночь: SciFi(524 знак., 25.05.2023 19:47, ссылка)
- Жудь кокойты. Электроны экономят похоже. - LightElf(26.05.2023 12:42)
- Вот ужастики на ночь: SciFi(524 знак., 25.05.2023 19:47, ссылка)
- А запись, емнип, вообще же на ресурс не влияет - только стирание.
Хотя да, нонеча не поймешь уже. - LightElf(25.05.2023 19:39)
- Даже не это. Кто-то пугает "запись одного байта дёргает целую
строку" или что-то типа того. Как там ресурс плывёт, вообще
непонятно. - SciFi(25.05.2023 19:37)
- Эта да, кругом обман. У STM32F0 честно писали, что внутре флеша
- Чем дальше, тем непонятнее, какой флеш честный. Кто-то пишет про
ограничение числа записей в страницу. Я уже боюсь побайтово писАть.
Фобия, блин... - SciFi(25.05.2023 19:26)
- Если имеется честный флеш, то счетчик наработки можно в виде
битовой карты сделать, типа раз в минуту обнулять очередной битик
;-) - LightElf(25.05.2023 19:24)
- А можно записывать только bindiff. Скажем, пару байт за раз (если
это инкремент счётчика наработки, например). - SciFi(25.05.2023 19:16)
- Может потому, что настоящей Епром нет. Вот и приходится эмулировать. - IBAH(25.05.2023 15:06)
- Итак дано: есть проц с флешем, но без еепром. Нужно что-то типа
еепром для хранения каких-то параметров. Можно сохранять во флеш
как есть, но это 1) медленно, бо стирание целой страницы 2) есть
шанс сбоя между стиранием страницы и записью 3) часто флеш имеет
низкий ресурс перезаписи (например 10тыс - уже отлично, а бывает и
1000 и даже 100). В то же время объем параметров невелик и в одну
страницу флеша их можно много раз поместить, соответственно снизить
число стираний. - LightElf(25.05.2023 19:13)
- обычно иниты это несколько байт-десятков байт. Я просто перемещаю
новые значения по телу 2К-сектора. дохожу до конца и весь его
стираю. В результате стирание происходит через несколько сотен раз
смены информации. А если макс. число стираний 1000, то и всего уже
сотни тысяч. - Лaгyнoв(25.05.2023 17:23)
- Обычно флеши имеют небольшое допустимое число стираний. Вот и
стараются продлить ресурс. - LightElf(25.05.2023 14:52)
- 1. Возьмите библиотеку а-ля uwlkv lloyd(401 знак., 25.05.2023 15:03)
- Я бы ва скаттер-файле эту страницу исключил из общей памяти, доступной линкеру, и работал с ней по указателю (адресу). - VladislavS.(25.05.2023 12:20)
- Ну например так IBAH(2960 знак., 25.05.2023 10:17)
- В этом случае каждое обновление прошивки будет стирать всю
информацию в квази-еепром. Это неправильно. SciFi правильно
говорит: в квази-еепром должна писать прошивка, а не программатор и
не загрузчик. - Ale3000(25.05.2023 09:54)
- Прошивка и будет писать. Но есть два нюанса. Первый - выделить
память под область ЕЕ нативным способом. Второй - не создавать
анализ содержимого в ЕЕ с целью обнаружить его virgin-состояние. То
есть вписать дефолтные значения сразу. При прошивке чипа
программатором в ЕЕ и должны быть эти дефолтные значения, а при
обновлении прошивки бутом ЕЕ не обновляется. - my504(25.05.2023 10:14)
- А чего вы добьётесь, "не создавая анализ содержимого"? Сэкономите
полсотни байт в прошивке? Разменяв это на геморрой, которым вы
сейчас занимаетесь? Так себе размен, если вам интересно моё мнение. - SciFi(25.05.2023 10:18)
- Я всего лишь рассматриваю варианты. И все. Вариант с анализом и так
у меня есть. - my504(25.05.2023 10:20)
- Ну, если варианты, есть вот такая экзотика: SciFi(388 знак., 25.05.2023 10:32)
- Я всего лишь рассматриваю варианты. И все. Вариант с анализом и так
у меня есть. - my504(25.05.2023 10:20)
- А чего вы добьётесь, "не создавая анализ содержимого"? Сэкономите
полсотни байт в прошивке? Разменяв это на геморрой, которым вы
сейчас занимаетесь? Так себе размен, если вам интересно моё мнение. - SciFi(25.05.2023 10:18)
- Прошивка и будет писать. Но есть два нюанса. Первый - выделить
память под область ЕЕ нативным способом. Второй - не создавать
анализ содержимого в ЕЕ с целью обнаружить его virgin-состояние. То
есть вписать дефолтные значения сразу. При прошивке чипа
программатором в ЕЕ и должны быть эти дефолтные значения, а при
обновлении прошивки бутом ЕЕ не обновляется. - my504(25.05.2023 10:14)
- По хорошему нужно минимум две страницы, чтобы была устойчивость к
сбою питания во время стирания. У себя предпочитаю прописывать
начальное значение в пустую память на лету: проверяем, если пустая,
пишем начальное значение. Соответственно, размечаем память так,
чтобы программатор не трогал область EEPROM. - SciFi(25.05.2023 09:50)
- А как "разметить память, чтобы программатор не трогал область EEPROM"? в ИАР? Научи
хорошему. - IBAH(25.05.2023 15:06)
- Это в в настройках линкера делается. Делаешь меньше памяти и программатор туды не лезет - Звepoящep(25.05.2023 20:57)
- Не знаю, яром не пользуюсь. Но я бы начал с документации
>>> SciFi(1 знак., 25.05.2023 15:08, ссылка)
- А мне показалось, что SciFi самый главный специалист по ИАРу... В
документации слишком много букв. Как это делается в других
системах? - IBAH(25.05.2023 15:12)
- Как обычно. Убеждаемся, что программатор стирает только те секторы,
которые шьёт. Под прошивку выделяем адреса, не пересекающиеся с
секторами, в которых будет жить EEPROM. Логично же. - SciFi(25.05.2023 15:17)
- То есть тупо писать в страницу которая находится в конце флэша, а
сегмент кода уменьшить на размер зарезервированной памяти. Это не
спортивно. Должна быть какая-то комбинация const __no_init - IBAH(25.05.2023 15:25 - 15:29)
- Не люблю привязываться к фичам, которые плохо переносятся. Переносил - не понравилось. С тех пор, если есть варианты, стараюсь придерживаться функционала, который у всех более-менее одинаково работает. - SciFi(25.05.2023 15:33)
- Вопрос не в том куда писать, а в том где стирать. Если ты в программаторе ткнёшь в кнопку "стереть всё", то никакие квалификаторы тебе не помогут. - =AlexD=(25.05.2023 15:28)
- То есть тупо писать в страницу которая находится в конце флэша, а
сегмент кода уменьшить на размер зарезервированной памяти. Это не
спортивно. Должна быть какая-то комбинация const __no_init - IBAH(25.05.2023 15:25 - 15:29)
- Как обычно. Убеждаемся, что программатор стирает только те секторы,
которые шьёт. Под прошивку выделяем адреса, не пересекающиеся с
секторами, в которых будет жить EEPROM. Логично же. - SciFi(25.05.2023 15:17)
- А мне показалось, что SciFi самый главный специалист по ИАРу... В
документации слишком много букв. Как это делается в других
системах? - IBAH(25.05.2023 15:12)
- Это не тот случай. В данном случае я делаю измерительный стенд (малотиражное и контролируемое при использовании устройство). У меня в коммерческих проектах нет такого маньячества. Стирание длится порядка пары десятков миллисекунд. Вероятность потери питания в этом интервале примерно равна вероятности существования органической цивилизации в радиусе одного килопарсека от Земли... ))) - my504(25.05.2023 09:50)
- А как "разметить память, чтобы программатор не трогал область EEPROM"? в ИАР? Научи
хорошему. - IBAH(25.05.2023 15:06)
- Заполнить остальной массив значениями 0xFFFFFFFF не подходит? - AlexBi(25.05.2023 09:28)
- Подходит канешна, но писать 256 одинаковых значений не слишком
красиво. Думал есть что нибудь компактное... Плюс к этому массив ЕЕ
может быть и в разы больше. Тогда как? - my504(25.05.2023 09:46)
- А если чуть обобщить, то можно таблицы прямо по формуле формировать. VladislavS.(2 знак., 25.05.2023 14:04, ссылка, картинка)
- Если речь про ARM, то для него работает C++, там это вообще как нефиг нафиг. VladislavS.(1 знак., 25.05.2023 13:55, картинка)
- binary includes? - Dingo(25.05.2023 10:15)
- Подходит канешна, но писать 256 одинаковых значений не слишком
красиво. Думал есть что нибудь компактное... Плюс к этому массив ЕЕ
может быть и в разы больше. Тогда как? - my504(25.05.2023 09:46)
- Могу ld-скриптом поделиться: выделяет 2кБ для хранения настроек и
весь оставшийся свободный флеш на логи. Eddy_Em(86 знак., 26.05.2023 16:53)