Ошибка параллельной компиляции ESP32 TFT_eSPI 8-бит

Я компилирую библиотеку TFT_eSPI для Arduino ESP32 в 8-битном параллельном режиме. Когда я компилирую ее в режиме SPI, то ошибок не возникает, но когда я выбираю 8-битный параллельный режим в файле настроек пользователя, то появляется ошибка:

c:\Users\yamtech\Documents\Arduino\libraries\TFT_eSPI\Processors/TFT_eSPI_ESP32.c: In member function 'uint8_t TFT_eSPI::readByte()':
c:\Users\yamtech\Documents\Arduino\libraries\TFT_eSPI\Processors/TFT_eSPI_ESP32.c:113:9: error: 'gpio_input_get' was not declared in this scope; did you mean 'gpio_num_t'?
  113 |   reg = gpio_input_get(); // Read three times to allow for bus access time
      |         ^~~~~~~~~~~~~~
      |         gpio_num_t

exit status 1

Compilation error: exit status 1

Я уже использую новую среду Arduino IDE с последней платой Arduino ESP32 от Espressif, но сбой все равно происходит.

Менеджер доски объявлений: https://dl.espressif.com/dl/package_esp32_index.json

Я обнаружил, что новая версия gpio.h не содержит gpio_input_get(), но в более старых версиях эта функция есть.

, 👍-2

Обсуждение

Добро пожаловать в SE/Arduino! Ознакомьтесь с [туром], чтобы узнать, как работает этот сайт, а также прочитайте раздел «[спросить]» и другие страницы [помощи]., @the busybee

Как вы хотите решить проблему? Например, вы можете самостоятельно исправить исходный код библиотеки или создать тикет в проекте библиотеки. Если вы приняли решение, пожалуйста, вернитесь и [отредактируйте] или удалите свой вопрос., @the busybee

какой у вас конкретный вопрос? ... пожалуйста, добавьте в свой пост конкретный вопрос, на который можно ответить, @jsotola

Мой вопрос очень прост: я просто хочу решить проблему с **gpio_input_get();**, которая не определена в **gpio.h**, а эта функция используется в библиотеке 8-Bit Parallel ESP32 TFT_eSPI., @Adil Ahmed

не используйте эту функцию, тогда... «Я хочу решить...» — это не вопрос... это описание того, что вы пытаетесь сделать., @jsotola

Я старался сделать свой вопрос простым и понятным, нужна только альтернатива **gpio_input_get();**, @Adil Ahmed

в том-то и дело, что вы не задали никаких вопросов... почему вы не можете спросить какова альтернатива gpio_input_get(); ?, @jsotola


1 ответ


Лучший ответ:

1

В новом esp-idf (V5.x) конструкция GPIO не так легко доступна всем пользователям, как раньше. По этой теме есть сообщение об ошибке на GitHub idf issues 9184.

По данным Espressif, похоже, что низкоуровневый доступ к GPIO изначально не предполагался пользователям. Вместо этого это низкоуровневая библиотека, обеспечивающая быстрый доступ к выводам, напрямую используя регистры выводов. Функция gpio_input_get() отлично работает, если фреймворк ESP32 Arduino использует esp-idf v4.x, но может не работать с ядром esp-idf v5.x. По какой-то причине Espressif решила убрать её и усложнить использование.

В TFT_eSPI уже есть исправление этой проблемы, которое будет реализовано в следующем выпуске. Подробнее об этом можно узнать в ошибке № 2628. Тем временем вы можете вручную заменить файл Processors/TFT_eSPI_ESP32.h в библиотеке на новый, который, по сути, добавляет следующие заголовочные файлы для поддержки низкоуровневого доступа к GPIO:

#include "soc/spi_reg.h"
#include "driver/spi_master.h"
#include "hal/gpio_ll.h"

Также есть сообщение на форуме Arduino, в котором утверждается, что gpio_input_get() (все еще) работает с использованием PlatfromIo. Полагаю, это работает, потому что PlatformIo еще не обновился до esp-idf 5.x.

,

Спасибо, вы правы, gpio_input_get() отлично работает, если фреймворк ESP32 Arduino использует esp-idf v4.x, но не работает с esp-idf v5.x., @Adil Ahmed