All streams
Search
Write a publication
Pull to refresh
88
0
Вадим Дерябкин @Vadimatorikda

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

Send message
Интересно, а каков истинно-верный способ перенаправления printf?

Думаю, тут все на вкус… Keil, на сколько я помню (могу ошибаться) использует свои библиотеки и свой компилятор (который отличается значительно от gcc). Если не прав, то прошу поправить. Так что тут сложно сказать. Давно не работал с keil.
Не, про это я знаю. Имею в виду кто додумался использовать 9 бит на «выбор получателя», а 8 бит на «данные». Опять же, из-за шумов все может упасть (хотя тут размах большой и скорости низкие, так что не должно).
Странно что никто ничего пока не написал про протокол. Он ШИКАРЕН! Это же надо… Надо взять на заметку. Ждать 9 бит, грохать все, что не проходит аппаратно. А потом нужное по 8-ми битному. Как по мне, это мега крутой лафхак. Подозреваю, что у такого протокола по любому есть название. Правда я о нем не слышал. Если кто знает, напишите пожалуйста.
Честно говоря не совсем понятно, зачем вообще нужно совмещать форматирование строки и отправку её в сеть.

У меня не стояло задачи отправки строки в сеть. Возможность перепаковывать — просто дополнительный презент.
Я бы отдельно занялся бы созданием форматированной строки, например старый добрый sprintf использовал, или другие с++ аналоги (std::stringstream).

Согласен. Но уже стакнулся, что некоторые библиотеки (особенно бесит, когда данные производителем в бинарном виде), используют printf для логирования данных.
У меня uLink2 был

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

SDIO интерфейс использовали? Или по SPI? Я стараюсь первый использовать. 4 бита. В проекта что разбирал в статье — это избыточно. Но вот например когда идет запись видео, хотя бы 480p, то уже критично.
да и апдейтить такие устройства гораздо сложнее

Спорный вопрос. Если вы храните пакет на git, то вам нет труда отследить соответствие.
Нормальный отладчик грузит 512 кб кода во внутреннюю флэш за пару секунд.

Можно уточнить, какой? Конкретно stm32f405rgt6 с помощью официального st-link v2 на «4000» шьет порядка 10 секунд (на отладочной можно в режиме «9000» шить, но почему-то на моем конкретном чипе не прокатывает). J-link с AliExpres шьет примерно так же. Причем я сейчас говорю про скорость по JTAG порту, а не по SWD.
Решительно не вижу никакой необходимости тратить свои силы и время на оптимизацию этого процесса.

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

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

Предпочитаю, если есть возможность, ставить что-то типа micro-sd или, если недопустимо по требованиям вибрационной устойчивости или прочего, то на flash на плате накатывать fat и использовать файловую систему для всяких картинок и прочего. Это дает не сильные накладные расходы, зато удобно сопровождать.
Сарказм? Не до конца понимаю, на что вы пытаетесь указать. Если вы про тег, то проект на С и С++. Правда цель статьи не разбор использования языка, а того, что «после него выходит».
Меня в 90% случаев устраивает официальное руководство. Если нет, то приходится прибегать к примерам и редким статьям.
Не всегда, но случается. Быстрый анализ по разделу показал, что при -g3 иногда добавляется отладочная информация о функциях, расположенных в соседних разделах. На -g2 такого уже не наблюдал. А про загрузчик — я уже описал выше свое решение. Ресурсы процессора позволяют.
Сейчас отрабатываю вариант с Lua. Пробрасываю интерфейсы аппаратки к машине и вообще из консоли пишу логику. Данным методом решил поделиться, чтобы ни у кого не возникало желания попробовать самому. Или по крайней мере знали, к чему может привести. По сути — поделился опытом.
А вот это уже интересно) На одной плате просто смотрится солиднее.
Просто Вам один шаг остался до того, чтобы ваше устройство кто-нибудь повторил) Я бы собрал себе чисто по приколу. Да и, как Вы говорите, опыт будет. Разводки.
И, да, пожалуйста, не используйте rar. Для его поддержки приходиться ставить дополнительный пакет. Лучше 7zip или zip просто.
Планируется ли реализация всего на одной плате? Чтобы можно было заказать по gerber файлам плату и за выходные собрать?
Было бы не плохо выложить исходники кода на git какой-нибудь. Тот же github.
В случае верной архитектуры появляется возможность вообще работать с абстрактным железом, которые при необходимости заменяется подменой одного класса (ответственного за взаимодействие с конкретным устройством). Это, кстати, очень помогает производить тестирование (если в проекте заложено время под тесты в принципе).
Это называется херовая культура разработки, когда лишь-бы сделать быстро, не важно как. К сожалению, во мноких конторках практикуется, но это не значит, что это норма.


Да понятное дело, что не норма. Однако распределение времени это уже дело не разработчиков, а начальства. Если скажут «за 2 часа» — будет за 2 часа. Скажут «тщательно продумать на будущее» — будет, условно, за 2 месяца.
Во-первых, «эзернет за два дня» — это не продакшен, это быстро сляпать на коленке. Если у вас такое идёт в продакшен — мои вам искренние соболезнования. Ни один пригодный к практическому применению проект за два дня не делается.

Про «2 дня», конечно, утрирую (хотя опыт поднятия eth за 2 дня действительно был. Правда это на скорую руку было и действительно потом пришлось писать в течении двух недель нормально. Чтобы стыковалось со всем наработанным API). Просто обычно занимаешься несколькими проектами и нет особо времени капаться.
Во-вторых, если в сляпанном на коленке коде у вас что-то работать не будет — а в любом минимально сложном проекте вы с этим рано или поздно встретитесь — без понимания работы на уровне регистров чёрта с два вы разберётесь, что не так.

Само собой нужно понимать что происходит. Поскольку HAL не идеален и нужно быть готовым в случае чего поправить.
В-третьих, у вас инструментарий какой-то наработанный есть, или вы только на коленке ляпаете? RTOS, библиотеки? Внутри них — магия или таки регистры?

Да понятно, что есть наработки и как правило написание прошивок под МК скорее напоминает конструктор на основе когда-то правильно спланированной архитектуре.
Абстрагироваться от чего и зачем?

От железа. В идеале, когда в проекте есть класс bsp (при условии, что пишете на С++), который предоставляет данные с датчиков и прочие сигналы из вне, а так же позволяет выводить сигналы во внешний мир (pwm, uart,,,) через приятные прослойки.
Во-первых, не приходится, и можно совершенно спокойно жить только регистрами, ничего страшного в них нет.

Да, согласен. В домашних проектах нормально. Можно. Но в продакшене, увы. Когда просят «эзернет за 2 дня», то уже нет времени вдумчиво сидеть и работать с регистрами, которых порой более 500 на модуль… Чего стоит настройка DMA2D+LTDC например. Другой вопрос, что один раз под себя написал и пользуешь. Но на это, опять же, нужно время.
Во-вторых, CM3 процентов на 80 представляет собой заворачивание одиночных обращений к регистрам в простенькие функции, и от работы напрямую с регистрами в этой своей части особо не отличается.

Так же согласен. Но все же помогает как-то абстрагироваться.
Статья конечно, хардкорная) Я, как человек который по любому чиху привык заказывать готовую 2+ слойную плату, аплодирую)
Ну а теперь по делу:
  1. Зарегистрироваться на сайте все таки надо. Да, они рассылают рекламу, зато можно получить бесплатный доступ к куче важной документации.
  2. К проблемам переходящих с AVR так же можно назвать раздельную документацию. В datasheet-е, в отличии от той же atmega8, только электрические характеристики и карта памяти (сюда же описания краткое характеристик периферии. Уровня максимальной частоты и прочее). А вот за регистрами уже нужно лезть в порой доходящий почти до 2500 страниц reference manual.
  3. Далее стоит отметить, что в отличии от avr, где можно в принципе жить только регистрами, тут приходится использовать оболочки. Сейчас выбор между CM3 и HAL. Последний через официальную утилиту обновляется чуть ли не раз в месяц.
  4. Ну и на последок стоит отметить, что раньше был вместо HAL популярен SPL. Так что в интернете куча статей именно по последнему. Что затрудняет новичков. Поскольку он уже не поддерживается.

Information

Rating
Does not participate
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