Size: a a a

2021 April 07

PB

Petr Belyaev in Embedded Group
Все, понял, наконец. Тогда я попробую ответить на изначальный вопрос. Если хочется абстрактный протокол, можно начать с абстракции фрейма (внешнего интерфейса драйвера протокола). Фрейм - осмысленный набор байтов, которые подлежат отправке по физическому интерфейсу. Хороший инструмент для реализации абстракции в Си - структура. Если байты в одной и той же позиции фрейма могут иметь разную смысловую нагрузку, можно воспользоваться union'ом (правда тогда придется вводить дополнительные флаги, чтобы понимать, что это за "смысловая нагрузка"). Честно ,я бы не пользовался union'ом, если бы не стояла задача экономить память. Тут могут быть и будут нюансы с выравниванием данных в структурах.

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

"Критерий абстрактности" - код компилируется без включения специфических для платформы хедеров, в нем нет упоминания ни одного регистра. Еще хорошо компилировать разными компиляторами с разными уровнями warning'ов. Я обычно компилирую через GCC -wall и MSVC. Тесты абстракций тоже обычно гоняю на x86 машине.

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

AM

Aleksander Mironov in Embedded Group
Мне кажется все таки, такие штуки сверху вниз надо.
Абстракция фрейма должна строится на основании требований к протоколу И следующих из этого особенностий более высоких сущностей.
источник

PB

Petr Belyaev in Embedded Group
Просто фрейм - минимум. Хоть какая-то абстракция. Как я и писал, хоть руками его заполняй (хуже только руками писать байты)
источник

E

Evgen in Embedded Group
спасибо)
Да я и делаю через структуры, сейчас посмотрел, как liblightmodbus он делает
Я уже сделал заготовку,чтоб все ловилось - оплавлялось через dma
источник

PB

Petr Belyaev in Embedded Group
Ну а дальше оно обрастает всем, что в дальнейшем облегчает нам жизнь
источник

E

Evgen in Embedded Group
из описания там требований почти нет
формат пакета и контрольная сумма - всё
а время ответа не должно превышать 100 мс
источник

NK

ID:0 in Embedded Group
Переслано от Valeriya V
📌 Ищем Embedded-программиста, программиста микроконтроллеров, C\C++
Описание вакансии: Компания занимается разработкой и производством автомобильных электронных блоков.
Заработная плата - 100 000 -  150 000.
Локация – Москва.
Задачи:
🔺Разработка встраиваемого ПО микроконтроллеров для блоков управления автомобильной электроникой.
🔺Участие в процессе проектирования электронных устройств.
🔺Наладка, запуск и сопровождение разрабатываемого программного обеспечения.
🔺Составление документации на ПО.
Ожидаем:
🔺Опыт разработки встраиваемого ПО для изделий на МК на языке Си.
🔺Опыт работы с периферией МК, коммуникационными интерфейсами, протоколами передачи данных.
🔺Умение создавать надежный, хорошо структурированный код.
🔺Понимание цифровой и аналоговой схемотехники.
🔺Желателен опыт работы с Git, наличие законченных серийных разработок.
Предлагаем:
🔺Официальное оформление по ТК РФ.
🔺Гибкое начало рабочего дня.
🔺 Повышение квалификации за счет компании.
🔺Компенсация за питание (в столовой предприятия)
🔺Занятия спортом.
🔺Бесплатная отапливаемая парковка в БЦ.
Если Вы хотите узнать о вакансии, буду рада ответить.
Валерия: Telegram @Valeriya_HRM,  +7-995-797-08-22 (WhatsApp)
источник

AA

Alexander Anisimov in Embedded Group
Да, погранцы не пускают, но без проблем можно выехать по лесу ;)
А въехать в РФ потом как нормальный человек.
источник

AA

Alexander Anisimov in Embedded Group
Ой, видимо этот тредик уже стар, сорян
источник

LZ

Leonid Zaliubovskii in Embedded Group
Ну да, есть несколько знакомых которые по буеракам ездили
источник

LZ

Leonid Zaliubovskii in Embedded Group
Но имхо это ну такое
источник

LZ

Leonid Zaliubovskii in Embedded Group
Evgen да, пожалуй тут идеально расписанной. Но в целом, я стараюсь придерживаться следующих правил. На самом низком уровне абстракции, функции read/write делать как weak и потом в проекте, подключать  свою имплементацию под нужное семейство.

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

E

Evgen in Embedded Group
спасибо
источник

AM

Aleksander Mironov in Embedded Group
Шарп на уровне яслей - очень легок, особенно если вы знаете си подобный синтаксис и хотя бы представление о высокоуровневых языках.
Всякие манипуляции с данными, которые на Си занимают экраны там описывается раз так в 20 короче.
По факту можно просто создать консольное приложение и начать пилить с гуглом в соседней вкладке.
источник

LZ

Leonid Zaliubovskii in Embedded Group
пожалуйста
источник

E

Evgen in Embedded Group
ну я по с++ вчера только закрыл курс на курсере (белый пояс)
про что рассказывал
Понимание небольшое есть
источник

RC

Roman Clor in Embedded Group
Когда копнешь чуть глубже в энтерпрайз то не больно и легко уже становится.
источник

RC

Roman Clor in Embedded Group
Хотя признаться мне очень не хватает в си коллекций и дженериков
источник

RC

Roman Clor in Embedded Group
Надеялся на раст, но чот как то сыро.
источник

PB

Petr Belyaev in Embedded Group
Дело вкуса и опыта. Я питон использую, хотя никакого отторжения к шарпам. ООП в питоне по сравнению с шарпами кастрированное, но в остальном причин что-то предпочитать не имею
источник