вы наверно пропустили что все это делалось больше 15 лет назад, такие буквы: DMA, NOR FLASH, SSD были, но в каких то космических далях
Я в embedded 25+ лет, начиная с середины 90-х и 8051, так что рассказывать и сам много могу, и были проекты когда на ассемблере пару байт памяти не хватало, как в той известной байке
Надо просто разрулить обращения к шине по времени
Именно это я и написал Вам в первом своем комментарии, в том числе и про необходимость сидеть в поллинге и тупо тратить такты, если железо не позволяет ничего больше, и про обработку ошибок
Дело в том, что последние лет 10 я в-основном пытаюсь сделать этот мир лучше, разгребая подобные решения, сделанные от непонимания базовых принципов этого самого embedded и realtime. И вроде программист отличный и код вроде классный, но люди вообще не понимают, что они делают, поскольку архитектор на проекте отсутствовал как класс (не важно, выделенная это должность или это программист или это железячник и т.п.).
Ваша статья озаглавлена "Можно ли решить задачу реального времени без RTOS, разберем реализованную задачу", а я пытаюсь донести сообществу, что RTOS тут как бы и ни причем, и про то, что Ваша задача не стоит выеденного яйца, если действовать не от реализации в железе, а от приоритетов функций, определяемых бизнес-логикой устройства.
Думаю больше переписываться действительно не стоит, мы на разных языках
К счастью бывают такие задачи. Иначе и embedded-прогрммисты "ожирели" бы в своих творениях, как WEB-сайты и подобное. Да, иногда бизнес ставит "невпихуемые" задачи и приходится и оптимизировать и жертвовать.
Если все так, как Вы описали, то проблема вообще отсутствует при условии что в железо не упираетесь. Запустили АЦП, пришло прерывание об окончании - запустили на прерываниях и/или DMA транзакцию во флэш, все оставшееся время до и после прерываний в фоне считайте свои вычисления, где проблема-то вообще??? На картинке у Вас время сохранения и время вычисления последовательны, а в тексте Вы пишете, что работа по прерываниям. Есть конечно еще шанс, что тормоза из-за неучтенного времени стирания сектора флэш, особенно если это не NOR FLASH, а чтото SSD-подобное, которое прячет от Вас проблемы со стиранием.
... вы выкинули обработку отсчета с АЦП, а обработка сигнала с этим новым отсчетом одна из приоритетных задач ...
... запись во флеш имеет тот же приоритет по другой причине ...
Я не выкидывал ничего, я приоретизировал описанные Вами процессы. Обработка отсчета АЦП производится все время, свободное от обслуживания периферии, и про это я в явном виде написал.
Совершенно очевидно, что если нет посчитанных данных, то записывать во флэш нечего (если это конечно не сырые отсчеты АЦП, но это тривиальный случай получили - записали). При этом не менее очевидно что жизнь пациента имеет наивысший приоритет.
Вам имеет смысл разобраться в требованиях, а не в реализации, расставьте запятые в "казнить нельзя помиловать". Процессор выполняет одну инструкцию (грубо) в один момент времени.
Противоречивые чувства от статьи. Вроде бы все верно написано, но на самом деле все в разы проще. Проблема не в RTOS/baremetal, а в ложном мнении, что RTOS - это панацея от необходимости архитектурного понимания / планирования синхронизации функций в устройстве.
При проектировании системы и выборе аппаратной платформы делается анализ, хватит ли производительности (в широком смысле - вычислительная мощность, объем памяти, пропускная способность шин и т.п.). Очевидно что платформа подбирается под "хватит".
Затем весь реалтайм вешается на прерывания с учетом приоритетом, где возможно - прикручивается DMA (но есть нюансы), остальное в конечный автомат в фоне. А RTOS может помочь только в обеспечении вытеснения менее приоритетных задач вместо ручной реализации разбиения длительных процессов на "псевдотакты" для кооперативного выполнения.
Применительно к описанной задаче: 1. Старт и обработка АЦП - вешаем старт на прерывание таймера Пока АЦП работает, можно что-то повычислять, либо сидеть поллингом ждать окончание преобразования 2. Пришло прерывание / поднялся флаг что АЦП закончил преобразование - запускаем транзакцию записи во внешнюю память по SPI. Записываться должны уже заранее подготовленные данные, которые должны быть посчитаны на предыдущем шаге. Пока идет транзакция в память - вычисляем еще что-нибудь, либо ожидаем поллингом завершение работы с SPI-памятью. Если вдруг оказалось, что записывать пора, а данных для записи нет, значит не записываем. Считать это ошибкой или нет - определяется на этапе анализа требований. 3. Все оставшееся время до следующего прерывания таймера для АЦП что-то считаем и готовим для следующего цикла записи в память.
Связка 1 и 2 обеспечивает строгую детерминированность во времени тех процессов, которые должны быть детерминированы.
Если дизайн таков, что транзакция в память длиннее чем период АЦП, то разбиваем транзакцию SPI на несколько тактов, отслеживая атомарность и контроль целостности всей записи.
Вопрос применения / неприменения RTOS: RTOS может облегчить механизм синхронизации тасков, может избавить от написания некоторых драйверов на аппаратные узлы платформы, может предоставить библиотечные сервисы какого-нибудь UDP и т.п., но не заменит архитектора системы.
Неплохо было бы профессиональным юристам раскрыть тему в разрезе, грубо говоря, исполняемый файл - исходники. А то был в нашем колхозе аналогичный случай (с): при увольнении сотрудник передал все исполняемые файлы, как результат своей работы, а исходники уничтожил. И не смогли доказать, что создание и, особенно, хранение исходников входило в его обязанности.
Сильно больше может диссонировать "Извиняюсь" и подобное. Виновник заранее своей фразой снял с себя всю ответственность. Особенно если знать историю языка "извиняюсь" = "извиняю себя"
как Вы считаете, что более криптостойкое, пароль вида "этотпарольдлясайтаяндекс" или пароль, сгенеренный Вашей утилитой вида "8s(e[2&" ?
если речь идет не о хранении паролей, а об их генерации по ключевой фразе, то сильно проще придумать себе правило (правила) формирования паролей из "имени-собаки-фамилии-матери-задом-наперед-соли-из-доменного-имени"
пароли всегда разные, правило формирования может включать заглавные/строчные, прямой/обратный порядок букв и т.п.
В реестре по ППРФ 719 данного контроллера нет, соответственно заявление о его православности как минимум не подтверждено официально, а как максимум примерно равно продукции отечественной компании с началом на G и окончанием на S, представляющей собой тупо перемаркированный Тайвань.
Вообще конечно хочется ошибаться, всеми руками за конкурентное импортозамещение и готов применять его в своих решениях. Но пока кроме Миландра и Элемента, увы.
для виртуалок можно proxmox ve поставить на обычный дебиан, сам дебиан можно поставить на флэшку и настроить так, чтобы при работе запись на неё была минимальная
Вот примерно те же цели (файлопомойка/кино/фото, бэкапы всего и вся, виртуалки для экспериментов и саморазвития), так что так в свое время после отказа от XigmaNAS и сделал.
Почему так? Потому что после серии экспериментов подумал, что лучше собрать все на мэйнстрим-софте с какой-никакой поддержкой сообщества, чем использовать (возможно) более производительные и удобные, но кастомные решения.
Железо - Microserver Gen7, далее снизу вверх:
Файловая система - ZFS, два диска в зеркале (только система, не считая дисков-файлопомоек). ZFS - ибо решил, что два диска сдохнут до невосстановимого состояния с гораздо меньшей вероятностью, чем флэшка. А менять флэшки превентивно раз в полгода - лень. Монтирование и восстановление одного диска с ZFS проверил на другом компе, сымитировал отказ одного из двух.
Операционка - debian, загручик и ОС прямо на ZFS, linux научился уже
Службы на debian - в первую очередь samba, остальное по желанию
Proxmox-контейнеры и виртуалки под всякое разное, торрентокачалка, DLNA сервер для старых домашних клиентов, сервер майнкрафт детям, WinXP для старого технологического софта и т.п. Принцип: один контейнер/виртуалка - один целевой софт
В контейнеры проброшены ресурсы по разному, от самбы до прямого проброса железа
Программированием не занимаюсь, так что ресурсоемкие задачи не нужны. Соответственно быстродействия всего этого вполне хватает, загрузка растет до пиковой крайне редко.
найдется чем проверить чтото более сложное, чем mass storage?
adum4160 то еще глюкалово, когда за ним стоит устройство, которое делает enumeration с задержкой, при этом не умеет управлять пинами (читай - не микроконтроллер)
каким образом решается вопрос производственного тестирования с оператором "М" в регионе 77 и последующей продаже оборудования в регион 78 с оператором "Б" ?
PS совпадения букв и цифр чисто случайны и определяются исключительно кривизной моих рук
написал брльше для понимания, что для мелкосерийки-военки-научных институтов-нужное-дописать проблем с поставками сейчас можно сказать нет даже по микросхемам
а для серийного конвейерного - они бывают даже с резисторами
TSMC действительно отгружает чипы нормально, то что мы наблюдаем сейчас - это отложенный спрос. Например, по одной из позиций которая у нас идет в изделия, TSMC отгружала в сентябре 2021 заказ, размещенный в ноябре 2020.
Плюс TSMC в угоду "крупнякам" типа Apple, Nvidia и подобным периодически до сих пор делает "ой, у нас крупный заказ пришел, поэтому Вам отгрузим на две недели позже, Вы согласны или сдвинуть еще на месяц и отгрузить с Вашим следующим заказом?"
Плюс сейчас дефицит не только мощностей TSMC, GF и UMC, но и дефицит в других операциях производственного цикла полупроводников. Например недавно в Малайзии прикрутили ограничения с COVID - приостановился темп корпусирования готовых микросхем в пластик. И так повсюду.
Вы будете неприятно удивлены при попытке сейчас купить практически любой компонент в промышленных количествах, а не по 100-200 штук в Чип-и-Дипе. Дефицит есть и он огромен и раньше Q3.22 никто из производителей, тот же Microchip, выхода из кризиса не видит. На один из разнесчастных LDO нам сейчас Microchip дал сроки 88 недель! Замены от ST, TI, Diodes, ONsemi - не менее 50 недель.
А без одного резистора процент готовности автомобиля не 99.9, как это может показаться, а ровно 0 - отгружать нельзя.
Есть хлебопекарня, на входе мука, на выходе весь ассортимент хлебобулочных изделий. Пришел весь из себя парень с деньгами и говорит, в топку весь ассортимент, серый хлеб, батоны, будете мне печь крутоны, плачу на год вперед.
Аналогия доступная? Производственные мощности ведь не резиновые. Все, кто завязан на TSMC, дружно встали в очередь.
Я в embedded 25+ лет, начиная с середины 90-х и 8051, так что рассказывать и сам много могу, и были проекты когда на ассемблере пару байт памяти не хватало, как в той известной байке
Именно это я и написал Вам в первом своем комментарии, в том числе и про необходимость сидеть в поллинге и тупо тратить такты, если железо не позволяет ничего больше, и про обработку ошибок
Дело в том, что последние лет 10 я в-основном пытаюсь сделать этот мир лучше, разгребая подобные решения, сделанные от непонимания базовых принципов этого самого embedded и realtime. И вроде программист отличный и код вроде классный, но люди вообще не понимают, что они делают, поскольку архитектор на проекте отсутствовал как класс (не важно, выделенная это должность или это программист или это железячник и т.п.).
Ваша статья озаглавлена "Можно ли решить задачу реального времени без RTOS, разберем реализованную задачу", а я пытаюсь донести сообществу, что RTOS тут как бы и ни причем, и про то, что Ваша задача не стоит выеденного яйца, если действовать не от реализации в железе, а от приоритетов функций, определяемых бизнес-логикой устройства.
Думаю больше переписываться действительно не стоит, мы на разных языках
К счастью бывают такие задачи. Иначе и embedded-прогрммисты "ожирели" бы в своих творениях, как WEB-сайты и подобное. Да, иногда бизнес ставит "невпихуемые" задачи и приходится и оптимизировать и жертвовать.
Если все так, как Вы описали, то проблема вообще отсутствует при условии что в железо не упираетесь. Запустили АЦП, пришло прерывание об окончании - запустили на прерываниях и/или DMA транзакцию во флэш, все оставшееся время до и после прерываний в фоне считайте свои вычисления, где проблема-то вообще??? На картинке у Вас время сохранения и время вычисления последовательны, а в тексте Вы пишете, что работа по прерываниям.
Есть конечно еще шанс, что тормоза из-за неучтенного времени стирания сектора флэш, особенно если это не NOR FLASH, а чтото SSD-подобное, которое прячет от Вас проблемы со стиранием.
Я не выкидывал ничего, я приоретизировал описанные Вами процессы. Обработка отсчета АЦП производится все время, свободное от обслуживания периферии, и про это я в явном виде написал.
Совершенно очевидно, что если нет посчитанных данных, то записывать во флэш нечего (если это конечно не сырые отсчеты АЦП, но это тривиальный случай получили - записали). При этом не менее очевидно что жизнь пациента имеет наивысший приоритет.
Вам имеет смысл разобраться в требованиях, а не в реализации, расставьте запятые в "казнить нельзя помиловать". Процессор выполняет одну инструкцию (грубо) в один момент времени.
Противоречивые чувства от статьи. Вроде бы все верно написано, но на самом деле все в разы проще. Проблема не в RTOS/baremetal, а в ложном мнении, что RTOS - это панацея от необходимости архитектурного понимания / планирования синхронизации функций в устройстве.
При проектировании системы и выборе аппаратной платформы делается анализ, хватит ли производительности (в широком смысле - вычислительная мощность, объем памяти, пропускная способность шин и т.п.). Очевидно что платформа подбирается под "хватит".
Затем весь реалтайм вешается на прерывания с учетом приоритетом, где возможно - прикручивается DMA (но есть нюансы), остальное в конечный автомат в фоне. А RTOS может помочь только в обеспечении вытеснения менее приоритетных задач вместо ручной реализации разбиения длительных процессов на "псевдотакты" для кооперативного выполнения.
Применительно к описанной задаче:
1. Старт и обработка АЦП - вешаем старт на прерывание таймера
Пока АЦП работает, можно что-то повычислять, либо сидеть поллингом ждать окончание преобразования
2. Пришло прерывание / поднялся флаг что АЦП закончил преобразование - запускаем транзакцию записи во внешнюю память по SPI. Записываться должны уже заранее подготовленные данные, которые должны быть посчитаны на предыдущем шаге. Пока идет транзакция в память - вычисляем еще что-нибудь, либо ожидаем поллингом завершение работы с SPI-памятью.
Если вдруг оказалось, что записывать пора, а данных для записи нет, значит не записываем. Считать это ошибкой или нет - определяется на этапе анализа требований.
3. Все оставшееся время до следующего прерывания таймера для АЦП что-то считаем и готовим для следующего цикла записи в память.
Связка 1 и 2 обеспечивает строгую детерминированность во времени тех процессов, которые должны быть детерминированы.
Если дизайн таков, что транзакция в память длиннее чем период АЦП, то разбиваем транзакцию SPI на несколько тактов, отслеживая атомарность и контроль целостности всей записи.
Вопрос применения / неприменения RTOS: RTOS может облегчить механизм синхронизации тасков, может избавить от написания некоторых драйверов на аппаратные узлы платформы, может предоставить библиотечные сервисы какого-нибудь UDP и т.п., но не заменит архитектора системы.
Пожалуй все-таки LiFePO4 а не Po4. Полониевые батарейки так себе идея)
Неплохо было бы профессиональным юристам раскрыть тему в разрезе, грубо говоря, исполняемый файл - исходники. А то был в нашем колхозе аналогичный случай (с): при увольнении сотрудник передал все исполняемые файлы, как результат своей работы, а исходники уничтожил. И не смогли доказать, что создание и, особенно, хранение исходников входило в его обязанности.
Сильно больше может диссонировать "Извиняюсь" и подобное. Виновник заранее своей фразой снял с себя всю ответственность. Особенно если знать историю языка "извиняюсь" = "извиняю себя"
как Вы считаете, что более криптостойкое, пароль вида "этотпарольдлясайтаяндекс" или пароль, сгенеренный Вашей утилитой вида "8s(e[2&" ?
если речь идет не о хранении паролей, а об их генерации по ключевой фразе, то сильно проще придумать себе правило (правила) формирования паролей из "имени-собаки-фамилии-матери-задом-наперед-соли-из-доменного-имени"
пароли всегда разные, правило формирования может включать заглавные/строчные, прямой/обратный порядок букв и т.п.
Вы уверены?
В реестре по ППРФ 719 данного контроллера нет, соответственно заявление о его православности как минимум не подтверждено официально, а как максимум примерно равно продукции отечественной компании с началом на G и окончанием на S, представляющей собой тупо перемаркированный Тайвань.
Вообще конечно хочется ошибаться, всеми руками за конкурентное импортозамещение и готов применять его в своих решениях. Но пока кроме Миландра и Элемента, увы.
два диска, разбиты на пулы, один из пулов - рут для дебиана
Вот примерно те же цели (файлопомойка/кино/фото, бэкапы всего и вся, виртуалки для экспериментов и саморазвития), так что так в свое время после отказа от XigmaNAS и сделал.
Почему так? Потому что после серии экспериментов подумал, что лучше собрать все на мэйнстрим-софте с какой-никакой поддержкой сообщества, чем использовать (возможно) более производительные и удобные, но кастомные решения.
Железо - Microserver Gen7, далее снизу вверх:
Файловая система - ZFS, два диска в зеркале (только система, не считая дисков-файлопомоек). ZFS - ибо решил, что два диска сдохнут до невосстановимого состояния с гораздо меньшей вероятностью, чем флэшка. А менять флэшки превентивно раз в полгода - лень. Монтирование и восстановление одного диска с ZFS проверил на другом компе, сымитировал отказ одного из двух.
Операционка - debian, загручик и ОС прямо на ZFS, linux научился уже
Службы на debian - в первую очередь samba, остальное по желанию
Proxmox-контейнеры и виртуалки под всякое разное, торрентокачалка, DLNA сервер для старых домашних клиентов, сервер майнкрафт детям, WinXP для старого технологического софта и т.п. Принцип: один контейнер/виртуалка - один целевой софт
В контейнеры проброшены ресурсы по разному, от самбы до прямого проброса железа
Программированием не занимаюсь, так что ресурсоемкие задачи не нужны. Соответственно быстродействия всего этого вполне хватает, загрузка растет до пиковой крайне редко.
найдется чем проверить чтото более сложное, чем mass storage?
adum4160 то еще глюкалово, когда за ним стоит устройство, которое делает enumeration с задержкой, при этом не умеет управлять пинами (читай - не микроконтроллер)
а где же микросхемы от GS Group ?
каким образом решается вопрос производственного тестирования с оператором "М" в регионе 77 и последующей продаже оборудования в регион 78 с оператором "Б" ?
PS совпадения букв и цифр чисто случайны и определяются исключительно кривизной моих рук
это очевидно
написал брльше для понимания, что для мелкосерийки-военки-научных институтов-нужное-дописать проблем с поставками сейчас можно сказать нет даже по микросхемам
а для серийного конвейерного - они бывают даже с резисторами
TSMC действительно отгружает чипы нормально, то что мы наблюдаем сейчас - это отложенный спрос. Например, по одной из позиций которая у нас идет в изделия, TSMC отгружала в сентябре 2021 заказ, размещенный в ноябре 2020.
Плюс TSMC в угоду "крупнякам" типа Apple, Nvidia и подобным периодически до сих пор делает "ой, у нас крупный заказ пришел, поэтому Вам отгрузим на две недели позже, Вы согласны или сдвинуть еще на месяц и отгрузить с Вашим следующим заказом?"
Плюс сейчас дефицит не только мощностей TSMC, GF и UMC, но и дефицит в других операциях производственного цикла полупроводников. Например недавно в Малайзии прикрутили ограничения с COVID - приостановился темп корпусирования готовых микросхем в пластик. И так повсюду.
Вы будете неприятно удивлены при попытке сейчас купить практически любой компонент в промышленных количествах, а не по 100-200 штук в Чип-и-Дипе. Дефицит есть и он огромен и раньше Q3.22 никто из производителей, тот же Microchip, выхода из кризиса не видит. На один из разнесчастных LDO нам сейчас Microchip дал сроки 88 недель! Замены от ST, TI, Diodes, ONsemi - не менее 50 недель.
А без одного резистора процент готовности автомобиля не 99.9, как это может показаться, а ровно 0 - отгружать нельзя.
более того, вредно по соображениям ЭМС
Есть хлебопекарня, на входе мука, на выходе весь ассортимент хлебобулочных изделий. Пришел весь из себя парень с деньгами и говорит, в топку весь ассортимент, серый хлеб, батоны, будете мне печь крутоны, плачу на год вперед.
Аналогия доступная? Производственные мощности ведь не резиновые. Все, кто завязан на TSMC, дружно встали в очередь.