|
82 / 2 / 0
Регистрация: 10.02.2024
Сообщений: 165
|
||||||
Как вы заменяете удобство классов С++ на СИ, при программировании под МК04.01.2025, 11:46. Показов 4204. Ответов 60
Метки нет (Все метки)
Всем доброго дня.
*(Хотя, кажется в этой ветке сидит одна небольшая группа людей, которые дают ответы на все мои вопросы. Спасибо вам, большое!) ------------------------------------- В общем, ситуация такая: Начинал я программировать на с++ в arduino ide. Привык к работе с классами их удобству. Но, чтобы отстыковаться от arduino в принципе, начал изучение и потихоньку заменял ардуиовский фукнционал сишным кодом. Все получалось хорошо, пока не дошел до темы классов. До этого думал, что классы легко заменяются стурктурами и будут так же удобны в использовании, да еще и более эффективны. Но Оказалось, что эффективность теряется, когда, в стремлении за удобством, я каждую функцию "класса" добавляю через указатель в структуру, чтобы было удобно использовать через точку
Не говоря про кучу остальной работы с указателями при попытке создать класс на структуре, читаемость кода сильно падает, в сравнеии в классами на с++. Так же видел варинаты, что к струткуре "класса" прописываются функции, к названию которых добавляется название "класса", чтобы в программе не пересекались имена. И вызывается функция, в которую передается указатель на структуру. Но это же тоже много лишних символов в коде появляется. -------------------------------------- Проекты у меня большие, разбиваю их на разные файлы по ~300 строк кода, каждый файл это какой-то самостоятельный модуль и реализовывать его через класс, одно удовольствие. В проекте обучно около 10 таких отдельных модулей. Т.е. программа большая. Но я теперь в тупике и не знаю что делать. Без классов на с++ программа станет сильно менее читаемой. А оставаясь на си, я вроде как теряю какие-то приемущества в низкоуровневости и быстродейсвии СИ на МК. И в итоге, вопрос: как вы, опытные разработчики МК, решаете этот вопрос? Какие "парадигмы" используете при написании больших программ на СИ? Или вообще на СИ переходит нет прям какой-то необходимости? Или есть? ![]() В общем, прошу, высказать, ваше мнение. -------------------------------------- *Так же на вопрос "зачем мне вообще использовать классы на мк". У меня кажды программа сильно похожа на предыдущую, только меняется количство подключенной переферии. А сейчас я сделал такую модель , что есть 1 центральный контроллер, и он может общаться с любым количеством дочерних. На каждом дочернем одна программа, которая готова, по команде центрального, создать любой из нужных мне объектов и повесить на нужный пин. Такми образом я имею неограниченое число универсальных пинов, а на всех дочерних платах одинаковй код. И такая универсальность очень тесно завязана на классах. Вот именно, при мыслях о переходе с классов на структуры у меня и возникли проблемы.
0
|
||||||
| 04.01.2025, 11:46 | |
|
Ответы с готовыми решениями:
60
В чём удобство классов? (Общая тема (дискуссионная) Смерть под обломками за удобство Как записать файл объекты разных классов, чтобы при их считывании с файла сохранялись характеристики объектов классов |
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,368
|
|||||||
| 09.01.2025, 00:22 | |||||||
0
|
|||||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||
| 09.01.2025, 00:25 | ||
|
Добавлено через 1 минуту Alex1126, у вас форум не обновляется? Три раза одно и то же послали.
0
|
||
|
1511 / 527 / 77
Регистрация: 22.09.2023
Сообщений: 1,676
|
||
| 09.01.2025, 00:36 | ||
SETBIT(PORTA, condition ? CS1_BIT : CS2_BIT); делает вовсе не то, что хотел программист, который забыл внутри макроса заключить параметр в скобочки.
0
|
||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|
| 09.01.2025, 00:39 | |
|
Вам не говорили, что оптимизировать надо узкое место, а не какое попало? И с защитами то же самое. Вы придумали какую-то проблему, которая возникает примерно никогда, и гордитесь, что решили.
0
|
|
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,368
|
|||
| 09.01.2025, 00:45 | |||
|
Добавлено через 2 минуты
0
|
|||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|||||||
| 09.01.2025, 00:46 | |||||||
|
Вы бы лучше предложили удобную настройку таймера или АЦП - где каналы разбросаны по нескольким регистрам. В случае таймера 1,2 в CHCTLR1, а 3,4 в CHCTLR2.
0
|
|||||||
|
|
|
| 09.01.2025, 00:46 | |
|
COKPOWEHEU
Это был ответ на вопрос, что плохого в макросах. Вы можете писать как угодно, никто вас не принуждает. И спросу с вас тоже никакого. Куб полное зло, а тонны макросов и констант от того же производителя - добро. Их же нам переписать слишком сложно, поэтому примем как есть.
0
|
|
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|||||||||
| 09.01.2025, 00:55 | |||||||||
0
|
|||||||||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,368
|
||
| 09.01.2025, 00:58 | ||
|
0
|
||
|
1511 / 527 / 77
Регистрация: 22.09.2023
Сообщений: 1,676
|
||||||||
| 09.01.2025, 01:03 | ||||||||
0
|
||||||||
|
|
||||||
| 09.01.2025, 01:05 | ||||||
0
|
||||||
|
451 / 176 / 29
Регистрация: 12.12.2020
Сообщений: 1,368
|
||
| 09.01.2025, 01:35 | ||
|
Я не утверждаю что мой вариант самый верный. Я хотел лишь показать как дефайны могут несколько упростить жизнь.
0
|
||
|
Native x86
6860 / 3792 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 09.01.2025, 01:41 | ||
|
Макросы, состоящие из других макросов, содержащих в составе третьи макросы, выглядят круто и удобно. Но только до тех пор, пока ты где-то не ошибся. Банальный баланс скобок в выражении не свел, например. И все, пипец: вместо внятного сообщения о незакрытой скобке, компилятор вываливает тебе килобайты текста об ошибках, потому что из-за чертовой скобки развалился синтаксис тысяч строк макросов. И, стоит, заметить, что это еще в последние годы ситуация сильно улучшилась, потому что компилятор научили хотя бы разворачивать "стек" макросов, в результате чего среди многих килобайт выхлопа в stderr упоминание проблемного места хотя бы номинально присутствует. Раньше с этим было сильно хуже, компилятор просто показывал конечные синтаксические ошибки уже после разворачивания макросов, и среди них ссылки на корень проблемы вообще не было ни в каком виде.
1
|
||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||||
| 09.01.2025, 10:49 | ||||||||
|
И в любом случае на Си можно сделать точно так же.
0
|
||||||||
|
1511 / 527 / 77
Регистрация: 22.09.2023
Сообщений: 1,676
|
|||
| 09.01.2025, 11:17 | |||
|
0
|
|||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||||
| 09.01.2025, 11:40 | ||||||||
|
В принципе, DMA действительно тоже неплохо для примера. Там проблема в том, чтобы прописать какая периферия к каким каналам привязана и как включается - отключается. И еще было бы неплохо контролировать не пересекаются ли каналы (но тут возможны варианты). У меня делается примерно так:
0
|
||||||||
|
|
||||
| 09.01.2025, 15:46 | ||||
Всё остальное уже вы набросали на вентилятор ![]()
Можно же и на ассемблер перейти. Некоторые всё время пишут на асме и презирают этих тупых сишников и выше, которые не умеют в низкоуровневый код.
Вас не обязываю учитывать ту информацию, что я сообщил о макросах. Вы стоящих за ними проблем у себя никогда и не встретите, так что ничего страшного. А кому будет интересно, тем может пригодиться.
0
|
||||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|||||||||||
| 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? А то кодовая каша получается. Вообще читать невозможно Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|