1

私は(http://arduiniana.org/libraries/flash/)バージョン5のFlash.hライブラリを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* を返すことがわかります。そのため、一方が int であると考える理由がわかりません。

このページには、使用されている 2 つの関数に関する参照があります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にコンパイルすると動作します。

前もって感謝します

4

2 に答える 2

1

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 ライブラリを使用している人に役立つことを願っています

于 2014-12-01T22:31:59.513 に答える
1

そして、teensy ライブラリにバグがあるようです。

これを編集してコンパイル エラーを修正できます。

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

注: コードと teensy3 avr ヘッダーを変更した後でも、フラッシュ デモを実行できません。

于 2014-12-01T23:12:45.083 に答える