Pull to refresh
87
0
Вадим Дерябкин @Vadimatorikda

Инженер-программист

Send message

Чем круче ос, тем больше она жрет и нужно более мощное железо, чтобы это сгладить. Моя текущая ОС может дать фору в производительности FreeRTOS-у, но лишь потому, что проще. ОС, что вы опишете, не факт, что будет сильно быстрее целого Linux ядра. А последнее можно настроить с минимальными надстройками и запустить на чипе дешевле, чем многие "мощные" микроконтроллеры. Так же не стоит забывать, что сейчас есть много SoC, внутри которых есть нормальный процессор Cortex-A, а так же куча периферии и памяти внутри. И формально, у вас 1 кристалл (хоть и довольно крупный), на котором сразу все есть. И памяти мегабайт 128, и ram, мегебайт 32. Все есть. И Linux стартует сразу из коробки. И тут уже отпадает всякое желание натягивать сову на глобус.

Все же напомню главное в разработке. Для каждого проекта свое решение. Пихать одно решение всюду (как Arduino), далеко не всегда оправдано. А иногда и вредно.

Ну так ведь от наличия ассемблерных инструкций это не спасет.

А не думали применить подход Embox, то есть компилировать только нужные части из FreeRTOS?

Оставил только ядро, статические методы для регистрации объектов, мутексы и семафоры. Все остальное, что не использовалось, отключил.

а в меньшей отлаженности и протестированности решения

Само собой пока что не могу гарантировать что в ОС нет ошибок. На данный момент ее наработка в проектах безотказно только около 3 дней без остановки. Нужен куда более долгий срок анализа. Также сам код еще нуждается в улучшениях. Сейчас работаю над ними в нерелизной ветви.

 Вы же не просто так сохранили совместимость по API, и если я правильно понял задумку то в идеале вам следует переиспользовать планировщик (может быть аддаптированный) и добавить свои фичи, типа статической инициализации задач.

Оставил для того, чтобы можно было легче переходить с одной на другую. Я не позиционирую свою, как заметили в личных сообщениях, "всрат-ос" (название оставлю, будет как PIDORA, запоминающимся) как замена FreeRTOS. Это скорее выход из положения, когда осознаешь, что не влез, а партия на руках.

А теперь насчет расширения ядра... Честно, FreeRTOS страшный. Я много лет смотрю на него. И это обилие ifdef убивает. Я пару раз делал его порты под мало кому известные архитектуры. Местами просто под давно уже мертвые... И достаточно насмотрелся на ее код. Но это не отменяет ее главного достойнства. FreeRTOS - работает. Если конечно настроена верна.

Кстати, на счет последного и проверки переполнения, правильно ли я понимаю, что за счет статичекой инициализации вы и легко проверяете выход за границы стека. То есть в прерывании вы смотрите на текущую задачу и проверяете что указатель стека находится в ее границах?

Да. Именно так. И, забыл написать в статье. Напишу тут. Есть киллер фича. Вы можете разместить основную структуру ОС в RTC регистрах у микроконтроллера. Тогда ее 100% никто не перепишет и если упадете, то 100% будете знать, где именно. Не обязательно RTC регистры. Куда угодно, где есть 4 32-х битных слова быстро изменяемой памяти.

Ну и ассемблера там минимум. И то, только потому, что нет тега, говорящего GCC не трогать push при входе в функцию.

Терминал - это вам к Embox) Тут у нас борьба за каждый байт. Сейчас ОС уже прошла испытания временем (месяц устройство на ней проработало стабильно). Далее есть рад замечаний, что будут влиты по окончании тестов. По текущему раскладу удастся высвободит около 300 байт flash на Os, что не мало.


Но вот не знаю, правда. Тут нет MMU, значит динамику априори не закладывали. У нас на подобном на новой работе автопилот работает. Там куча матана крутится с приличной частотой. Проблем с производительностью нет, но это пока что) А вообще чипы огонь. Но они все же реального времени. Там даже классные секции есть мелкие чтобы мелкие ОС туда класть. Они без задержек в этом случае работают.

Просто надо понять, надо ли это делать. Сейчас есть одноплатники примерно за 500 рублей. И там все из коробки. Стоит ли оно того?

Честно, даже не знал о ней. Сейчас почитал документацию, посмотрел код. В принципе, если описание не врет, то интересная ОС. Но увидев ее все равно бы писал свою, потому что:

  1. На C++.

  2. Несколько слоев абстракции. Тяжелее читать. Часть будут убраны компилятором, а вот часть нет.

А если бы писал проект на C++, то для интереса бы глянул.

Спрашивал раньше, мне говорили что раньше был запуск с флешки. И если сейчас не работает, то надо просто допилить немного. Далее уже вам к ним) Я чате телеграмма спрашивал.

Так можно сделать во FreeRTOS. Вам нужно для этого собрать ваши задачи с флагом "-pie". При том, под Cortex-M0. Как самый младший обратно совместимый. А далее в начало полученного bin файла нужно положить информацию о том, где функция вызова. После этого можно создавать динамически task и ему скармливать функцию из вашего bin. Если нужны внешние зависимости, то можно в экосистеме сделать статическую секцию с указателями на различные функции. И из всех приложений использовать ее.

Если нет желания все это делать самому, то в EMBOX все это есть уже из коробки. Ради этого она и создавалась)

Почему же? Просто цели такой не стояло перед этой разработкой. Вот и все. А чем не устраивают предложенные варианты? Они вроде как раз содержат все что вам нужно. Динамические библиотеки, консоль... По сути, почти Linux)

Не тему "крупных" ОС много чего интересного есть. Та же ChibiOS. Так что те, кто хотел, уже нашел. Да и если много flash и хочется крупного, то embox хороший выбор. У них поддержка классная и примеры есть. Я как-то игрался, но меня больше привлекают мелкие микроконтроллеры. Так что тут увы.

Не. Это уже Embox. Они и сами с этим неплохо справляются. У меня цель "дешево и сердито". Дать минимально нужный от RTOS функционал, стараясь потреблять памяти по-минимуму.

А про M3 и выше. У них я бы добровольно-принудительно при наличии в чипе MPU бы еще использовал) Тоже дополню, как руки дойдут.

Все зависит от задачи и подхода. Я тут готовлю интересную статью. Там я одну и ту же задачу решаю 5-ю разными способами. Чисто чтобы показать разницу в ресурсах и производительности.

Значит в M0 эксклюзивного доступа к памяти нет.

Просто он простой) И для большинства задач его хватает.

Почему бы вам не использовать М3, М4 или М7.

Со временем и их добавлю. Просто не было проектов пока домашних, где было бы необходимо что-то выше M0. Но в планах есть M7. Благо понадобится добавить совсем немного.

В М0 есть что то особенное?

Просто нравится максимальная простота) Ясное дело, что выбирать надо под задачу. В прошлом проекте вот (по ссылке в начале статьи), чтобы байтики копировать туда-сюда без математики почти - больше и не нужно. А вот будущий проект планируется с кучей математики внутри, там M7 рассматриваю с double аппаратным.

Т.к. речь про Cortex-M0, то да. Иначе надежно не сделать.

Вы, видимо, неправильно мой пример поняли, ну, или я плохо объяснил. Там дело и состояло именно в том, что был выбран неподходящий контроллер, много "велосипедного" кода разработчику пришлось писать самому. Понятно, что "все мы человеки", и даже "изобретая велосипед", пусть и по всем спекам, можно допустить ошибки.

Да, я вас не так понял. Если чип был выбран неверно, то это уже другой диалог. Часто вижу картину, когда вместо специально спроектированного под задачу чипа ставят какой-нибудь stm32f415. Просто потому что на нем все делали. Иногда это прокатывает с небольшими издержками. Иногда все оканчивается плачевно.

Собственно, для чего я сделал тогда свое демо: только для того, чтобы показать, что утверждения разработчика о "глючной Windows" и "некорректной имплементации стека BLE" не имеют под собой оснований. И ему (точнее, компании), "скрепя сердце" пришлось искать и фиксить баги в своем коде. 

Ошибки и глюки вполне могут быть. Все же проекты тяжелые. BLE стек вообще считается самым тяжелым вроде как из существующих. Даже тяжелее WiFi. Но ошибки обычно на твоей стороне) Так что да.

Да, когда мы запросили фичу апдейта фирмвари OTA, они нам дали estimate в $200K и 6 months.

А вот такое надо еще на этапе планирования проекта выяснять. Если есть что-то закрытое внутри от производителя, то все может пойти по п***е. Сталкивались с таким. Было неприятно. Пришлось чип менять. Зато "сэкономили" и "не потратили время" на написание своих драйверов. Зачем? Ведь у производителя есть готовое...

Правда, могу откровенно доложить, все это было, в конечно итоге... до "оппы" - на самом деле, никому не было до этого никакого особо дела (поскольку бабки и время тратились не их, а огромной транснациональной корпорации). Вот так обстоят дела в "развитом капитализме" :D

Это тема отдельной дискуссии...

И разработчик, и производитель - вполне себе надежные и авторитетные компании (если вас не смущает по какой-то причине тот факт, что они из Китая).

Для меня порог 10 лет. После прохождения 10 лет я начинаю закладывать в устройства прошедшей порог фирмы микроконтроллеры. То, что она в Китае, не страшно. Опять же при условии, что есть надежные поставщики. То есть, тот же Элитан должен их поставлять.

Думаю, что вы в этом пункте ошибаетесь; с другой стороны, популярность чипа и активно ведущаяся открытая разработка - хорошая гарантия отсутствия критических ошибок.

Вы, неверное (могу ошибаться) не разрабатывали оборудование, которое требует сертификации или используется там, где может быть причинен вред здоровью или жизни человека. В таких проектах обязательным условием ставится наличие полного перечня документации на всю внутреннюю подноготную. В особо тяжелых случаях требуется даже проверять внутреннюю структуру чипов на соответствие заявленного. Именно тут появляется Миландр и остальные российские микроконтроллеры (которые обязуются гарантировать то, что продают и заявляют в документации).

Тут я точно сказать не могу, но можно связаться с представителями https://www.espressif.com/ и выяснить, как обстоит вопрос.

Тут обычно решается вопрос через поставщика. Дается "приватные" контакты и через них уже идут все уточнения. Не только в российских компаниях.

Мне кажется, "за вас" говорит обычная для профессиональных "микроконтроллерных" разработчиков неприязнь к "ардуинщикам" ;)

Буду откровенен. Неприязнь есть. НО. Рациональность важнее. Если проект выглядит идеально с Arduino внутри, то я ее поставлю. Пример: есть мелкосерийная партия ДВС-ов для мелких аппаратов. Внутри контроллер ДВС на открытом Arduino проекте. Оно не плохо так продается. То есть процесс интеграции выглядил просто как разводка платы под нужные габариты, смена пара ножек в коде, а далее уже все ок. Хотя у Arduino есть весомый плюс над ESP32. Он на AVR. А на AVR чипы есть исчерпывающая документация. Так что даже если что-то в библиотеке или проекте бы пошло не так, то можно залезть и посмотреть, почему. А в случае с ESP, если есть ошибка в модуле, на который нет исходников (например, на дергается нужный бит. Или флаг прерывания не сбрасывается при каких-то условиях), то ты единственное что можешь сделать, так это написать разработчикам с просьбой разобраться в произошедшем.

Теперь про то, что вы реализовали функционал намного быстрее, чем программиста, который писался сам. Тут есть один нюанс. Тот программист, который писал все это сам, если написал все правильно, то оно будет надёжнее, и поддерживать это будет проще. Такой подход я одобряю. Да, он дольше по времени. Да, он выходит дороже. Однако. Такое устройство можно будет поддерживать, на протяжении всей жизни проекта. Или пока не закончится поддержка чипа, на который был построен проект.

Опять же, напомню. Что данный чип, который вы так любите, неплохой. У него просто своя область применения. Он прекрасно себя зарекомендовал как средство для прототипирования. Также, как Arduino. Он прекрасно подходит для того, чтобы собрать хоть какой-то более-менее работающий прототип в короткие сроки. С этой задачей он справляется прекрасно. Но использовать его вместе с его экосистемой в реальных устройствах нельзя.

Однако, если нужно выпустить устройство, поддержка которого ограничена выпуском начальной прошивки, а дальнейшая судьба проекта не важна, или поддержка будет производиться очень на коротком сроке, при этом устройство не представляет опасности для жизни человека, тогда применения данного чипа, будет весьма оправдано.

Information

Rating
9,339-th
Location
Красноярск, Красноярский край, Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Embedded Software Engineer
Lead
From 250,000 ₽
C++
STM32
Linux
Circuitry
Python
Assembler
Programming microcontrollers
Embedded system
Software development
Object-oriented design