RealView® 编译工具 库和浮点支持指南

3.1 版


Table of Contents

前言
关于本手册
适用对象
使用本手册
印刷约定
更多参考出版物
反馈
对 RealView 编译工具的反馈
关于本手册的反馈
1. 简介
1.1. 关于运行时库
1.1.1. 用于实现 ARM 体系结构兼容性的 ABI
1.1.2. 库目录结构
1.1.3. 构建选项和库变体
1.1.4. 使用 VFP 支持库
1.1.5. Thumb C 库
1.2. 关于浮点支持
2. C 和 C++ 库
2.1. 关于 C 和 C++ 库
2.1.1. C 和 C++ 库功能
2.1.2. 名称空间
2.2. 编写可重入且线程安全的代码
2.2.1. 可重入性和线程安全性简介
2.2.2. 在 C 库中使用静态数据
2.2.3. __user_libspace 静态数据区
2.2.4. 在多线程应用程序中管理锁
2.2.5. 将 ARM C 库用于多线程应用程序
2.2.6. ARM C 库中的线程安全性
2.2.7. ARM C++ 库中的线程安全性
2.3. 使用 C 库构建应用程序
2.3.1. 将库用于应用程序
2.3.2. 构建用于半主机环境的应用程序
2.3.3. 构建用于非半主机环境的应用程序
2.4. 不使用 C 库构建应用程序
2.4.1. 整数和 FP 辅助函数
2.4.2. 裸机整数 C
2.4.3. 具有浮点功能的裸机 C
2.4.4. 使用 C 库
2.4.5. 独立 C 库函数
2.5. 调整 C 库以适应新的执行环境
2.5.1. C 和 C++ 程序使用库函数的方式
2.5.2. __rt_entry
2.5.3. 从程序中退出
2.5.4. __rt_exit()
2.5.5. __rt_lib_init()
2.5.6. __rt_lib_shutdown()
2.6. 调整静态数据访问
2.7. 使用汇编程序宏调整区域设置和 CTYPE
2.7.1. 在链接时选择区域设置
2.7.2. 在运行时选择区域设置
2.7.3. 定义区域设置块
2.7.4. LC_CTYPE 数据块
2.7.5. LC_COLLATE 数据块
2.7.6. LC_MONETARY 数据块
2.7.7. LC_NUMERIC 数据块
2.7.8. LC_TIME 数据块
2.7.9. _get_lconv()
2.7.10. localeconv()
2.7.11. setlocale()
2.7.12. _findlocale()
2.7.13. lconv 结构
2.8. 使用 C 宏调整区域设置和 CTYPE
2.8.1. 在链接时选择区域设置
2.8.2. 在运行时选择区域设置
2.8.3. 宏和实用程序函数
2.8.4. _get_lc_ctype()
2.8.5. _get_lc_collate()
2.8.6. _get_lc_monetary()
2.8.7. _get_lc_numeric()
2.8.8. _get_lc_time()
2.8.9. _get_lconv()
2.8.10. localeconv()
2.8.11. setlocale()
2.8.12. _findlocale()
2.8.13. __LC_CTYPE_DEF
2.8.14. __LC_COLLATE_DEF
2.8.15. __LC_TIME_DEF
2.8.16. __LC_NUMERIC_DEF
2.8.17. __LC_MONETARY_DEF
2.8.18. __LC_INDEX_END
2.8.19. lconv 结构
2.9. 调整错误信号、错误处理和程序退出
2.9.1. _sys_exit()
2.9.2. errno
2.9.3. __rt_errno_addr()
2.9.4. __raise()
2.9.5. __rt_raise()
2.9.6. __default_signal_handler()
2.9.7. _ttywrch()
2.9.8. __rt_fp_status_addr()
2.10. 调整存储管理
2.10.1. 避免使用 ARM 提供的堆和使用堆的函数
2.10.2. malloc 支持
2.11. 调整运行时内存模型
2.11.1. 内存模型
2.11.2. 控制运行时内存模型
2.11.3. 编写您自己的内存模型
2.11.4. __user_initial_stackheap()
2.11.5. __user_setup_stackheap()
2.11.6. __user_heap_extend()
2.11.7. __user_heap_extent()
2.11.8. __user_stack_cleanup_space()
2.11.9. __rt_heap_extend()
2.11.10. __rt_stack_postlongjmp()
2.12. 调整输入/输出函数
2.12.1. 对低级函数的依赖性
2.12.2. 与目标相关的输入/输出支持函数
2.12.3. _sys_open()
2.12.4. _sys_close()
2.12.5. _sys_read()
2.12.6. _sys_write()
2.12.7. _sys_ensure()
2.12.8. _sys_flen()
2.12.9. _sys_seek()
2.12.10. _sys_istty()
2.12.11. _sys_tmpnam()
2.12.12. _sys_command_string()
2.12.13. #pragma import(_main_redirection)
2.13. 调整其他 C 库函数
2.13.1. clock()
2.13.2. _clock_init()
2.13.3. time()
2.13.4. remove()
2.13.5. rename()
2.13.6. system()
2.13.7. getenv()
2.13.8. _getenv_init()
2.14. 选择实时除法
2.15. ISO 实现定义
2.15.1. ISO C 库实现定义
2.15.2. 标准 C++ 库实现定义
2.16. C 库扩展
2.16.1. atoll()
2.16.2. strtoll()
2.16.3. strtoull()
2.16.4. printf()
2.16.5. snprintf()
2.16.6. vsnprintf()
2.16.7. lldiv()
2.16.8. llabs()
2.16.9. wcstombs()
2.16.10. alloca()
2.16.11. strlcpy()
2.16.12. strlcat()
2.16.13. _fisatty()
2.16.14. __heapstats()
2.16.15. __heapvalid()
2.17. 库命名约定
2.17.1. 放置 ARM 库
2.17.2. 辅助库
2.17.3. 标识库变体
3. C 微型库
3.1. 关于 microlib
3.1.1. 与缺省 C 库之间的差异
3.2. 使用 microlib 构建应用程序
3.3. 使用 microlib
3.3.1. 创建堆栈
3.3.2. 创建堆
3.3.3. 进入和退出程序
3.4. 调整 microlib 输入/输出函数
3.5. microlib 中缺少的 ISO C 特性
4. 浮点支持
4.1. 软件浮点库 fplib
4.1.1. 浮点库 fplib 的特性
4.1.2. 特定格式数字的算法
4.1.3. 浮点数、双精度数和整数之间的转换
4.1.4. long long 和其他数字格式之间的转换
4.1.5. 浮点数比较
4.1.6. C99 函数
4.2. 控制浮点环境
4.2.1. __ieee_status()
4.2.2. __fp_status()
4.2.3. __vfp_status()
4.2.4. Microsoft 兼容性函数
4.2.5. C99 兼容函数
4.2.6. ARM 编译器的 C99 接口扩展
4.3. 数学库 mathlib
4.3.1. mathlib 中的范围缩小函数
4.3.2. 确定浮点数类型 (fpclassify)
4.3.3. 确定一个数是否为有限数 (isfinite)
4.3.4. 确定一个数是否为无穷大 (isinf)
4.3.5. 确定一个数是否为 NaN (isnan)
4.3.6. 确定一个数是否为正规数 (isnormal)
4.3.7. 返回一个数的符号位 (signbit)
4.3.8. 复制符号函数(copysign、copysignf)
4.3.9. 比较宏(isgreater、isgreaterequal、isless、islessequal、islessgreater、isunordered)
4.3.10. 反双曲函数(acosh、asinh、atanh)
4.3.11. 立方根 (cbrt)
4.3.12. 误差函数(erf、erfc)
4.3.13. exp(x) 减 1 (expm1)
4.3.14. gamma 函数(gamma、gamma_r)
4.3.15. 求斜边函数 (hypot)
4.3.16. 第一类 Bessel 函数(j0、j1、jn)
4.3.17. gamma 函数的对数
4.3.18. x 加 1 的对数 (log1p)
4.3.19. IEEE 754 求余数函数 (remainder)
4.3.20. IEEE 取整运算 (rint)
4.3.21. 返回一个数的小数部分 (significand)
4.3.22. 第二类 Bessel 函数(y0、y1、yn)
4.3.23. 返回一个数的指数的遗留宏(ilogb、ilogbf、ilogbl)
4.3.24. 确定一个数是否为有限数的遗留宏 (finite)
4.3.25. 确定一个数是否是 NaN 的遗留宏 (isnan)
4.4. IEEE 754 算法
4.4.1. 基本数据类型
4.4.2. 算法和舍入
4.4.3. 异常

所有权声明

带有 ®™ 标记的词语和徽标是 ARM 公司的注册商标或商标。 此处提及的其他品牌和名称可能是其各自所有者的商标。

除非事先得到版权所有人的书面许可,否则不得以任何形式修改或复制本文档包含的部分或全部信息以及产品说明。

本文档描述的产品还将不断发展和完善。 ARM 公司将如实提供本文档所述产品的所有特性及其使用方法。 但是,所有暗示或明示的担保,包括但不限于对特定用途适销性或适用性的担保,均不包括在内。

本文档的目的仅在于帮助读者使用产品。 对由于使用本文档任何信息出现的遗漏、损坏或错误使用产品造成的任何损失,ARM 公司概不负责。

使用 ARM 一词时,它表示“ARM 或其任何相应的子公司”。

本文档中的某些材料基于 IEEE 754 - 1985 IEEE 二进制浮点算法标准。 IEEE 对于按所述方式放置和使用而产生的任何责任和义务概不负责。

保密状态

本文档的内容是非保密的。 根据 ARM 与 ARM 将本文档交予的参与方的协议条款,使用、复制和公开本文档内容的权利可能会受到许可限制的制约。

产品状态

本文档的信息是开发的产品的最新信息。

Revision History
Revision A 2007 年 3 月 RVDS 3.1 版
Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0349AC
Non-Confidential