Чтобы локализовать представление чисел при программировании в среде MDK-ARM требуется выполнить несколько простых шагов:
- Скачать ассемблерный файл и добавить в свой проект.
- В настройках проекта на вкладке Asm в поле Include Paths указать каталог, в котором расположен файл rt_locale.s. По умолчанию этот файл расположен в «C:\Keil\ARM\ARMCC\include».
При этом в программе не требуется производить никаких настроек локали, например вызывать функцию setlocale, локаль будет жестко задана.
После этого функции (например printf) преобразующие число в строку и наоборот будут воспринимать запятую в качестве разделителя дробной и целой части.
Подробнее о реализации ассемблерного файла можно почитать в официальной документации на MDK-ARM. Стоит учесть, что в коде, приведенном в документации, есть недочет: отсутствует строчка экспортирующая функцию _get_lc_CATEGORY, в представленном здесь ассемблерном файле эта строчка: «EXPORT _get_lc_numeric». Без неё локализация не заработает.
Привожу код из ассемблерного файла.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Определение русского десятичного разделителя.
;
; Файл предназначен для программирования в среде Keil MDK-ARM.
;
; В настройках проекта на вкладке Asm в поле Include Paths
; требуется указать каталог, в котором расположен файл rt_locale.s.
; По умолчанию этот файл расположен в "C:\Keil\ARM\ARMCC\include".
;
; В программе не требуется вызывать функцию setlocale().
GET rt_locale.s ; Подключить файл с макросами
AREA locales, DATA, READONLY
LC_NUMERIC_begin russian_numeric_locale, "russian"
LC_NUMERIC_point "," ; Десятичный разделитель
LC_NUMERIC_thousands "." ; Разделитель групп цифр
LC_NUMERIC_grouping "\3" ; Количество цифр в группе
LC_NUMERIC_end
AREA locale_func, CODE, READONLY
EXPORT _get_lc_numeric
_get_lc_numeric FUNCTION
LDR r0, =russian_numeric_locale_start
BX lr
ENDFUNC
END ; Конец ассемблерного файла
Понравилось это:
Нравится Загрузка...