我有一块板,可以将文本行输出到串口。我需要将这些文本与我认识的文本进行比较。从本质上讲,我想做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并没有那么多,所以我想尽可能避免这种情况。有人可以帮忙吗?
答案 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("...")
会有点多余。