|
82 / 2 / 0
Регистрация: 10.02.2024
Сообщений: 165
|
||||||
Как вы заменяете удобство классов С++ на СИ, при программировании под МК04.01.2025, 11:46. Показов 3339. Ответов 60
Метки нет (Все метки)
Всем доброго дня.
*(Хотя, кажется в этой ветке сидит одна небольшая группа людей, которые дают ответы на все мои вопросы. Спасибо вам, большое!) ------------------------------------- В общем, ситуация такая: Начинал я программировать на с++ в arduino ide. Привык к работе с классами их удобству. Но, чтобы отстыковаться от arduino в принципе, начал изучение и потихоньку заменял ардуиовский фукнционал сишным кодом. Все получалось хорошо, пока не дошел до темы классов. До этого думал, что классы легко заменяются стурктурами и будут так же удобны в использовании, да еще и более эффективны. Но Оказалось, что эффективность теряется, когда, в стремлении за удобством, я каждую функцию "класса" добавляю через указатель в структуру, чтобы было удобно использовать через точку
Не говоря про кучу остальной работы с указателями при попытке создать класс на структуре, читаемость кода сильно падает, в сравнеии в классами на с++. Так же видел варинаты, что к струткуре "класса" прописываются функции, к названию которых добавляется название "класса", чтобы в программе не пересекались имена. И вызывается функция, в которую передается указатель на структуру. Но это же тоже много лишних символов в коде появляется. -------------------------------------- Проекты у меня большие, разбиваю их на разные файлы по ~300 строк кода, каждый файл это какой-то самостоятельный модуль и реализовывать его через класс, одно удовольствие. В проекте обучно около 10 таких отдельных модулей. Т.е. программа большая. Но я теперь в тупике и не знаю что делать. Без классов на с++ программа станет сильно менее читаемой. А оставаясь на си, я вроде как теряю какие-то приемущества в низкоуровневости и быстродейсвии СИ на МК. И в итоге, вопрос: как вы, опытные разработчики МК, решаете этот вопрос? Какие "парадигмы" используете при написании больших программ на СИ? Или вообще на СИ переходит нет прям какой-то необходимости? Или есть? ![]() В общем, прошу, высказать, ваше мнение. -------------------------------------- *Так же на вопрос "зачем мне вообще использовать классы на мк". У меня кажды программа сильно похожа на предыдущую, только меняется количство подключенной переферии. А сейчас я сделал такую модель , что есть 1 центральный контроллер, и он может общаться с любым количеством дочерних. На каждом дочернем одна программа, которая готова, по команде центрального, создать любой из нужных мне объектов и повесить на нужный пин. Такми образом я имею неограниченое число универсальных пинов, а на всех дочерних платах одинаковй код. И такая универсальность очень тесно завязана на классах. Вот именно, при мыслях о переходе с классов на структуры у меня и возникли проблемы.
0
|
||||||
| 04.01.2025, 11:46 | |
|
Ответы с готовыми решениями:
60
В чём удобство классов? (Общая тема (дискуссионная) Смерть под обломками за удобство Как записать файл объекты разных классов, чтобы при их считывании с файла сохранялись характеристики объектов классов |
|
443 / 168 / 29
Регистрация: 12.12.2020
Сообщений: 1,342
|
|||||||
| 08.01.2025, 23:10 | |||||||
0
|
|||||||
|
443 / 168 / 29
Регистрация: 12.12.2020
Сообщений: 1,342
|
|
| 08.01.2025, 23:18 | |
|
А почему? Помоему очень повышает читаемость кода
0
|
|
|
|
|
| 08.01.2025, 23:40 | |
|
Помимо этого, в аргументы можно передать всякое и компилятор не поперхнётся.
И только потом вы когда-нибудь обнаружите, что вот у того регистра такого-то бита и в помине не было, опечатка, которую никто не заметил, а компилятор не имел возможности отследить. Или что данные разных типов были приведены для совершения операции к какому-то типу по разумению компилятора и получился нежданчик. Но не при написании, а при эксплуатации. Это потенциальный баг.
0
|
|
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|||||||
| 08.01.2025, 23:43 | |||||||
0
|
|||||||
|
443 / 168 / 29
Регистрация: 12.12.2020
Сообщений: 1,342
|
||||||
| 08.01.2025, 23:43 | ||||||
|
Ну так используя первоначальную конструкцию
0
|
||||||
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
||
| 08.01.2025, 23:45 | ||
|
0
|
||
|
443 / 168 / 29
Регистрация: 12.12.2020
Сообщений: 1,342
|
||||||||||||
| 08.01.2025, 23:49 | ||||||||||||
0
|
||||||||||||
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|
| 08.01.2025, 23:50 | |
|
И как же он рулит? Вот есть запись
RCC->APB1PCENR |= RCC_IOPAEN;. Как ваш хваленый С++ узнает, что IOPAEN относится не к APB1, а к APB2? В хедерах он описан просто как #define RCC_IOPAEN ((uint32_t)0x00000004). Предлагаете переписать 5000 строк однообразных дефайнов? Вот уж удобство так удобство.
0
|
|
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|||
| 08.01.2025, 23:57 | |||
|
0
|
|||
|
|
|
| 08.01.2025, 23:59 | |
|
Компания нанавистников cube, hal и прочих библиотек, во главе с эдди, чтоб ему вечно в бане сидеть, годами втирает, что тысячи строк готового кода от производителя - отстой. Так что всё в русле.
0
|
|
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|||
| 09.01.2025, 00:04 | |||
|
Добавлено через 2 минуты
0
|
|||
|
443 / 168 / 29
Регистрация: 12.12.2020
Сообщений: 1,342
|
|||||||
| 09.01.2025, 00:06 | |||||||
0
|
|||||||
|
443 / 168 / 29
Регистрация: 12.12.2020
Сообщений: 1,342
|
|||||||
| 09.01.2025, 00:06 | |||||||
0
|
|||||||
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
||||||||
| 09.01.2025, 00:13 | ||||||||
|
Для сравнения, как я делал давным-давно, когда еще активно писал под AVR:
0
|
||||||||
|
|
|
| 09.01.2025, 00:18 | |
|
COKPOWEHEU, у нас тоже.
Разница в том, что с макросами вы оставляете место для будущих ошибок. Но вам можно. А нам нельзя. Однажды обнаруженное никогда не должно повториться.
0
|
|
| 09.01.2025, 00:18 | |
|
Помогаю со студенческими работами здесь
40
Как рассчитываются задержки в функции Delay_ms при программировании на ATmega32? Что в программировании подразумевается под объединением? Пропадает гаджет-часы при изменении масштаба шрифтов и значков (Удобство чтения с экрана) Программировании сенсорного дисплея для планшетного компьютера под Windows 7 Как лучше делить приложение при программировании в WF? А то кодовая каша получается. Вообще читать невозможно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|