Для stm32 - и в ядре Кларка, и в ядре от производителя
#include <avr/pgmspace.h>
Для rp2040
#include <avr/pgmspace.h>
А все почему? Потому что PROGMEM - это чисто авровская заморочка, в остальных ядрах он присутствует только для совместимости, а потому заголовочники лежат по тому же адресу. И только у esp32 совместимость с подвохом ))
“горделивою походкой…” )))
ЗЫ кто жеж знает как бы повёл себя каждый из нас будь он разработчиком ESP32
ЗЗЫ вот по какому пути лежит библиотека в ESP32:
E:\arduino-1.8.19\portable\packages\esp32\hardware\esp32\1.0.6\cores\esp32
а вот по какому в RP2040:
E:\arduino-1.8.19\portable\packages\rp2040\hardware\rp2040\3.0.0\cores\rp2040
Ты полез в дебри. Суть была в другом. Имеешь код для ардуино с использованием PROGMEM. Переносишь его на rp2040 - он работает без изменений (по крайней мере в части PROGMEM). А если переносишь его на esp32 - получаешь дулю
которая работает несмотря на отсутствие слов #include <pgmspace.h> и PROGMEM
. А тут встречается одна единственная строчка-условие и всё - нет компиляции.
Вот эта функция целиком:
void Paint::DrawCharAt(int x, int y, char ascii_char, sFONT* font, int colored) {
int i, j;
unsigned int char_offset = (ascii_char - ' ') * font->Height * (font->Width / 8 + (font->Width % 8 ? 1 : 0));
const unsigned char* ptr = &font->table[char_offset];
for (j = 0; j < font->Height; j++) {
for (i = 0; i < font->Width; i++) {
if (pgm_read_byte(ptr) & (0x80 >> (i % 8)))
{
DrawPixel(x + i, y + j, colored);
}
if (i % 8 == 7) {
ptr++;
}
}
if (font->Width % 8 != 0) {
ptr++;
}
}
В своём триптихе я просто выкинул все файлы из ПО с букво-цифро-отрезкорисованием и не обратил тогда внимание на проблему.