объявление — переменная c ++ не была объявлена ​​в этой области при расширении макроса

Уважаемые Stackoverflowers,

Я пытаюсь добавить поддержку esp32 к 3,5-дюймовому TFT-дисплею HX8357D от Adafruit (ссылка на сайт). Я сделал вилку из библиотеки из Адафрута (ссылка на сайт), который обрабатывает 8-битный параллельный интерфейс и добавил ветку esp32. Я выяснил большинство необходимых компонентов, но у меня проблемы с компиляцией кода. Может ли кто-нибудь помочь мне заставить его работать?

Я сделал эскиз Arduino с кодом, который должен быть внедрен в библиотеку:

//Not used in this sketch, but these are the 5 control pins for the TFT display
#define LCD_CS 27
#define LCD_CD 26
#define LCD_WR 25
#define LCD_RD 14
#define LCD_RESET 13

//8 data pins (random, but made sure they are all ardressable with one register)
#define DATA_PIN0 3
#define DATA_PIN1 18
#define DATA_PIN2 5
#define DATA_PIN3 17
#define DATA_PIN4 16
#define DATA_PIN5 4
#define DATA_PIN6 2
#define DATA_PIN7 15

#define DELAY     200

gpio_config_t io_conf;

//Some random data to write to the gpio pins, creates a pattern to the LED's that I connected
uint32_t data[] {
0b00000000000000001000000000001000,
0b00000000000001000000000000000100,
0b00000000000000000000000000110000,
0b00000000000000110000000000000000,
0b00000000000000000000000000000000,
0b00000000000000110000000000000000,
0b00000000000000000000000000110000,
0b00000000000001000000000000000100,
0b00000000000000001000000000001000
};

void setup() {
Serial.begin(115200);
setReadDir();
print32Bits(GPIO.in);
setWriteDir();
}

void loop() {
for (int i = 0; i < 9; i++) {
GPIO.out_w1tc = 0xFFFFFFFF;
GPIO.out_w1ts = data[i];
delay(DELAY);
}
}

//Set 8 data pins to OUTPUT
void setWriteDir() {
io_conf.intr_type = GPIO_INTR_DISABLE;
io_conf.mode = GPIO_MODE_OUTPUT;
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
io_conf.pin_bit_mask =  ((1ULL << DATA_PIN0 ) | (1ULL << DATA_PIN1) | (1ULL << DATA_PIN2) | (1ULL << DATA_PIN3) | (1ULL << DATA_PIN4) | (1ULL << DATA_PIN5) | (1ULL << DATA_PIN6) | (1ULL << DATA_PIN7)); // of course, do like this all the pins
gpio_config(&io_conf);
}

//Set 8 data pins to INPUT
void setReadDir() {
io_conf.intr_type = GPIO_INTR_DISABLE;
io_conf.mode = GPIO_MODE_INPUT;
io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
io_conf.pin_bit_mask =  ((1ULL << LCD_CS ) | (1ULL << LCD_CD) | (1ULL << LCD_WR) | (1ULL << LCD_RD) | (1ULL << LCD_RESET)); // of course, do like this all the pins
gpio_config(&io_conf);
}

//Function to print 32 bit interger to Serial, just for convenience
void print32Bits(uint32_t myByte) {
for (uint32_t mask = 0x80000000; mask; mask >>= 1) {
if (mask  & myByte) {
Serial.print('1');
} else {
Serial.print('0');
}
}
Serial.println();
}

Я добавил необходимый код в ADAFRUIT_TFTLCD.h, ADAFRUIT_TFTLCD.cpp а также pin_magic.h

Функции в pin_magic.h (write8inlin а также read8inlin) еще не полностью сделано. Я пытался скомпилировать код, чтобы проверить, правильно ли скомпилированы мои работы, но я получаю много ....was not declared in this scope ошибки.

В pin_magic.h Я имею:

#define RD_ACTIVE  GPIO.out_w1tc |=  rdPinset
#define RD_IDLE    GPIO.out_w1ts |=  rdPinSet
#define WR_ACTIVE  GPIO.out_w1tc |=  wrPinset
#define WR_IDLE    GPIO.out_w1ts |=  wrPinSet
#define CD_COMMAND GPIO.out_w1tc |=  cdPinset
#define CD_DATA    GPIO.out_w1ts |=  cdPinSet
#define CS_ACTIVE  GPIO.out_w1tc |=  csPinset
#define CS_IDLE    GPIO.out_w1ts |=  csPinSet

Первая часть ошибки, которую я получаю:

D:\ProgramData\Arduino\libraries\TFTLCD-Library\pin_magic.h:389:42: error: 'csPinset' was not declared in this scope

#define CS_ACTIVE  GPIO.out_w1tc |=  csPinset

^

D:\ProgramData\Arduino\libraries\TFTLCD-Library\Adafruit_TFTLCD.cpp:268:5: note: in expansion of macro 'CS_ACTIVE'

CS_ACTIVE;

^

Если бы кто-то с большим опытом в C / C ++ мог взглянуть на это, я был бы очень благодарен.

1

Решение

Я взглянул на твой код, ты компилируешь его на своем ПК? Похоже, компилятор игнорирует объявление csPinset и т. Д. Из-за вашего блока #ifdef —

Я не знаком со средой AVR, но я рекомендую компилировать ваш код с правильным компилятором (например, совместимым с AVR) в предполагаемой среде. Кроме того, вы также можете определить __ AVR __ во время компиляции, используя опцию -D:

г ++ < имя_файла.cpp> -D__AVR__

Чтобы убедиться, что необходимые переменные объявлены для всей среды, вы можете изменить заголовочный файл на что-то вроде этого:

#ifndef USE_ADAFRUIT_SHIELD_PINOUT

#ifdef AVR
// "Variable declaration for AVR goes here"
#elif defined SAM
//"Variable declaration for SAM goes here"
/*else block, in case ESP32 is not the correct macro name*/
#else
//"General Variables for everything else other than SAM or AVR."#endif

//in case the ADA SHIELD PINOUT is defined
#else
//"General Variables for when USE_ADAFRUIT_SHIELD_PINOUT is defined."
#endif

Это должно исправить ошибку «переменная не объявлена». Вы можете исследовать или спросить в https://arduino.stackexchange.com правильный способ настроить этот заголовок для ESP32 env.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]