Pull to refresh
0
Alexander Belousov@belav

User

5
Subscribers
Send message

Это пример того, что надо вкладываться в дело, а не только зарплату снимать. Если есть спрос перепаивать bga, можно купить соответствующую станцию, потребуется перепаивать 0201, и микроскоп не проблема.
Тяжелей стало перепаивать светодиоды — так не надо на коленке это делать, можно купить или сделать приспособы и сэкономить время.
А ремонт всегда будет востребован.

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

"Еще можно произвести умножение путем нескольких сложений. Например, 3 × 4 — это просто 4 + 4 + 4..."
Еще до появления вычислителей в кремнии существовали более быстрые алгоритмы умножения.

Не корректный вопрос. Что в Вашем понятии "температура"?

Интересная статья.
А как будут выглядеть графики, если добавить ось z — время (месяц, квартал, год)?
Как будет меняться рейтинг со временем?

Ещё есть композит: металл-пластик-металл. Делаете развёртку. На фрезерном станке фрезеруются линии сгиба. В итоге корпус собирается как картонная поделка. Главное, торцы (линии реза) прикрыть. Внешне выглядит как металл, покрытый порошковой краской.

На счёт AMD не стоит беспокоиться. А вот если ещё и Microsoft перейдёт на arm, тогда Intel потеряет приличную долю рынка.

В прошлый раз, когда они демонстрировали эмуляцию x86, intel стал возмущаться.

Embedded хорошо, но своя сборка из исходников может оказаться на много удобней.
Про оборонку — раньше приходилось изучать код программы, прежде чем можно было использовать её.

Вот радость то для нашей оборонки и производителям банкоматов.

Про битовые поля везде пишут, что не стандартизовано, но при этом компиляторы, которыми я пользовался, вполне предсказуемо компилировали код. Это IAR, Keil, GCC, Visual Studio, code composer studio (TI). Даже интерфейсы с битовыми полями между SystemC и systemVerilog не вызывали проблем.
Для сериализации — да, могут быть нюансы. Но опять же надо понимать, что требуется от компилятора.
Использовать define можно для битовых масок и операций, но читаемость кода исчезает. Да и вообще, моё мнение — define в коде это зло.
В CMSIS были неувязочки с битами, которые отличались от документации. Это замечал и в библиотеках IAR (вроде, DR <>DRR в usart, точно не помню, давно было).
Да и вообще, если открыть community.arm.com там раньше люди писали об ошибках в CMSIS. Правда, давненько туда не заглядывал.


Про ардуинщиков да, много интересного (забавного) можно увидеть в коде. Но с другой стороны — есть много проектов, которые просто работают. Пока я терял время на подготовку своего кода, у ардуинщиков уже все было готово. Ну и пусть они потом 40 раз исправляют косяки, но клиент уже у них.


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


И да, я не эмбеддер, я электроник. Программировать пришлось из-за того, что с программистами (которые мне попадались) тяжко договориться. Например, при ошибке программист считает, что программа должна остановиться или вывести модальное окно с ошибкой. А мне в это время надо отладить железку. И вот я руками держу щупы осциллографа, ногой включаю питание, а прога вывела ошибку и остановилась. И как настраивать?..
Да, абстрагироваться до последних версий c++ у меня уже мозга не хватает, но некоторые моменты освоил. Решил поделиться в статье.
Скоро будет продолжение. Рад буду конструктивно обсудить что можно улучшить или упростить.

У них библиотека для дебагера отличается. Вроде, для keil тоже есть, не помню.
Делал на миландр проект, как раз в iar. Жаль, что для stlink ничего не сделали, только j-link. Сначала чип понравился, заработало почти все и сразу. Но потом повылезали нюансы, связанные с особенностью чипа. Errata достаточно объёмная (хорошо или плохо), не все проблемы можно решить. С can там танцы с бубном. Недавно коллеги по несчастью выяснели — частота уходит, будем на неделе изучать феномен.

Самое интересное, что 30 КБ это ограничение на код. На константы, хранимые во flash (например, картинки) я не заметил.

Да, конечно интересно. Всегда интересно увидеть разные подходы.
"Ну, если бы вы выложили полный проект, готовый для компиляции..."
Это относилось к виртуальным методам. Бесспорно, макросам такой подход в проигрыше по производительности. Навскидку, будет 6...7 тактов. За все приходится платить.

А кубик поддерживает миландровские контроллеры?

Открываю статью, вижу IAR — закрываю статью...

захожу в магазин, вижу Windows на ноутбуке — выхожу из магазина…
Если Вы учитесь — производители предлагают бесплатно попользоваться, если Вы зарабатыаете деньги, почему другие не должны это делать.
Если Вы обучаете студентов — обратитесь к разработчикам, возможно, есть лицензия для ВУЗов.
А то что бесплатно — придется вручную прикручивать. Тут ничего не поделать.
Очень хорошая статья на тему, как делать не нужно

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

Не повезло Вашим подчиненными, если таковые имеются.
программиста можно выгонять с собеседования, так как это явно не эмбеддер, язык С он точно не знает, как следствие и С++ тоже.

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

Вы о чем?
и да, CMSIS тестируют на пользователях, не просто так вссплывают опечатки и баги.
2) IAR — компилятор для профессионалов(нет). Только в заголовке будет запись типа:
#error This file should only be compiled by ARM IAR compiler and assembler
IAR платный, а вы не оставляете мне возможности собрать проект другим компилятором. Может быть мне его купить за 2-3к$? А у вас он куплен?
Под линукс он не поставляется, наверное, придется ещё и винду покупать. Ну да ладно: «Я привык работать в IAR. Да, есть другие IDE, но мне хватает возможности IAR».

где Вы в коде нашли не совместимость с другими компиляторами? я порекомендовал IAR, т.к. мне он показался удобней. но это не означает, что все поголовно должны перейти на него.
у меня iar не куплен, лицензия (как написано в тексте) ограничение кода. для дома и семьи хватает.
За лицензию платит заказчик, когда я отдаю исходники. И вообще, почему хороший инструмент должен быть бесплатным?
3) Как правило, начинающие разработчики изучают С++ со стороны ООП и это вполне себе оправданно, но это не серебряная пуля. C++ — мультипарадигмальный язык программирования, наиболее мощными возможностями которого являются метапрограммирование и программирование в пространстве типов, позволяющие сгенерировать оптимальный код, который так важен в эмбеддед.

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

можно. каждый выбирает свой путь
А если у вас по ТЗ время перехода МК в некое состояние 1мс, при этом настроить нужно 200 ног?

не попадалось. не уверен, что на все случаи жизни можно сделать что-то универсальное.
А помигать можно как-то так :

посмотрел Ваш стиль написания. Красиво. Молодец.
void board::Init()
{
  <b>RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;</b>
	
  board::Systick::Init();
  board::ClockCounter::Init();
  board::Leds::Init();
	
  return;
}

вот только зачем в области пользователя доступ к регистрам?
или если отвечать Вашим стилем: за это надо мордой об экран
Представленный код прошу рассматривать только с академической точки зрения как пример возможностей современнего С++.

можно даже пользоваться, ничего криминального в коде нет
Возможно, вам стоит изучить язык более досконально, С++20 рановато брать, а вот С++17 давно мейнстрим.

буду стараться
Уже потом учить работников и писать статьи.

а кто будет учить работников? ждать Вас? мне нужны специалисты сейчас.
А вот от Вас ждем интересный статей. Я серьезно, поделитесь опытом.
А че там обрадаьывать-то? Если у нас есть DMA, то работа с уартом не сильно отличается от работы с массивом в памяти. Ну а сконфигурировать его макросами не составляет большого труда.

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

но и контроллеры стали жирнее.
Можно, конечно, надеяться, что компилятор соптимизирует.

так ведь для этого и существуют компиляторы.
Это я привел пример только для пинов. Без прерываний. Боюсь спросить как будет тотже уарт выглядеть на дефайнах. Особенно инетересен обработчик.
Макросы тоже не плохи, раньше пользовался подобным. Но вот предложил другой подход.
то все можно заменить на одну строчку без накладных.

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

а Вы замеряли сколько тактов теряется? при максимальной оптимизации я не заметил особой разницы.
Ну и так по мелочам, вместо указателей можно ссылки передавать, будет уверенность, что все проинициализировано.

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

это был как пример. конечно, лучше списком или структурой или подобным.
Да еще добавлю. Так делать не совсем хорошо:
virtual void Reverse() { Set(!Get());}

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

хорошее замечание.
спасибо.

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity