Я играл с этим последние 2 часа. Это должно быть просто, но это не сработает. Я не очень хорошо знаком с макросами, и я никогда не использовал их из-за их известной нестабильности. Но в этом случае ... Я не вижу другого лучшего способа не использовать память чипа.Arduino - Как написать макрос, который определяет используемые булавки по имени и номеру и выдавать ошибку компилятора, если штырь используется в другом месте
Я хочу, чтобы не использовать память на чипе для этого, поэтому я выбираю директивы прекомпилятора, особенно макросы. Макрос просто должен определить материал, а не возвращать что-либо. Я хочу, чтобы макрос эквивалентен этот код:
#define PIN3 = 13;
#define PINLED = 13;
И он должен называться так:
P(13,LED);
Так что, как я могу ссылаться PINLED в моем коде и получить ошибку компиляции, если таковые имеются другая библиотека или код, который я использую, используют PIN13, когда я помещаю P (13, LED) в верхнюю часть всех файлов, которые используют этот вывод в моем проекте. Я хочу что-то, что называет все контакты одинаково.
Я хочу 2 константы/определяет быть «определен» так PIN13 вызовет ошибку компиляции, но PINLED может быть назван другим во многих проектах
Я попытался это:
#define P(no_,name_) \
if (true) { \
PIN##name_ = no_; \
PIN##no_ = no_; \
}\
else true
это работает но только 1 определяет вместо 2:
#define P(no_,name_) PIN##name_ = no_
Это было предложено многими как правильный синтаксис. Я также пробовал с do ... while (0) синтаксис и другие трюки, поэтому я могу использовать макрос как функцию с; после него, но он не работает и всегда вызывает некоторую ошибку.
Я использую проект Ino для сборки, потому что я не могу жить с Arduino IDE, который является чистым дерьмом по сравнению с другими IDE.
Только что нашел это, я думаю, это невозможно сделать с определениями внутри определяет. http://stackoverflow.com/questions/6148066/preprocessor-directives-inside-define Но это может быть сделано с помощью функции int const. – Graben