|
82 / 2 / 0
Регистрация: 10.02.2024
Сообщений: 165
|
||||||
Как вы заменяете удобство классов С++ на СИ, при программировании под МК04.01.2025, 11:46. Показов 3775. Ответов 60
Метки нет (Все метки)
Всем доброго дня.
*(Хотя, кажется в этой ветке сидит одна небольшая группа людей, которые дают ответы на все мои вопросы. Спасибо вам, большое!) ------------------------------------- В общем, ситуация такая: Начинал я программировать на с++ в arduino ide. Привык к работе с классами их удобству. Но, чтобы отстыковаться от arduino в принципе, начал изучение и потихоньку заменял ардуиовский фукнционал сишным кодом. Все получалось хорошо, пока не дошел до темы классов. До этого думал, что классы легко заменяются стурктурами и будут так же удобны в использовании, да еще и более эффективны. Но Оказалось, что эффективность теряется, когда, в стремлении за удобством, я каждую функцию "класса" добавляю через указатель в структуру, чтобы было удобно использовать через точку
Не говоря про кучу остальной работы с указателями при попытке создать класс на структуре, читаемость кода сильно падает, в сравнеии в классами на с++. Так же видел варинаты, что к струткуре "класса" прописываются функции, к названию которых добавляется название "класса", чтобы в программе не пересекались имена. И вызывается функция, в которую передается указатель на структуру. Но это же тоже много лишних символов в коде появляется. -------------------------------------- Проекты у меня большие, разбиваю их на разные файлы по ~300 строк кода, каждый файл это какой-то самостоятельный модуль и реализовывать его через класс, одно удовольствие. В проекте обучно около 10 таких отдельных модулей. Т.е. программа большая. Но я теперь в тупике и не знаю что делать. Без классов на с++ программа станет сильно менее читаемой. А оставаясь на си, я вроде как теряю какие-то приемущества в низкоуровневости и быстродейсвии СИ на МК. И в итоге, вопрос: как вы, опытные разработчики МК, решаете этот вопрос? Какие "парадигмы" используете при написании больших программ на СИ? Или вообще на СИ переходит нет прям какой-то необходимости? Или есть? ![]() В общем, прошу, высказать, ваше мнение. -------------------------------------- *Так же на вопрос "зачем мне вообще использовать классы на мк". У меня кажды программа сильно похожа на предыдущую, только меняется количство подключенной переферии. А сейчас я сделал такую модель , что есть 1 центральный контроллер, и он может общаться с любым количеством дочерних. На каждом дочернем одна программа, которая готова, по команде центрального, создать любой из нужных мне объектов и повесить на нужный пин. Такми образом я имею неограниченое число универсальных пинов, а на всех дочерних платах одинаковй код. И такая универсальность очень тесно завязана на классах. Вот именно, при мыслях о переходе с классов на структуры у меня и возникли проблемы.
0
|
||||||
| 04.01.2025, 11:46 | |
|
Ответы с готовыми решениями:
60
В чём удобство классов? (Общая тема (дискуссионная) Смерть под обломками за удобство Как записать файл объекты разных классов, чтобы при их считывании с файла сохранялись характеристики объектов классов |
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
|||||||
| 08.01.2025, 23:10 | |||||||
0
|
|||||||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
|
| 08.01.2025, 23:18 | |
|
А почему? Помоему очень повышает читаемость кода
0
|
|
|
|
|
| 08.01.2025, 23:40 | |
|
Помимо этого, в аргументы можно передать всякое и компилятор не поперхнётся.
И только потом вы когда-нибудь обнаружите, что вот у того регистра такого-то бита и в помине не было, опечатка, которую никто не заметил, а компилятор не имел возможности отследить. Или что данные разных типов были приведены для совершения операции к какому-то типу по разумению компилятора и получился нежданчик. Но не при написании, а при эксплуатации. Это потенциальный баг.
0
|
|
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,074
|
|||||||
| 08.01.2025, 23:43 | |||||||
0
|
|||||||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
||||||
| 08.01.2025, 23:43 | ||||||
|
Ну так используя первоначальную конструкцию
0
|
||||||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,074
|
||
| 08.01.2025, 23:45 | ||
|
0
|
||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
||||||||||||
| 08.01.2025, 23:49 | ||||||||||||
0
|
||||||||||||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,074
|
|
| 08.01.2025, 23:50 | |
|
И как же он рулит? Вот есть запись
RCC->APB1PCENR |= RCC_IOPAEN;. Как ваш хваленый С++ узнает, что IOPAEN относится не к APB1, а к APB2? В хедерах он описан просто как #define RCC_IOPAEN ((uint32_t)0x00000004). Предлагаете переписать 5000 строк однообразных дефайнов? Вот уж удобство так удобство.
0
|
|
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,074
|
|||
| 08.01.2025, 23:57 | |||
|
0
|
|||
|
|
|
| 08.01.2025, 23:59 | |
|
Компания нанавистников cube, hal и прочих библиотек, во главе с эдди, чтоб ему вечно в бане сидеть, годами втирает, что тысячи строк готового кода от производителя - отстой. Так что всё в русле.
0
|
|
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,074
|
|||
| 09.01.2025, 00:04 | |||
|
Добавлено через 2 минуты
0
|
|||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
|||||||
| 09.01.2025, 00:06 | |||||||
0
|
|||||||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
|||||||
| 09.01.2025, 00:06 | |||||||
0
|
|||||||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,074
|
||||||||
| 09.01.2025, 00:13 | ||||||||
|
Для сравнения, как я делал давным-давно, когда еще активно писал под AVR:
0
|
||||||||
|
|
|
| 09.01.2025, 00:18 | |
|
COKPOWEHEU, у нас тоже.
Разница в том, что с макросами вы оставляете место для будущих ошибок. Но вам можно. А нам нельзя. Однажды обнаруженное никогда не должно повториться.
0
|
|
| 09.01.2025, 00:18 | |
|
Как рассчитываются задержки в функции Delay_ms при программировании на ATmega32? Что в программировании подразумевается под объединением? Пропадает гаджет-часы при изменении масштаба шрифтов и значков (Удобство чтения с экрана) Программировании сенсорного дисплея для планшетного компьютера под Windows 7 Как лучше делить приложение при программировании в WF? А то кодовая каша получается. Вообще читать невозможно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|