STM32 Как избавиться от HAL и перейти на С++

Kir

★✩✩✩✩✩✩
28 Мар 2020
69
16
"Объе́ктно-ориенти́рованное программи́рование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования"
К данному определению из ru.wikipedia.org есть вопросы. Например, почему для вывода определения используется такой термин как "класс", ведь сам по себе класс - это представление объекта, которое используется для реализации парадигмы, своеобразная рекурсия получается. На эту тему долго можно рассуждать, на мой взгляд более корректное определение дается на en.wikipedia.org.

Ну и самый интересный вопрос, зачем эти классы нужны? Вам не кажется. что они как раз очень напоминают HAL с ее тяжеловесными функциями и огромным оверхедом?
Вы себе ставите задачу переписать HAL в виде классов?
Так как вопрос адресован не мне, я позволю себе его немного перефразировать, и попытаться ответить.
Стоит ли переписывать HAL (в данном случае от ST), в виде классов, или это бесполезная трата времени?
ответ: на мой взгляд, если основной инструмент разработки ПО - С++, то да, стоит. Чтобы использовать возможности языка без оглядки на совместимость с С при каждом вызове функции или метода. С и С++ - это разные языки, и для компиляции используются разные компиляторы. Да, во многих случаях код написанный на С соберется и на С++, и даже будет работать, но есть тонкие места, где поведение С компилятора и С++ будут различны. Например, не самое тонкое, но для программиста не привыкшего к С++ может быть поначалу не очевидным, например: union от структур, если в С все прозрачно и очевидно, то для С++ может возникать много вопросов, так как семантически struct в С++ это класс.
В продолжении ответа, для реализации классов вовсе нет необходимости отказываться от HAL, который предлагает ST, можно все это обернуть в свои классы. Такой очевидный, на первый взгляд, overhead может показаться абсолютно бессмысленным, но, если такая обертка будет хорошо спроектирована, то сам overhead будет не значительным, или его не будет вовсе, а вопрос о замене аппаратной части устройства будет значительно проще решаться. Причем замене не просто с STM32F1xx на STM32F4xx (эту задачу HAL ST и должен решать) например, а на любой другой МК, например от TI или Microchip. Потому что такая обертка позволит абстрагировать логику прибора от аппаратной части и реализаций предоставляемых вендором. Справедливости ради, стоит сказать, что абстракции можно и на С реализовать, в том числе с применением, горячо обсуждаемого, ООП.
 

Stamp

★✩✩✩✩✩✩
12 Янв 2021
61
33
Чип имеет 8кб флэша. Делаем на HAL начальную инициализацию. Тактовый генератор и пару периферий.
Остаётся под наш код 1Кб флеша. И всё. А то же самое на классах. Т.Е. ВСЯ работающая прошивка занимает 6Кб.
 
Изменено:

CoBa31Rus

✩✩✩✩✩✩✩
25 Дек 2023
4
0
Ах любимый холивар =) если вам нужно без hal самый простой способ это platform io там почти во всех stm можно выбрать cmsis и получить минимум кода самым коротким путем.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,327
960
58
Марий-Эл
@CoBa31Rus, Вы просто не видели развитие этого проекта. А он не заглох. И занимаюсь им не один я уже.
Нашлись те, кого зацепило. Задача не просто избавиться от HAL, но перейти на С++
Для написания с помощью CMSIS, PlatformIO нахрен не нужен.
 

CoBa31Rus

✩✩✩✩✩✩✩
25 Дек 2023
4
0
@Эдуард Анисимов, мда, для плюсов и cmsis в том числе и ваш проект нахрен не нужен, да и вообще много чего не нужно. Я просто напомнил про удобный и минимальный инструмент
 

megavolt2024

✩✩✩✩✩✩✩
28 Янв 2024
1
0
Здравствуйте!
Увидел интересную беседу на счет оптимизации и улучшения работы кода, при программировании STM32.
Собственно вот что хочу сказать и спросить:
Сейчас подключаю дисплей LCD128x64 к STM32F103C6T6. Я уже мозг сломал, мучаюсь и ничего не выходит, ставится куча библиотек, дополнительных файлов. Внутри эти файлы еще нужно тоже поправить в некоторых местах (с расширениями .h , .c). На инициализацию дисплея по идее нужно примерно 20 строк кода, далее отправка информации (графики) на дисплей.
Глядя на все это (а файлов набралось около 15 штук) мне хочется все это порезать и оставить только нужное, конкретно для примера.

Теперь вопрос:
1. Можно ли в STMcube IDE отрезать лишнее в файлах или файлы соединять (ну чтобы легче самому читать) для уменьшения избыточной информации?
2. Почему для подключения обычного дисплея нужно целый день исполнять шаманские танцы и не добиться результата (дисплей так и не заработал) ?

Может глупость спросил , но к сожалению с STM cube IDE у меня печальный опыт. До этого работал с Arduino (там все как конструктор более-менее). Еще раньше работал с Atmel 8-разрядными в AvrStudio, там все было прекрасно - регистры и все в таком духе. А здесь в STM cube IDE уже перестаю понимать детали, все в каких-то абстракциях.
Подскажите, может подход не правильный к этой среде у меня. Сам электронщик, а программирование - прикладное.
Спасибо !