|
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
|
||||||||||||||||||||||||||
Удаление токена из макроса. Возможно ли?21.06.2025, 16:05. Показов 5703. Ответов 34
Метки нет (Все метки)
Всем привет.
В си есть оператор для вставки токена в макрос для определения нового макроса:
Но возможно ли не вставлять, а наоборот, удалять токен из макроса??? Нужно чтобы при вызове макроса добавлялся другой макрос по маске. т. е. если я использую аргумент num1, то из этого аргумента нужно убрать последний токен (или несколько), а затем к нему нужно добавить заданный токен. Чтобы получилась вот такая упрощённая конструкция:
0
|
||||||||||||||||||||||||||
| 21.06.2025, 16:05 | |
|
Ответы с готовыми решениями:
34
Получение токена (OAuth 2.0) Qt 5.3 Функция токенизирования строк
|
|
фрилансер
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,261
|
|
| 22.06.2025, 08:02 | |
|
Mr McLaren, вместо макросов сделай функции. Макросами лучше не пользоваться.
0
|
|
|
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
|
|||
| 22.06.2025, 11:17 [ТС] | |||
|
тем более что функция всё равно не решает вопрос. И есть даже библиотечные функции. Вы невнимательно читали. Да, я и сам не люблю изобилие макросов, но если применение оправдано, то от них только польза.
0
|
|||
|
фрилансер
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,261
|
||||
| 22.06.2025, 11:40 | ||||
0
|
||||
|
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
|
|||
| 22.06.2025, 11:59 [ТС] | |||
|
Функция требует дополнительных операций: пропись аргументов, вызов функции, обработку данных, выполнение требуемой операции. А макрос использует только последнее и воздействует непосредственно на регистры. Что в несколько раз повышает быстродействие пина. Добавлено через 4 минуты Кто-то switch не любит... Всё хорошо, если пользоваться с умом.
0
|
|||
|
фрилансер
6489 / 5717 / 1133
Регистрация: 11.10.2019
Сообщений: 15,261
|
|||||
| 22.06.2025, 12:05 | |||||
|
Mr McLaren, насколько я понял, доступ к портам там организован в C++ в виде указателей на объекты.
Например, имя GPIOA - это указатель на порт A.Индексы битов пронумерованы в виде макросов а это обращение к регистру BSRR данного порта GPIOA->BSRR;а это установка бита №5 в регистре порта GPIOA->BSRR = GPIO_PIN_5;И что мешает сделать своё имя для порта? auto* MyName = GPIOA;Или даже для регистра auto& MyReg = GPIOA->BSRR;и свой номер для бита auto MyBit=GPIO_PIN_5;и затем MyName->BSRR |= MyBit;или MyReg |= MyBit;----------- Добавлено через 1 минуту Но мне не попадалось случаев, когда я мог его применить. Он как бы просто не особо нужен Добавлено через 4 минуты
0
|
|||||
|
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
|
||||
| 22.06.2025, 12:32 [ТС] | ||||
|
Я не за этим сюда пришёл. Всё таки STM32 я уверен что знаю намного лучше вас. Но нужно привязаться к уже созданным макросам. Всё что здесь приводили по существу вопроса - я и так уже давно проходил и без проблем могу сделать. Ещё раз повторяюсь. Суть вопроса - привязаться к уже созданным кодогенератором макросам MyName_Pin и автоматически подтягивать к нему макрос MyName_GPIO_Port (он же GPIOX). Всё. только это меня интересует. Если это невозможно, то тема просто закрыта.
0
|
||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 22.06.2025, 13:12 | ||
|
Но у вас есть среда разработки + сторонние программы помошники, ещё, раз. Можете в два клика писать подобную ересь автоматически. 21 век, они макросы мучают. Точнее макросы на макросы на макросы. Вот это я понимаю уровень!
0
|
||
|
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
|
||||
| 22.06.2025, 13:23 [ТС] | ||||
|
0
|
||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 22.06.2025, 13:32 | ||
|
Я всё понимаю, мк, макс. производительность в приоритете. Два Но это не повод впадать в ересь на ровном месте.
0
|
||
|
Нарушитель
622 / 380 / 67
Регистрация: 09.03.2016
Сообщений: 4,172
|
|
| 22.06.2025, 14:13 | |
|
0
|
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
|
|||||||||||||||||||||||||||
| 22.06.2025, 14:37 | |||||||||||||||||||||||||||
|
вся периферия раскидана по карте памяти( и все остальное) память занимает 4 гБ. и все биты имеют конкретные адреса, а вот потом это завернуто структурами и макросами вот например RCC
![]() файл карты памяти для ознакомления
0
|
|||||||||||||||||||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 22.06.2025, 14:48 | |||
|
Кому тут, в этой ветке, ознакамливаться с "этим" ? =)) Добавлено через 2 минуты И так уже всем понятно что тема от извращенца к извращенцам.
0
|
|||
|
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
|
||
| 22.06.2025, 14:51 [ТС] | ||
|
Ну или другими словами она называется стандартная библиотека периферии CMSIS. Чтобы вместо "магических цифр" как раз и пользоваться данными макросами. библиотека HAL написана поверх данной библиотеки. Поэтому в STM32 без макросов априори невозможно.
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 22.06.2025, 14:56 | ||
|
Но посыл ты не уловил и не желаешь. Что тебе это не нужно. Проблема - это то что не решается. У тебя все решаемо вызовом стандартной функции/макроса. О чем тут ещё говорить. А твои хотелки, ну видишь, макросам и разработчикам плевать на твои хотелки. По вполне понятным причинам. Добавлено через 1 минуту Писатели для МК и Эмбедет - это реальные придури. Но наверное только те кто на форумы ходит.
0
|
||
|
1 / 1 / 0
Регистрация: 02.10.2021
Сообщений: 83
|
|||||||||||||||||||||||||||||||
| 22.06.2025, 21:19 [ТС] | |||||||||||||||||||||||||||||||
|
Ну кстати, ребята!
Мне в голову пришло такое решение. Макросы, созданные кубом.
Что после "демакросизации" выражения принимают чистые значения:
Минусом такого способа является то, что на каждый пин нужно ещё дополнительно вручную наплодить по 1 макросу. Но зато в аргументе присутствует макрос созданный кодогенератором. Это даёт возможность отследить использование в коде данного пина. т. е. контроль вернулся. Многие конечно щас закидают меня камнями. Но я уже припас здоровенный щит чтобы укрываться ![]() А с другой стороны. Ну а как ещё то!!!??? Я и просил привести пример без создания лишних макросов. И да, кстати. Знал бы что в итоге обсуждение выльется непосредственно про STM, то и создал бы тему именно там. Если модераторы перенесут эту тему туда, я буду только за! Пойду учить ребят из STM как правльно писать библиотеки
0
|
|||||||||||||||||||||||||||||||
| 22.06.2025, 21:19 | |
|
Разбить СString на токены Ошибка: непредвиденный токен Токенизация, разделение текста на слова Алфавитно-частотный словарь на основе односвязного списка с применением токенов Как редактировать токены функции strtok? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача
Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
Сигнатура
func Fetch(urls string, maxConcurrent int) Result
Пример
urls :=. . .
|
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition)
Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
|
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
|
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool
Worker Pool — паттерн конкурентной обработки задач в Go.
Суть: фиксированное количество горутин-воркеров читают задачи из общего канала
и пишут результаты в общий канал результатов. . . .
|
|
[golang] Pipeline
alhaos 08.06.2026
Pipeline
Pipeline — паттерн конкурентной обработки данных в Go.
Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
|
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь
lIs4oanZS9Y
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|