Я пытаюсь обезопасить пространство программы, пытаясь уменьшить количество строк в программе. Итак, я начал помещать все нужные строки в файл с пространством имен:
#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.
000000a8 <_ZN9p_stringsL5startE>:
a8: 53 74 61 72 74 00 Start.
...
000000de <_ZN9p_stringsL5startE>:
de: 53 74 61 72 74 00 Start.
Так что я думаю, что это не правильное решение для безопасного хранения.
Мои вопросы сейчас:
Если нужно больше информации, дайте мне знать.
В C ++ const
переменная по умолчанию имеет внутреннюю связь (как если бы она была static
) — что обычно означает, что каждая единица перевода (каждая .cpp
файл) получает свою собственную копию. Это может быть очень хорошо, почему вы видите их несколько раз.
Что вы хотели бы сделать, это объявить переменные как extern
, а затем определить их в одном исходном файле.