首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PROGMEM中防止字符串多次出现

如何在PROGMEM中防止字符串多次出现
EN

Stack Overflow用户
提问于 2015-04-07 08:53:13
回答 1查看 257关注 0票数 1

我试图通过减少程序中的计数字符串来保护一些程序空间。因此,我开始将需要多次访问的所有刺放入一个带有命名空间的文件中:

代码语言:javascript
复制
#include <avr/pgmspace.h>
#ifndef __PSTRINGS__
#define __PSTRINGS__
namespace p_strings
{
//golbal
const char right_arrow[] PROGMEM = ">";
const char procent[] PROGMEM = "%";
const char start[] PROGMEM = "Start";
const char speed[] PROGMEM = "Speed: ";
//... more here
}
#endif

我使用字符串的方法是将字符串包含到我需要的文件中,例如调用Display::out_p(1, 0) << p_strings::right_arrow;。它从程序中读取字节,并将它们放在显示的正确位置。但是,如果我查看.Iss,我会发现它们仍然被多次包含在ASM中。

代码语言:javascript
复制
000000a8 <_ZN9p_stringsL5startE>:
      a8:   53 74 61 72 74 00                                   Start.
...
000000de <_ZN9p_stringsL5startE>:
      de:   53 74 61 72 74 00                                   Start.

所以我想这不是安全储存的正确解决方案。

我现在的问题是:

  1. 为什么它仍然包括(在asm)多次?(也许我的想法有些简单的失败)
  2. 我如何创造“某物”来阻止这一切?(在某种程度上,我需要一个作为参考的类吗?)

如果需要更多的信息,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-07 09:17:41

在C++中,默认情况下,const变量具有内部链接(就好像是static),-which通常意味着每个翻译单元(每个.cpp文件)都有自己的副本。这很可能是你多次见到他们的原因。

您想要做的是将变量声明为extern,然后在一个源文件中定义它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29487540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档