Как правильно передать в функцию указатель PGM_P на массив указателей на строки во флеше?

valrond
Offline
Зарегистрирован: 30.03.2017

Что имею:
Сначала размещаю во флеше 3 строки, и там же во флеше создаю массив указателей на эти строки:

#include <avr/pgmspace.h>
const char code_0[] PROGMEM = "string1";
const char code_1[] PROGMEM = "string2";
const char code_2[] PROGMEM = "string3";

PGM_P  const   codes_names[] PROGMEM = // массив указателей на строки
{
  code_0
  , code_1
  , code_2
};

Далее, если не создавать функцию, а просто считывать строки из флеша например так:

char buff[30];
strcpy_P(buff, (PGM_P)pgm_read_word(&(codes_names[1])));

, вместо единицы подставляя 0,1 или 2 - все работает.
Сложность возникает при создании фунции...
Например такой:

void printCode (char _codes_names[], uint8_t code ){
  char buff[30];
  strcpy_P(buff, (PGM_P)pgm_read_word(&(_codes_names[code])));
  Serial.println (buff);

  }

Ничего не получается... Есть сведующие люди способные помочь в этой проблеме начинающему ардуинщику? Задача в целом такая: передать в функцию данные из массива строк во флеше, далее, по указанному параметру (номер строки в массиве) вытащить данные (массив символов) и сравнить их с другим массивом чаров. Предвосхищая вопросы зачем это нужно - просто нужно и все. Хотелось бы не только кусок кода, но и хотя бы кратких пояснений.

 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
5N62V
Offline
Зарегистрирован: 25.02.2016

ЕвгенийП пишет:

Вот здесь усё разжёвано.

+500. Если с первого раза не зайдет - читайте пока не зайдет. ;)