|
82 / 2 / 0
Регистрация: 10.02.2024
Сообщений: 165
|
||||||
Как вы заменяете удобство классов С++ на СИ, при программировании под МК04.01.2025, 11:46. Показов 3771. Ответов 60
Метки нет (Все метки)
Всем доброго дня.
*(Хотя, кажется в этой ветке сидит одна небольшая группа людей, которые дают ответы на все мои вопросы. Спасибо вам, большое!) ------------------------------------- В общем, ситуация такая: Начинал я программировать на с++ в arduino ide. Привык к работе с классами их удобству. Но, чтобы отстыковаться от arduino в принципе, начал изучение и потихоньку заменял ардуиовский фукнционал сишным кодом. Все получалось хорошо, пока не дошел до темы классов. До этого думал, что классы легко заменяются стурктурами и будут так же удобны в использовании, да еще и более эффективны. Но Оказалось, что эффективность теряется, когда, в стремлении за удобством, я каждую функцию "класса" добавляю через указатель в структуру, чтобы было удобно использовать через точку
Не говоря про кучу остальной работы с указателями при попытке создать класс на структуре, читаемость кода сильно падает, в сравнеии в классами на с++. Так же видел варинаты, что к струткуре "класса" прописываются функции, к названию которых добавляется название "класса", чтобы в программе не пересекались имена. И вызывается функция, в которую передается указатель на структуру. Но это же тоже много лишних символов в коде появляется. -------------------------------------- Проекты у меня большие, разбиваю их на разные файлы по ~300 строк кода, каждый файл это какой-то самостоятельный модуль и реализовывать его через класс, одно удовольствие. В проекте обучно около 10 таких отдельных модулей. Т.е. программа большая. Но я теперь в тупике и не знаю что делать. Без классов на с++ программа станет сильно менее читаемой. А оставаясь на си, я вроде как теряю какие-то приемущества в низкоуровневости и быстродейсвии СИ на МК. И в итоге, вопрос: как вы, опытные разработчики МК, решаете этот вопрос? Какие "парадигмы" используете при написании больших программ на СИ? Или вообще на СИ переходит нет прям какой-то необходимости? Или есть? ![]() В общем, прошу, высказать, ваше мнение. -------------------------------------- *Так же на вопрос "зачем мне вообще использовать классы на мк". У меня кажды программа сильно похожа на предыдущую, только меняется количство подключенной переферии. А сейчас я сделал такую модель , что есть 1 центральный контроллер, и он может общаться с любым количеством дочерних. На каждом дочернем одна программа, которая готова, по команде центрального, создать любой из нужных мне объектов и повесить на нужный пин. Такми образом я имею неограниченое число универсальных пинов, а на всех дочерних платах одинаковй код. И такая универсальность очень тесно завязана на классах. Вот именно, при мыслях о переходе с классов на структуры у меня и возникли проблемы.
0
|
||||||
| 04.01.2025, 11:46 | |
|
Ответы с готовыми решениями:
60
В чём удобство классов? (Общая тема (дискуссионная) Смерть под обломками за удобство Как записать файл объекты разных классов, чтобы при их считывании с файла сохранялись характеристики объектов классов |
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
|||||||
| 09.01.2025, 00:22 | |||||||
0
|
|||||||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
||
| 09.01.2025, 00:25 | ||
|
Добавлено через 1 минуту Alex1126, у вас форум не обновляется? Три раза одно и то же послали.
0
|
||
|
1507 / 524 / 75
Регистрация: 22.09.2023
Сообщений: 1,654
|
||
| 09.01.2025, 00:36 | ||
SETBIT(PORTA, condition ? CS1_BIT : CS2_BIT); делает вовсе не то, что хотел программист, который забыл внутри макроса заключить параметр в скобочки.
0
|
||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
|
| 09.01.2025, 00:39 | |
|
Вам не говорили, что оптимизировать надо узкое место, а не какое попало? И с защитами то же самое. Вы придумали какую-то проблему, которая возникает примерно никогда, и гордитесь, что решили.
0
|
|
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
|||
| 09.01.2025, 00:45 | |||
|
Добавлено через 2 минуты
0
|
|||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
|||||||
| 09.01.2025, 00:46 | |||||||
|
Вы бы лучше предложили удобную настройку таймера или АЦП - где каналы разбросаны по нескольким регистрам. В случае таймера 1,2 в CHCTLR1, а 3,4 в CHCTLR2.
0
|
|||||||
|
|
|
| 09.01.2025, 00:46 | |
|
COKPOWEHEU
Это был ответ на вопрос, что плохого в макросах. Вы можете писать как угодно, никто вас не принуждает. И спросу с вас тоже никакого. Куб полное зло, а тонны макросов и констант от того же производителя - добро. Их же нам переписать слишком сложно, поэтому примем как есть.
0
|
|
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
|||||||||
| 09.01.2025, 00:55 | |||||||||
0
|
|||||||||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
||
| 09.01.2025, 00:58 | ||
|
0
|
||
|
1507 / 524 / 75
Регистрация: 22.09.2023
Сообщений: 1,654
|
||||||||
| 09.01.2025, 01:03 | ||||||||
0
|
||||||||
|
|
||||||
| 09.01.2025, 01:05 | ||||||
0
|
||||||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,367
|
||
| 09.01.2025, 01:35 | ||
|
Я не утверждаю что мой вариант самый верный. Я хотел лишь показать как дефайны могут несколько упростить жизнь.
0
|
||
|
Native x86
6860 / 3792 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 09.01.2025, 01:41 | ||
|
Макросы, состоящие из других макросов, содержащих в составе третьи макросы, выглядят круто и удобно. Но только до тех пор, пока ты где-то не ошибся. Банальный баланс скобок в выражении не свел, например. И все, пипец: вместо внятного сообщения о незакрытой скобке, компилятор вываливает тебе килобайты текста об ошибках, потому что из-за чертовой скобки развалился синтаксис тысяч строк макросов. И, стоит, заметить, что это еще в последние годы ситуация сильно улучшилась, потому что компилятор научили хотя бы разворачивать "стек" макросов, в результате чего среди многих килобайт выхлопа в stderr упоминание проблемного места хотя бы номинально присутствует. Раньше с этим было сильно хуже, компилятор просто показывал конечные синтаксические ошибки уже после разворачивания макросов, и среди них ссылки на корень проблемы вообще не было ни в каком виде.
1
|
||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
||||||||
| 09.01.2025, 10:49 | ||||||||
|
И в любом случае на Си можно сделать точно так же.
0
|
||||||||
|
1507 / 524 / 75
Регистрация: 22.09.2023
Сообщений: 1,654
|
|||
| 09.01.2025, 11:17 | |||
|
0
|
|||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
||||||||
| 09.01.2025, 11:40 | ||||||||
|
В принципе, DMA действительно тоже неплохо для примера. Там проблема в том, чтобы прописать какая периферия к каким каналам привязана и как включается - отключается. И еще было бы неплохо контролировать не пересекаются ли каналы (но тут возможны варианты). У меня делается примерно так:
0
|
||||||||
|
|
||||
| 09.01.2025, 15:46 | ||||
Всё остальное уже вы набросали на вентилятор ![]()
Можно же и на ассемблер перейти. Некоторые всё время пишут на асме и презирают этих тупых сишников и выше, которые не умеют в низкоуровневый код.
Вас не обязываю учитывать ту информацию, что я сообщил о макросах. Вы стоящих за ними проблем у себя никогда и не встретите, так что ничего страшного. А кому будет интересно, тем может пригодиться.
0
|
||||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
|||||||||||
| 09.01.2025, 16:52 | |||||||||||
|
На самом деле, если бы вы пользовались макросами более активно, вы бы знали их настоящие проблемы. И некоторые из них и правда решаются шаблонами и тому подобным. Я даже пример приведу: формирование USB-HID дескриптора. Там есть семейство параметров, которые принимают 0-3 байта в качестве аргумента. Например, USAGE_MINIMUM. Если мы хотим ему передать 0x12, то последовательность байтов будет 0x18, 0x12. Если 0x1234, то 0x19, 0x34, 0x12. Если 0x123456, то 0x20, 0x56, 0x34, 0x12. Так вот, макросы, похоже, физически неспособны ни узнать размер аргумента, ни развернуться в разное количество байтов. --- Кстати о проверках. Если уж очень хочется добавить проверку типов данных, ничего невозможного в этом нет:
0
|
|||||||||||
| 10.01.2025, 04:30 | |
|
Не по теме: По поводу классов в МК, что то поговорка вспомнилась, чем больше проводов - тем больше замыканий :)
0
|
|
| 10.01.2025, 04:30 | |
|
Как рассчитываются задержки в функции 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).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|