2016-10-30 12 views
1

私は、一連のテキストをシリアルに出力するボードを持っています。私はこれらの文章を私が知っているものと比較する必要があります。基本的には、私はstrcmp(thestring,F("knownstring"))をしたいと思いますが、FlashStringHelper *タイプをとるstrcmpのバージョンはないようです。 const PROGMEM char *を使用するstrcmp_Pがありますが、これはまったく別のものです。私が見たArduinoのフォーラムスレッドの誰かが、progmem_read_byte (b, i)というフラッシュストリングを使って書き込むことを提案しましたが、その関数は実際には存在せず、最も近い同等物(pgm_read_byte(b+i))はFlashStringHelper * error: invalid use of incomplete type 'class __FlashStringHelper'error: forward declaration of 'class __FlashStringHelper'、これは私が何かをしたことを意味する真剣に間違って!私はほとんど諦めて、代わりにRAMに文字列を入れていますが、arduinoにはそれほど多くはないので、可能ならばそれを避けたいと思います。誰も助けることができますか?Arduinoで__FlashStringHelper *とchar *を比較するにはどうすればよいですか?

答えて

2

__FlashStringHelperは、フラッシュ文字列の正しいオーバーロードされた関数/メソッドを判断するために使用される特別なデータ型です。

とにかくあなたはそれがRAMで2つの文字列を比較するためだとしてstrcmpを使用していますが、(この順番で)FLASHメモリに置かconst char *とRAMに置かれconst char *を比較するためのその変異strcmp_Pがある<avr/pgmspace.h>含んですることはできません。

strcmp_p(thestring, (const char*)F("knownstring")); 
// or better: 
strcmp_P(thestring, PSTR("knownstring")); 

Fマクロは基本的に次のとおりです:

だから、どちらかを使用することができます(__FlashStringHelper *)PSTR("...")ので、それはだ少し冗長最初のケースでconst char*に戻ってそれをキャストします。

関連する問題