Как можно передать unsigned char[] PROGMEM в функцию?

Для передачи массива unsigned char с модификатором PROGMEM в функцию в C++, вы можете использовать указатель на const unsigned char (const unsigned char*) в качестве параметра функции. Вместо передачи всего массива, вы будете передавать указатель на первый элемент массива, и функция будет иметь доступ к элементам массива через этот указатель.

Первым шагом в передаче массива PROGMEM в функцию является объявление функции с соответствующим параметром. Например:

void processArray(const unsigned char* array);

Здесь const указывает на то, что функция не будет изменять содержимое массива, и что массив будет доступен только для чтения.

Затем, для передачи массива PROGMEM в функцию, вы должны создать соответствующий указатель на массив внутри функции и проинициализировать его указателем на первый элемент массива. Например:

const unsigned char myArray[] PROGMEM = {0x01, 0x02, 0x03};
processArray(myArray);

C помощью этого кода массив myArray передаётся в функцию processArray. Внутри функции вы можете получить доступ к элементам массива через указатель на const unsigned char:

void processArray(const unsigned char* array) {
    for (int i = 0; i < 3; i++) {
        unsigned char element = pgm_read_byte(&(array[i]));
        // делаем с элементом что-то
    }
}

В приведённом выше примере функция processArray проходит по всем элементам массива, используя указатель array и функцию pgm_read_byte() для получения значения каждого элемента. Здесь pgm_read_byte() используется для доступа к элементам массива программного памяти PROGMEM.

Таким образом, передача массива PROGMEM в функцию осуществляется с помощью указателя на const unsigned char и функции pgm_read_byte(), позволяющей получить доступ к элементам массива PROGMEM.