Как стать автором
Обновить
32
0

Embedded software developer

Попытка использовать современный C++ и паттерны проектирования для программирования микроконтроллеров

Добрый день, cпасибо за комментарий!

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

Теперь я перешел на что-то вроде этого: https://github.com/isobchuk/cpp_register (просто пример).

Однако я не согласен с замедлением в 10 раз с виртуальными функциями. Мой опыт разбора дизамблера и некоторые статьи говорят о другом.

И все же сейчас, я предпочитаю статический полиморфизм динамическому при написании универсальных кода.

Попытка использовать современный C++ и паттерны проектирования для программирования микроконтроллеров

Осталось от прототипов, надо бы убрать.

Попытка использовать современный C++ и паттерны проектирования для программирования микроконтроллеров

Спасибо за разъяснение!
Я одно время вообще кучу не использовал в проектах под embedded, сейчас сталкиваюсь с большими проектами, где куча используется.

Вообще, я для себя рассудил так. У меня прошивка без использования кучи под домашние проекты занимает не более 10-20 кБайт. На всех используемых мною камнях памяти от 128 до 512 кБайт. Почему не пожертвовать ей, если это улучшит переносимость и гибкость кода.

Это лишь моё мнение касательно моих проектов, оно может измениться. Повторюсь, ещё совсем недавно я был противником использование кучи в МК для несложных проектов.

Попытка использовать современный C++ и паттерны проектирования для программирования микроконтроллеров

Просто пробую, эксперементирую, сравниваю результирующий код. А почему нет?

Попытка использовать современный C++ и паттерны проектирования для программирования микроконтроллеров

С вами мне спорить трудно, знаю по вашим публикациям что вы очень давно в IAR работаете.
Я лишь описал то, что выдал мне отладчик при беглом просмотре, возможно я не так понял и вы правы.

Что делать, если поймал HardFault?

К сожалению, на расстоянии, ничего подсказать не могу, так как подобных проблем с FreeRTOS не имел

Моя USB визитка

Пишу сам, адреса блоков беру из CMSIS

Моя USB визитка

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

Моя USB визитка

Хотелось контролировать питание флэш-памяти.
Рвал землю, потому что так в протеусе были внятные результаты, в обратном случае — нет.
SCK нужно подтянуть, так как команды SPI flash начинают читаться по первому спадающему фронту, что и обеспечивается подтяжкой.(из документации)
НА счёт CS, забыл. В прототипе подтянут был.

Моя USB визитка

Полная аргументация — это тема для отдельной статьи. Если коротко, то люблю копаться в контроллере, а также код получается много быстрее и компактнее. В проект не переносятся ошибки из стандартной библиотеки. Хотя, можно сказать, что они заменяются собственными.

Со стороны бизнеса пока претензий не было.

Куча — не очень хочется тащить системные библиотеки в маленькие проекты.
Динамическое выделение памяти — не очень безопасно.

Моя USB визитка

USB разъём делал по спецификации. Сделал два разъёма на плате, один основной, а другой отрывной по 1мм толщиной. Далее отрывной разъём отделяется, и прикладывается сверху на основной, затем припаиваются к друг другу. Таким образом достигается нужная толщина в 2мм.

Моя USB визитка

Компоненты в 1.5$, плата 0.8$, доставку подсчитать сложновато. Да и на 5 штук стоимость одна на единицу, а на 100 штук уже совсем другая.

Моя USB визитка

Да, хотелось именно в форме визитки.

Запускаем трансфлективный TFT дисплей на SSD1283A с помощью STM32

Вы про бит TX is empty? С ним, к сожалению, с данным экраном работать не получается, хотя осциллограммы корректные.

Начало работы с stm32 или не повторяйте моих ошибок

Но в продакшене, увы. Когда просят «эзернет за 2 дня», то уже нет времени вдумчиво сидеть и работать с регистрами

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

Об инженерном подходе замолвлю я слово

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

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

Аппаратный bit banding CortexM3/M4(ARM), архитектура ядра, ассемблер, С/C++14 и капля метапрограммирования

И с учётом этого делать акцент в статье на «побочную», в общем-то, фичу — экономию нескольких байт — не упомянув основную… ну как-то странно.

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

Аппаратный bit banding CortexM3/M4(ARM), архитектура ядра, ассемблер, С/C++14 и капля метапрограммирования

Вы ошибаетесь или выдаете свое желаемое за действительное. Я, очевидно, знаю далеко не все, но вот это
В случае управления «выходами» GPIO речь не о memory barries и/или memory ordering, а о потенциальном переключении процессора на другую задачу и/или обработчик прерываний, которые могут обращаться к тому-же GPIO. Соответственно будет прелестный heisenbug, если переключение произойдет между LDR и STR.
мне известно. И я хотел бы знать, почему вы посчитали, что этого понимания у меня нет?

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

А вот вас я действительно не очень понял. CPSIE глобальная команда, не зависит от места в стеке вызовов и разрешает прерывания для проца в целом.

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

Аппаратный bit banding CortexM3/M4(ARM), архитектура ядра, ассемблер, С/C++14 и капля метапрограммирования

Что конкретно по-вашему мнению мне следует поправить? Это не наезд, как можно подумать, я правда не понял из вашего комментария.

По теме байтов, вы приводите ссылку на другую версию ядра. В cortex-m3 это всего-лишь одна инструкция CPSIE/ CPSID.
Но дело то даже и не в этом. На счёт той же атомарности, в STM32, к примеру, почти все биты, что могут поменяться из вне, вынесены в отдельный Read-Only регистр (ANY_PERIPH)->SR. Если подобные биты есть в других регистрах, то обычно сбросить подобные флаги можно только записью единицы, что не нарушит логику программы даже при неатомарной операции.
1

Информация

В рейтинге
Не участвует
Откуда
Pforzheim, Baden-Württemberg, Германия
Дата рождения
Зарегистрирован
Активность