Keil Logo Arm Logo

Technical Support

On-Line Manuals

Libraries and Floating Point Support Guide

Conventions and feedback The ARM C and C++ libraries Mandatory linkage with the C library C and C++ runtime libraries C and C++ library features Library heap usage requirements of the ARM C and C Compliance with the Application Binary Interface ( Increasing portability of object files to other CL ARM C and C++ library directory structure Selection of ARM C and C++ library variants based Thumb C libraries C++ and C libraries and the std namespace ARM C libraries and multithreading ARM C libraries and reentrant functions ARM C libraries and thread-safe functions Use of static data in the C libraries Use of the __user_libspace static data area by the C library functions to access subsections of the _ Re-implementation of legacy function __user_libspa Management of locks in multithreaded applications How to ensure re-implemented mutex functions are c Using the ARM C library in a multithreaded environ Thread safety in the ARM C library Thread safety in the ARM C++ library The floating-point status word in a multithreaded Using the C library with an application Using the C and C++ libraries with an application Using $Sub$$ to mix semihosted and nonsemihosted I Using the libraries in a nonsemihosting environmen C++ exceptions in a non-semihosting environment Direct semihosting C library function dependencies Indirect semihosting C library function dependenci C library API definitions for targeting a differen Building an application without the C library Creating an application as bare machine C without Integer and floating-point compiler functions and Bare machine integer C Bare machine C with floating-point processing Customized C library startup code and access to C Program design when exploiting the C library Using low-level functions when exploiting the C li Using high-level functions when exploiting the C l Using malloc() when exploiting the C library Tailoring the C library to a new execution environ How C and C++ programs use the library functions Initialization of the execution environment and ex C++ initialization, construction and destruction Legacy support for C$$pi_ctorvec instead of .init_ Exceptions system initialization Emergency buffer memory for exceptions Library functions called from main() Program exit and the assert macro Assembler macros that tailor locale functions in t Link time selection of the locale subsystem in the ISO8859-1 implementation Shift-JIS and UTF-8 implementation Runtime selection of the locale subsystem in the C Definition of locale data blocks in the C library LC_CTYPE data block LC_COLLATE data block LC_MONETARY data block LC_NUMERIC data block LC_TIME data block Modification of C library functions for error sign Modification of memory management functions in the Avoiding the heap and heap-using library functions C library support for memory allocation functions Heap1, standard heap implementation Heap2, alternative heap implementation Using a heap implementation from bare machine C Stack pointer initialization and heap bounds Defining __initial_sp, __heap_base and __heap_limi Extending heap size at runtime Legacy support for __user_initial_stackheap() Tailoring input/output functions in the C and C++ Target dependencies on low-level functions in the The C library printf family of functions The C library scanf family of functions Redefining low-level library functions to enable d The C library functions fread(), fgets() and gets( Re-implementing __backspace() in the C library Re-implementing __backspacewc() in the C library Redefining target-dependent system I/O functions i Tailoring non-input/output C library functions Real-time integer division in the ARM libraries Selecting real-time division in the ARM libraries How the ARM C library fulfills ISO C specification mathlib error handling ISO-compliant implementation of signals supported ISO-compliant C library input/output characteristi Standard C++ library implementation definition C library functions and extensions Persistence of C and C++ library names across rele Link time selection of C and C++ libraries Managing projects that have explicit C or C++ libr Compiler generated and library-resident helper fun C and C++ library naming conventions Using macro__ARM_WCHAR_NO_IO to disable FILE decla The ARM C micro-library Floating-point support

Libraries and Floating Point Support Guide

LC_CTYPE data block

LC_CTYPE data block

When defining a locale data block in the C library, the macros that define an LC_CTYPE data block are as follows:

  1. Call LC_CTYPE_begin with a symbol name and a locale name.

  2. Call LC_CTYPE_table repeatedly to specify 256 table entries. LC_CTYPE_table takes a single argument in quotes. This must be a comma-separated list of table entries. Each table entry describes one of the 256 possible characters, and can be either an illegal character (IL) or the bitwise OR of one or more of the following flags:

    __S

    whitespace characters

    __P

    punctuation characters

    __B

    printable space characters

    __L

    lowercase letters

    __U

    uppercase letters

    __N

    decimal digits

    __C

    control characters

    __X

    hexadecimal digit letters A-F and a-f

    __A

    alphabetic but neither uppercase nor lowercase, such as Japanese katakana.

    Note

    A printable space character is defined as any character where the result of both isprint() and isspace() is true.

    __A must not be specified for the same character as either __N or __X.

  3. If required, call one or both of the following optional macros:

    • LC_CTYPE_full_wctype. Calling this macro without arguments causes the C99 wide-character ctype functions (iswalpha(), iswupper(), ...) to return useful values across the full range of Unicode when this LC_CTYPE locale is active. If this macro is not specified, the wide ctype functions treat the first 256 wchar_t values as the same as the 256 char values, and the rest of the wchar_t range as containing illegal characters.

    • LC_CTYPE_multibyte defines this locale to be a multibyte character set. Call this macro with three arguments. The first two arguments are the names of functions that perform conversion between the multibyte character set and Unicode wide characters. The last argument is the value that must be taken by the C macro MB_CUR_MAX for the respective character set. The two function arguments have the following prototypes:

      size_t internal_mbrtowc(wchar_t *pwc, char c, mbstate_t *pstate);
      size_t internal_wcrtomb(char *s, wchar_t w, mbstate_t *pstate);
      
      internal_mbrtowc()

      takes one byte, c, as input, and updates the mbstate_t pointed to by pstate as a result of reading that byte. If the byte completes the encoding of a multibyte character, it writes the corresponding wide character into the location pointed to by pwc, and returns 1 to indicate that it has done so. If not, it returns -2 to indicate the state change of mbstate_t and that no character is output. Otherwise, it returns -1 to indicate that the encoded input is invalid.

      internal_wcrtomb()

      takes one wide character, w, as input, and writes some number of bytes into the memory pointed to by s. It returns the number of bytes output, or -1 to indicate that the input character has no valid representation in the multibyte character set.

  4. Call LC_CTYPE_end, without arguments, to finish the locale block definition.

The following example shows an LC_CTYPE data block.

Example 4.  Defining the CTYPE locale

    LC_CTYPE_begin utf8_ctype, "UTF-8"
    ;
    ; Single-byte characters in the low half of UTF-8 are exactly
    ; the same as in the normal "C" locale.
    LC_CTYPE_table "__C, __C, __C, __C, __C, __C, __C, __C, __C" ; 0x00-0x08
    LC_CTYPE_table "__C|__S, __C|__S, __C|__S, __C|__S, __C|__S"
                                                     ; 0x09-0x0D(BS,LF,VT,FF,CR)
    LC_CTYPE_table "__C, __C, __C, __C, __C, __C, __C, __C, __C" ; 0x0E-0x16
    LC_CTYPE_table "__C, __C, __C, __C, __C, __C, __C, __C, __C" ; 0x17-0x1F
    LC_CTYPE_table "__B|__S" ; space
    LC_CTYPE_table "__P, __P, __P, __P, __P, __P, __P, __P" ; !"#$%&'(
    LC_CTYPE_table "__P, __P, __P, __P, __P, __P, __P" ; )*+,-./
    LC_CTYPE_table "__N, __N, __N, __N, __N, __N, __N, __N, __N, __N" ; 0-9
    LC_CTYPE_table "__P, __P, __P, __P, __P, __P, __P" ; :;<=>?@
    LC_CTYPE_table "__U|__X, __U|__X, __U|__X, __U|__X, __U|__X, __U|__X" ; A-F
    LC_CTYPE_table "__U, __U, __U, __U, __U, __U, __U, __U, __U, __U" ; G-P
    LC_CTYPE_table "__U, __U, __U, __U, __U, __U, __U, __U, __U, __U" ; Q-Z
    LC_CTYPE_table "__P, __P, __P, __P, __P, __P" ; [\]^_`
    LC_CTYPE_table "__L|__X, __L|__X, __L|__X, __L|__X, __L|__X, __L|__X" ; a-f
    LC_CTYPE_table "__L, __L, __L, __L, __L, __L, __L, __L, __L, __L" ; g-p
    LC_CTYPE_table "__L, __L, __L, __L, __L, __L, __L, __L, __L, __L" ; q-z
    LC_CTYPE_table "__P, __P, __P, __P" ; {|}~
    LC_CTYPE_table "__C" ; 0x7F
    ;
    ; Nothing in the top half of UTF-8 is valid on its own as a
    ; single-byte character, so they are all illegal characters (IL).
    LC_CTYPE_table "IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL"
    LC_CTYPE_table "IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL"
    LC_CTYPE_table "IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL"
    LC_CTYPE_table "IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL"
    LC_CTYPE_table "IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL"
    LC_CTYPE_table "IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL"
    LC_CTYPE_table "IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL"
    LC_CTYPE_table "IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL,IL"
    ;
    ; The UTF-8 ctype locale wants the full version of wctype.
    LC_CTYPE_full_wctype
    ;
    ; UTF-8 is a multibyte locale, so we must specify some
    ; conversion functions. MB_CUR_MAX is 6 for UTF-8 (the lead
    ; bytes 0xFC and 0xFD are each followed by five continuation
    ; bytes).
    ;
    ; The implementations of the conversion functions are not
    ; provided in this example.
    ;
    IMPORT  utf8_mbrtowc
    IMPORT  utf8_wcrtomb
    LC_CTYPE_multibyte utf8_mbrtowc, utf8_wcrtomb, 6
    LC_CTYPE_end

Copyright © 2007-2008, 2011-2012 ARM. All rights reserved.ARM DUI 0378D
Non-ConfidentialID062912

arm-logo-small

Keil logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.