Проблема:
Я пишу общую библиотеку C для LCD в проекте микроконтроллера. Можно добавить до 8 ЖК-дисплеев с различными размерами (например, 128 * 96 или 64 * 48) по разным адресам (например, LCD3 и LCD7). но только один из них активно кодируется одновременно. поэтому я подумал, что для этого нужно сделать механизм.
в коде есть определение для CLCD_ROWS и CLCD_COLS, которые соответствуют размеру активного экрана.
#define CLCD_ROWS // Active LCD rows
#define CLCD_COLS // Active LCD columns
и есть определения дляразличные ЖК-дисплеи. например, если у нас подключены LCD3 и LCD7, мы определяем их размеры с помощью:
#define CLCD_ROWS3 96
#define CLCD_COLS3 64
#define CLCD_ROWS7 128
#define CLCD_COLS7 32
Вопрос:
Я написал [неправильный] макросчтобы переопределить значения CLCD_ROWS и CLCD_COLS:
#define cLcd_setActiveI2CcLcd(X) \
CLCD_ROWS = CLCD_ROWS##X \
CLCD_COLS = CLCD_COLS##X
, и в моем основном коде я вызываю макрос:
cLcd_setActiveI2CcLcd(7);
, который дает мне ошибку «отсутствует;».
это легко реализовать с помощью переменных. но так как эти значения жестко запрограммированы, я подумал, что они «предварительно обрабатываются», поскольку нуждаются в каждом бите ОЗУ в младшем микроконтроллере.
- Мой подход к предварительной обработке этих значений верен?
- Как правильно написать макрос для этой цели?
Я использую компилятор C99.