我有一个将文本行输出到串行的板。我需要将这些文本行与我所知道的文本进行比较。本质上,我想做strcmp(thestring,F("knownstring"))
,但是似乎没有一个采用 FlashStringHelper* 类型的 strcmp 版本。有 strcmp_P 使用const PROGMEM char *
,但这似乎完全是另一回事。我在 Arduino 论坛帖子上看到有人建议通过使用 flash-string 来编写一个progmem_read_byte (b, i)
,但该函数实际上并不存在,并且最接近的等效函数(pgm_read_byte(b+i)
)似乎不适用于 FlashStringHelper* - 我收到类似错误error: invalid use of incomplete type 'class __FlashStringHelper'
and error: forward declaration of 'class __FlashStringHelper'
,这意味着我已经做了某事严重地错误的!我几乎要放弃并将字符串放入 RAM 中,但 arduino 没有太多,所以我想如果可能的话避免这种情况。有人可以帮忙吗?
The __FlashStringHelper
只是用于确定 Flash 字符串的正确重载函数/方法的特殊数据类型。
反正你不能用strcmp
因为它用于比较 RAM 中的两个字符串,但在包含中<avr/pgmspace.h>
有它的变体strcmp_P
用于比较const char *
放置在 RAM 中const char *
放置在闪存中(按此顺序)。
所以你可以使用:
strcmp_P(thestring, (const char*)F("knownstring"));
// or better:
strcmp_P(thestring, PSTR("knownstring"));
The F
宏基本上是:(__FlashStringHelper *)PSTR("...")
所以将其投射回有点多余const char*
在第一种情况下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)