реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Размещение многоязычных строк в памяти, в микроконтроллере
LCD
сообщение Jan 19 2016, 11:40
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



Делаю многоязычный проект на 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. Как можно их перенести в ПЗУ, не сильно переделывая код?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jan 19 2016, 14:02
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Подозреваю, надо просто
typedef wchar_t const * const TEXT[LANG_EOL];


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
LCD
сообщение Jan 19 2016, 14:18
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



Действительно, проблема так просто решается. Спасибо!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 20 2016, 05:34
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(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 меньше займёт под строки.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 14:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016