Информация об изменениях

Сообщение Re[18]: Rust и экология от 25.02.2022 7:03

Изменено 25.02.2022 7:14 ArtDenis

Re[18]: Rust и экология
Здравствуйте, alex_public, Вы писали:

_>Ну это дело вкуса уже. В любом случае думаю ты не будешь спорить, что приведённый пример просто в разы компактнее и проще, чем портянка генерируемая Кубом.


Думаю, это дело привычки. Куба нету, чтобы проверить )

_>Я с этим и не спорил (более того, именно это я и заявлял изначально). Только вот можно увидеть готовые библиотеки (скажем для STM32) на C++, написанные в подобном же современном стиле?


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

Но на то они и С++-ники, чтобы городить свой велосипед. У меня своя либа практически на всю периферию STM32 + набор шаблонов для разных устройств (экраны, память, радио, точскрины и т.п.), которые параметризуются шаблонами периферии.

Та же инициализация порта GPIOB у меня выглядит как

PC::clock_on();


В целом использование либы выглядит примерно так:

// Объявляем перифирию для подключения к дисплею
using DisplayCSPin    = PA1;
using DisplayResetPin = PA2;
using DisplayDCPin    = PA3;
using DisplayMisoPin  = PA6;
using DisplaySckPin   = PA5;
using DisplayMosiPin  = PA7;
using DispSpi         = Spi1;
using DispDma         = Dma2_Stream2;

...

// далее идут уже другие либы (тоже шаблонные)

// тип подключения к дисплею
using DispSpiConn = mgfxpp::HardSpiDma6WireConnection<
    DisplayResetPin, 
    DisplayCSPin, 
    DisplayDCPin, 
    DispSpi, 
    DispDma
>;

...

// тип дисплея
using Display = mgfxpp::ili9341_display<DispSpiConn, DelayForDisplay>;

// реализация дисплея - 16 бит, частичная отрисовка в буфер по 64 строки
MGFXPP_DISPLAY_PART_BUF_565_IMPL(Display, 64)

...


// тут инициализируем почти всю периферию, которая участвует в подключении кроме SPI. Его отдельно
DispSpiConn::init();
Re[18]: Rust и экология
Здравствуйте, alex_public, Вы писали:

_>Ну это дело вкуса уже. В любом случае думаю ты не будешь спорить, что приведённый пример просто в разы компактнее и проще, чем портянка генерируемая Кубом.


Думаю, это дело привычки. Куба нету, чтобы проверить )

_>Я с этим и не спорил (более того, именно это я и заявлял изначально). Только вот можно увидеть готовые библиотеки (скажем для STM32) на C++, написанные в подобном же современном стиле?


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

Но на то они и С++-ники, чтобы городить свой велосипед. У меня своя либа практически на всю периферию STM32 + набор шаблонов для разных устройств (экраны, память, радио, точскрины и т.п.), которые параметризуются шаблонами периферии.

Та же инициализация порта GPIOB у меня выглядит как

PB::clock_on();


В целом использование либы выглядит примерно так:

// Объявляем перифирию для подключения к дисплею
using DisplayCSPin    = PA1;
using DisplayResetPin = PA2;
using DisplayDCPin    = PA3;
using DisplayMisoPin  = PA6;
using DisplaySckPin   = PA5;
using DisplayMosiPin  = PA7;
using DispSpi         = Spi1;
using DispDma         = Dma2_Stream2;

...

// далее идут уже другие либы (тоже шаблонные)

// тип подключения к дисплею
using DispSpiConn = mgfxpp::HardSpiDma6WireConnection<
    DisplayResetPin, 
    DisplayCSPin, 
    DisplayDCPin, 
    DispSpi, 
    DispDma
>;

...

// тип дисплея
using Display = mgfxpp::ili9341_display<DispSpiConn, DelayForDisplay>;

// реализация дисплея - 16 бит, частичная отрисовка в буфер по 64 строки
MGFXPP_DISPLAY_PART_BUF_565_IMPL(Display, 64)

...


// тут инициализируем почти всю периферию, которая участвует в подключении кроме SPI. Его отдельно
DispSpiConn::init();