Ошибки Flash.h с Arduino 1.0.6 и Teensy 3.1 (Teensyduino, Версия 1.20)

Я использую библиотеку Flash.h из ( http://arduiniana.org/libraries/flash/) версии 5 с Arduino 1.0.5 и teensy 3.1 без каких-либо проблем. Мне пришлось обновить до версии 1.0.6, и теперь я получаю эту ошибку

[removed path from message]
/.../libraries/Flash/Flash.h: In member function 'char* _FLASH_STRING::copy(char*, size_t, size_t) const':
/.../libraries/Flash/Flash.h:79:44: error: operands to ?: have different types 'int' and 'char*'

и это код в flash.h

char *copy(char *to, size_t size = -1, size_t offset = 0) const 
  { 
    return size == -1 ?
      strcpy_P(to, _arr + offset) : strncpy_P(to, _arr + offset, size);
  }

с первого взгляда я вижу, что операнд сравнивает strcpy и strncpy и оба возвращают char*, поэтому я не уверен, почему он считает, что один является целым числом.

на этой странице есть ссылка на две использованные функции http://tuxgraphics.org/common/src2/article12051/avr-libc-user-manual/manual/group__avr__pgmspace.html

Любая помощь будет оценена, чтобы выяснить, в чем проблема. Проверка библиотеки работает с vailla Arduino 1.0.6, но когда я устанавливаю Teensyduino версии 1.20 и пытаюсь скомпилировать для teensy 3.1, я получаю эту ошибку. Если я скомпилирую его в Arduino Uno, это сработает.

заранее спасибо

2 ответа

И, похоже, в подростковой библиотеке есть ошибка.

Вы можете отредактировать его, чтобы исправить ошибку компиляции.

http://forum.pjrc.com/threads/26676-Teensy3-x-strncpy_P()-bug?p=54965

Примечание: даже после внесения изменений в код и teensy3 avr заголовки я не могу запустить демо-версию флэш-памяти.

Я нашел ответ для этого на форуме PJRC. Я применил изменения кода, и это сработало для меня. URL ссылки: http://forum.pjrc.com/threads/26156-Teensy-3-1-and-TinyWebServer-Library?highlight=flash.h

Изменено с

char *copy(char *to, size_t size = -1, size_t offset = 0) const 
{ 
  return size == -1 ?
  strcpy_P(to, _arr + offset) : strncpy_P(to, _arr + offset, size);
}

в

void *copy(char *to, size_t size = -1, size_t offset = 0) const 
{ 
if (size == -1) strcpy_P(to, _arr + offset);
 else strncpy_P(to, _arr + offset, size);
}

Надеюсь, это поможет тому, кто использует библиотеку flash.h

Другие вопросы по тегам