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

Тема в разделе "Arduino & Shields", создана пользователем Valrond, 3 апр 2018.

Метки:
  1. Valrond

    Valrond Нуб

    Что имею:
    Сначала размещаю во флеше 3 строки, и там же во флеше создаю массив указателей на эти строки:
    Код (C++):
    #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
    };
    Далее, если не создавать функцию, а просто считывать строки из флеша например так:
    Код (C++):
    char buff[30];
    strcpy_P(buff, (PGM_P)pgm_read_word(&(codes_names[1])));
    , вместо единицы подставляя 0,1 или 2 - все работает.
    Сложность возникает при создании фунции...
    Например такой:
    Код (C++):
    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);

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

    Asper Daffy Иксперд

  3. Valrond

    Valrond Нуб

    спасибо. завтра изучу.
     
  4. AlexU

    AlexU Гуру

    В функцию передаёте массив символов (точнее указатель на первый элемент массива). А нужно передавать массив указателей.
    Код (C++):
    void printCode(const char * const _codes_names[], uint8_t code )
     
  5. Valrond

    Valrond Нуб

    Спасибо, позже проверю.