2016-10-30 156 views
1

我有一個輸出文本到串行的板子。我需要將這些文本與我所知道的文本進行比較。本質上,我想要做strcmp(thestring,F("knownstring")),但似乎沒有采用FlashStringHelper *類型的strcmp版本。有strcmp_P使用const PROGMEM char *,但這似乎是完全不同的事情。有人在我看到的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沒有太多內容,所以如果可能的話,我想避免這種情況。誰能幫忙?如何比較__FlashStringHelper *與Arduino上的char *?

回答

2

__FlashStringHelper只是用於爲Flash字符串確定正確的重載函數/方法的特殊數據類型。

無論如何,因爲它是在RAM比較兩個字符串,但在包括<avr/pgmspace.h>有其比較const char *放在RAM與const char *放在閃存(按照這個順序)的變體strcmp_P你不能使用strcmp

所以,你可以使用:

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

F宏基本上是:(__FlashStringHelper *)PSTR("...")所以這是有點多餘投它回到const char*在第一種情況。