如何在Arduino上将__FlashStringHelper *与char *进行比较?

时间:2016-10-30 21:53:20

标签: c++ arduino string-comparison

我有一块板,可以将文本行输出到串口。我需要将这些文本与我认识的文本进行比较。从本质上讲,我想做progmem_read_byte (b, i),但似乎并不是strcmp的一个版本,它采用FlashStringHelper *类型。 strcmp_P使用pgm_read_byte(b+i),但这看起来完全不同。我看到Arduino论坛帖子中有人建议用error: invalid use of incomplete type 'class __FlashStringHelper'浏览flash字符串来写一个,但该函数实际上并不存在,而最近的等价物(error: forward declaration of 'class __FlashStringHelper')并没有。似乎与FlashStringHelper *一起使用 - 我收到了export function vote(state, entry) { return state.updateIn( ['vote', 'tally', entry], 0, tally => tally + 1 ); } tally => tally + 1之类的错误,这意味着我已经做了认真错误的事情!我几乎在放弃并将字符串放入RAM中,但是arduino并没有那么多,所以我想尽可能避免这种情况。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

__FlashStringHelper只是用于确定Flash字符串的正确重载函数/方法的特殊数据类型。

无论如何,您无法使用strcmp来比较RAM中的两个字符串,但在包含<avr/pgmspace.h>中,其变体strcmp_P用于比较{ {1}}放置在RAM中,const char *放在FLASH存储器中(按此顺序)。

所以你可以使用:

const char *

strcmp_P(thestring, (const char*)F("knownstring")); // or better: strcmp_P(thestring, PSTR("knownstring")); 宏基本上是:F所以在第一种情况下将其强制转换回(__FlashStringHelper *)PSTR("...")会有点多余。