MDK-ARM: замена десятичного разделителя

Чтобы локализовать представление чисел при программировании в среде MDK-ARM требуется выполнить несколько простых шагов:

  1. Скачать ассемблерный файл и добавить в свой проект.
  2. В настройках проекта на вкладке 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 ; Конец ассемблерного файла
Реклама

Автор

Дмитрий Бравиков

Инженер. Электронщик. Программист.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s