189 похожих чатов

Прошу прощения за возможно глупый вопрос, но все же. Есть

какие-то рекомендации по тому, как в пределах проекта организовывать зависимости между файлами? Просто столкнулся с тем что нужно написать как можно более легко портируемую библиотеку (обязательные условия - api интерфейса связи микроконтроллера и чипа - cmsis-driver I2c, а так же api cmsis-os2 для всех функций ос) для одного чипа и застрял на прерываниях. Функции-обработчики прерываний от периферии микроконтроллера живут вроде бы в отдельном своем файле. В файлах моей библиотеки есть функция обработчик события. Осталось совместить, но как то я не уверен что в лоб в файле с обработчиками прерываний писать #include "Stupid_library.h" это красиво. Вообще накопать какую-то литературу с примерами по архитектуре по для микроконтроллеров оказалось не так просто.. Да и висит вся эта история на i2c который могут и другие потоки использовать. Логика шепчет что нужен мутекс, но как и где его создать и передать кому и куда непонятно
Сейчас нашел книжку Embedded Systems Architecture (Daniele Lacamera), но если у кого-то есть пример организации проекта, то это было бы очень кстати

7 ответов

12 просмотров

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

Maxim-Khodnenko🌈 Автор вопроса
Serg
Низкоуровневый драйвер i2c, использующий мютекс -...

получается, стоит завести на каждый физический интерфейс по потоку?

если потокобезопасное,то можно иметь слой драйверов для операционки,как это сделано в esp idf

Maxim-Khodnenko🌈 Автор вопроса
Serg
Низкоуровневый драйвер i2c, использующий мютекс -...

Вроде как реализация драйвера у меня есть, cmsis-driver. Сделать для него прослойку, в которой инициализировать мютекс и интерфейс через который потоки смогут перехватывать контроль над i2c в принципе можно..

Maxim-Khodnenko🌈 Автор вопроса
Roman
если потокобезопасное,то можно иметь слой драйверо...

Хотелось бы да, потокобезопасное. В идеале еще и всю "бизнес-логику" вынести в непривилегированные потоки

Вызов interrupt call back тз прерывания, их по месту надо будет вставлять и вск

Maxim-Khodnenko🌈 Автор вопроса
Andrey Ermakov
Вызов interrupt call back тз прерывания, их по мес...

Ну получается что нужно создать ещё один уровень, который будет иметь доступ к библиотеке, связанной с чипом (чтобы взять оттуда функцию обратного вызова) и доступ к всякому там hal_exti для структур, связанных с прерываниями. Что-то такое и думал, спасибо:)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта