Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задачка усложнилась :о) #define var to str
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК
Trashy_2
Вечер добрый.
Запутался в дефайнах.
Дефайном определено число 48 как dWorkLine .
Далее, другим дефайном хочу состряпать строку, в которую входит число 48 в виде текста.
Должно получиться так: "\e[48;1H" с возможностью менять 48 на любые другие числа.
Вызов должен быть без передачи переменных или констант в таком виде sComandLine().
Код
#define dWorkLine  48
#define svComandLine(vROW_Z) Serial2.print("\e["#vROW_Z";1H");

В таком виде не работает:
Код
#define sComandLine() svComandLine(dWorkLine)


Так работает:
Код
#define sComandLine() svComandLine(48)


В общем, как заставить работать первый вариант?

вопрос снят

https://stackoverflow.com/questions/1264898...ber-to-a-string

В рабочем варианте заменил
Код
#define dWorkLine  48

на
Код
#define dWorkLine  48+6

И опять всё накрылось...
megajohn
#define STR(s) #s
#define ANSI_STR(s) STR(s) // только через двойной макрос можно #define QQQ 222 превратить в "222". Пример sprintf( ANSI_STR(QQQ) "=%d", ...
scifi
Цитата(Trashy_2 @ Jan 22 2018, 16:48) *
В рабочем варианте заменил
Код
#define dWorkLine  48

на
Код
#define dWorkLine  48+6

И опять всё накрылось...

Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки.
Trashy_2
Цитата(scifi @ Jan 22 2018, 18:12) *
Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки.

Я опечален.
А как состряпать нужные "стринги" на этапе компиляции?
Я хреновый программист, поэтому от чистого сердца спрашиваю. sprintf вроде как время контроллера жрёт и память...
adnega
Цитата(Trashy_2 @ Jan 22 2018, 18:50) *
А как состряпать нужные "стринги" на этапе компиляции?

Внешней утилитой.
_pv
Цитата(scifi @ Jan 22 2018, 22:12) *
Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки.

зато умеет компилятор
https://stackoverflow.com/questions/6713420...824971#26824971
но правда таким образом, что лучше бы не умел.

Цитата
А как состряпать нужные "стринги" на этапе компиляции?

самому поработать препроцессором.
скриптом на любом понравившимся скриптовом языке, который будет автоматически генерить .h файл
amiller
Цитата(scifi @ Jan 22 2018, 18:12) *
Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки.

Я давно-давно (ещё до ARM-ов) начал использовать такой способ.
Размещаю основную структуру константных данных (элементы инициализации, диапазоны изменения, строковые описатели) в ассемблерном файле.
Мне тоже понадобилось делать подсчёт разных элементов внутри структуры.
Так вот, в ассемблере это достаточно легко, примерно так:
CODE
PAR_COUNT SET 0 ; Номер параметра
...
PAR_COUNT SET PAR_COUNT + 1 ; Следующий параметр
...
PAR_COUNT SET PAR_COUNT + 1 ; Следующий параметр
...
В любой момент значением этого счётчика можно с помощью компилятора инициализировать константу, а потом использовать где угодно.
CODE
device:
DC8 A_LEN, 32
DC16 PAR_COUNT
scifi
Цитата(amiller @ Jan 23 2018, 10:16) *
Я давно-давно (ещё до ARM-ов) начал использовать такой способ.

В сях для этого и не только можно использовать метод X Macro.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.