Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Размещение многоязычных строк в памяти
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
LCD
Делаю многоязычный проект на STM32. Сегодня при вылавливании багов обнаружил, что львиную долю ОЗУ сожрали массивы с указателями на строки. Сделано примерно так:

Код
enum
{
  LANG_EN=0,
  LANG_RU,
  LANG_EOL // end of list
};

typedef wchar_t const * TEXT[LANG_EOL];

TEXT txt_menu=
{
  L"Menu",  //en
  L"Меню" //ru
};

TEXT txt_exit=
{
  L"Exit",
  L"Выход"
};


Компилятор IAR, в будущем планируется совместимость с GCC. Как можно их перенести в ПЗУ, не сильно переделывая код?
esaulenka
Подозреваю, надо просто
typedef wchar_t const * const TEXT[LANG_EOL];
LCD
Действительно, проблема так просто решается. Спасибо!
jcxz
Цитата(esaulenka @ Jan 19 2016, 20:02) *
Подозреваю, надо просто
typedef wchar_t const * const TEXT[LANG_EOL];

Ещё лучше добавить управляющие коды в строки и их обработку при выводе. Типа:
Код
#define LNG_ALL "\x..."
#define LNG_ENG "\x..."
#define LNG_RUS "\x..."
char const t[] = LNG_ENG "Menu" LNG_RUS "Меню" LNG_ALL ":";
Вместо многоточий поставить какие-то коды, отсутствующие в используемой таблице символов.
И перегрузить функцию вывода строк, чтобы она, в зависимости от текущего языка, пропускала секции LNG_ не соответствующие текущему языку, а пропускала на вывод только соответствующие.
Такой вариант и FLASH меньше займёт под строки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.