Добрый день,Как хранить константы в ROM (Atmel)
Я пишу прошивки для ATMega645A с помощью AtmelStudio 7. Я начинаю проект локализации и необходимость вывода сообщений на дисплей 16х2 символов в 3-х различных языках , Существующие (английские сообщения) хранятся в SRAM, но в конечном итоге я переполняю это пространство для хранения данных, если мне нужно утроить количество сообщений.
ТАК, я пытаюсь сохранить сообщения в ПЗУ, где пространство - много. Проблема заключается в том, что примечания приложения Atmel либо (а) неверны, либо (б) неполны, потому что я попробовал несколько методов в соответствии с их предложением и код не компилируется (ref: Atmel Tips & Tricks App Note doc8453.pdf page 8 и http://www.atmel.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_rom_array.html) , Мой код выглядит следующим образом:
// before main(void)
#include <avr/pgmspace.h>
const char string_1[] PROGMEM = "String 1";
const char string_2[] PROGMEM = "String 2";
const char string_3[] PROGMEM = "String 3";
const char string_4[] PROGMEM = "String 4";
const char string_5[] PROGMEM = "String 5";
PGM_P string_table[5] PROGMEM =
{
string_1,
string_2,
string_3,
string_4,
string_5
};
внутри основной (пустоты) У меня есть следующий:
char buffer[10];
PGM_P p;
int i;
memcpy_P(&p, &string_table[i], sizeof(PGM_P));
strcpy_P(buffer, p);
При компиляции, я получаю сообщение: переменной «string_table» должна быть константным для того, чтобы быть помещается в раздел только для чтения с помощью атрибута «» ((progmem)) '
0 Я пытаюсь использовать' char 'вместо' const char ', но ничего не похоже на компиляцию. Любые рекомендации по правильному синтаксису для получения этих статических символьных строк, которые будут храниться в ПЗУ, будут с благодарностью оценены.
Итак, что такое 'PGM_P'? – Olaf
Проблема с переменной 'string_table'. Объявите его как Const. Кроме того, вы не инициализировали 'int i' – Swanand
@Swanand: Без [mcve] это невозможно ответить. – Olaf