From 61145f6d5f6f35aa68d7e8bd60ca52683384e06a Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Thu, 7 Jul 2022 13:56:33 -0400 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0libc=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rt-thread-standard/_sidebar.md | 6 +++--- .../programming-manual/libc/introduction.md | 17 ++++++++++++----- .../libc/{compiler.md => iso-ansi-c.md} | 18 +++++++----------- .../libc/posix/introduction.md | 2 +- 4 files changed, 23 insertions(+), 20 deletions(-) rename rt-thread-version/rt-thread-standard/programming-manual/libc/{compiler.md => iso-ansi-c.md} (81%) diff --git a/rt-thread-version/rt-thread-standard/_sidebar.md b/rt-thread-version/rt-thread-standard/_sidebar.md index ac6b499..ca74fe9 100644 --- a/rt-thread-version/rt-thread-standard/_sidebar.md +++ b/rt-thread-version/rt-thread-standard/_sidebar.md @@ -46,7 +46,7 @@ - [WLAN设备](/rt-thread-version/rt-thread-standard/programming-manual/device/wlan/wlan.md) - [SENSOR设备](/rt-thread-version/rt-thread-standard/programming-manual/device/sensor/sensor.md) - [TOUCH设备](/rt-thread-version/rt-thread-standard/programming-manual/device/touch/touch.md) - - [CRYPTO 设备](/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto.md) + - [CRYPTO设备](/rt-thread-version/rt-thread-standard/programming-manual/device/crypto/crypto.md) - [AUDIO设备](/rt-thread-version/rt-thread-standard/programming-manual/device/audio/audio.md) - [Pulse Encoder设备](/rt-thread-version/rt-thread-standard/programming-manual/device/pulse_encoder/pulse_encoder.md) - Device IPC @@ -56,8 +56,8 @@ - 组件 - C库 (LIBC) - [概况](/rt-thread-version/rt-thread-standard/programming-manual/libc/introduction.md) - - [编译器配平层](/rt-thread-version/rt-thread-standard/programming-manual/libc/compiler.md) - - POSIX + - [ISO/ANSI C标准](/rt-thread-version/rt-thread-standard/programming-manual/libc/iso-ansi-c.md) + - POSIX标准 - [简介](/rt-thread-version/rt-thread-standard/programming-manual/libc/posix/introduction.md) - [FILE(文件IO)](/rt-thread-version/rt-thread-standard/programming-manual/libc/posix/posix-file.md) - [Pthread(线程)](/rt-thread-version/rt-thread-standard/programming-manual/libc/posix/posix-pthread.md) diff --git a/rt-thread-version/rt-thread-standard/programming-manual/libc/introduction.md b/rt-thread-version/rt-thread-standard/programming-manual/libc/introduction.md index 18c7e41..92f4671 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/libc/introduction.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/libc/introduction.md @@ -4,19 +4,28 @@ RT-Thread 提供的 LIBC (C library, C库),包含编译器内置LIBC、编译 ![libc_structure](figures/libc_structure.png) -## ISO/ANSI C +## 编译器配平层 + +编译器配平层负责对接编译器的底层桩函数以及平衡不同编译器内置C库函数的差异而设计,为上层 POSIX 层提供功能统一的接口,位于 [components/libc/compiler](https://github.com/RT-Thread/rt-thread/tree/master/components/libc/compilers) 文件目录下。之所以需要配平,是由于 GCC (newlib)、Keil-MDK、IAR、Visual Studio (WIN32) 四个编译工具链内置 LIBC 所提供的标准 C 库函数支持程度不一样,编译器配平层负责将四种不同的编译链所提供的标准 C 库平衡到相同的水平。编译器配平层无需用户手动干预,会在编译工程时,根据用户所使用的的编译平台和工具链自动进行配平。保证上层无需区分使用何种编译平台和工具链的 LIBC ,使用通用的头文件即可引用 LIBC 的相关函数。 + +## ISO/ANSI C 标准 + ANSI C、ISO C、Standard C是指美国国家标准协会(ANSI)和国际标准化组织(ISO)对C语言发布的标准。历史上,这个名字专门用于指代此标准的原始版本,也是支持最好的版本(称为C89或C90)。使用C的软件开发者被鼓励遵循标准的要求,因为它鼓励使用跨平台的代码。C的第一个标准是由ANSI发布的。虽然这份文档后来被国际标准化组织(ISO)采纳并且ISO发布的修订版亦被ANSI采纳,但名称ANSI C(而不是ISO C)仍被广泛使用。一些软件开发者使用名称ISO C,还有一些使用中立的名称Standard C。例如常说的C89 (ANSI X3.159-1989)、C99 (ISO/IEC 9899:1999)、C11 (ISO/IEC 9899:2011) 实际都是指该标准的不同版本。 该标准通常被编译器/工具链内置 LIBC 所支持,例如 Keil-MDK、IAR 等所提供的的内置 LIBC 都是满足该标准的。 -## POSIX 接口 +## POSIX 标准 + 可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX)是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。ISO/ANSI C 是 POSIX 的子集。 ### IEEE Std 1003.1 + 针对LIBC,目前广泛使用的 POSIX 标准是 1003.1 标准,全称为IEEE Std 1003.1(缩写写法为 POSIX.1)。IEEE Std 1003.1-2001、IEEE Std 1003.1-2008 等为 POSIX.1 在不同时期更新发布的版本。 ### IEEE Std. 1003.13 + 该标准是 POSIX 针对实时规范 (reatime profiles)。该标准是由 IEEE Std 1003.1 筛选而来,因此是其子集。IEEE Std. 1003.13 定义了四个子集: + - Minimal:最小嵌入式子集规范 —— PSE51 - Controller:工业控制器子集规范 —— PSE52 - Dedicated:较大规模的嵌入式系统子集规范 —— PSE53 @@ -35,6 +44,4 @@ ANSI C、ISO C、Standard C是指美国国家标准协会(ANSI)和国际标 有使用 的引用逻辑的,修改为 的方式来避免编译错误;其他两个也是类似的处理逻辑,拟合不同编译工具链的处理逻辑。 -##### Net 接口 - -启用网络功能后,并不是所有的 BSD Socket 接口都支持,在 RT-Thread 中只实现了一部分函数。因此如果对应函数缺失,需要按照代码逻辑替换为基础的 Socket 接口来兼容原逻辑。完整的 BSD Socket 功能将持续进行来解决这个问题。 +# diff --git a/rt-thread-version/rt-thread-standard/programming-manual/libc/compiler.md b/rt-thread-version/rt-thread-standard/programming-manual/libc/iso-ansi-c.md similarity index 81% rename from rt-thread-version/rt-thread-standard/programming-manual/libc/compiler.md rename to rt-thread-version/rt-thread-standard/programming-manual/libc/iso-ansi-c.md index f1cb659..0ba9219 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/libc/compiler.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/libc/iso-ansi-c.md @@ -1,8 +1,4 @@ -# 编译器配平层 - -编译器配平层负责对接编译器的底层桩函数以及平衡不同编译器内置C库函数的差异而设计,为上层 POSIX 层提供功能统一的接口,位于 [components/libc/compiler](https://github.com/RT-Thread/rt-thread/tree/master/components/libc/compilers) 文件目录下。之所以需要配平,是由于 GCC (newlib)、Keil-MDK、IAR、Visual Studio (WIN32) 四个编译工具链内置 LIBC 所提供的标准 C 库函数支持程度不一样,编译器配平层负责将四种不同的编译链所提供的标准 C 库平衡到相同的水平。编译器配平层无需用户手动干预,会在编译工程时,根据用户所使用的的编译平台和工具链自动进行配平。保证上层无需区分使用何种编译平台和工具链的 LIBC ,使用通用的头文件即可引用 LIBC 的相关函数。 - -配平层已经提供了一些基本的 LIBC 函数,这些函数不需要用户额外使能,可以即刻使用。 +# ISO/ANSI C 标准 ## 标准输出函数 (printf 家族) @@ -55,13 +51,13 @@ system 函数可以用于在 C 程序中内置执行一些 FinSH 命令。 ***注意:*** 1. 时区是给人看的,不是给机器看的。因此,底层驱动不应当使用带有时区的时间,而应该使用格林威治时间,即 UTC+0。当且仅当该时间需要显示出来给人看的时候,才需要临时将其使用带有时区转换功能的函数(例如 ctime)显示时间。否则很容易引发时间上的错乱。 - + 注意以下两组函数的区别,功能相同,唯一的区别是是否考虑时区问题: - - | | 考虑时区 | 不考虑时区 | - | ------ | --------- | ---------- | - | 第一组 | localtime | gmtime | - | 第二组 | mktime | timegm | + + | | 考虑时区 | 不考虑时区 | + | --- | --------- | ------ | + | 第一组 | localtime | gmtime | + | 第二组 | mktime | timegm | 2. 目前,时间相关函数不支持的是夏令时自动转换相关功能。夏令时在中国不使用,主要是欧美国家在使用。 diff --git a/rt-thread-version/rt-thread-standard/programming-manual/libc/posix/introduction.md b/rt-thread-version/rt-thread-standard/programming-manual/libc/posix/introduction.md index 8559e04..be21df7 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/libc/posix/introduction.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/libc/posix/introduction.md @@ -1,4 +1,4 @@ -# POSIX 简介 +# POSIX 标准 可移植操作系统接口,POSIX 标准定义了操作系统(很多时候针对的是类 Unix 操作系统)应该为应用程序提供的接口标准,从而保证了应用程序在源码层次的可移植性,如今主流的 Linux 系统都做到了兼容 POSIX 标准。由此可见,可移植性是 POSIX 的一大特性,如果一个操作系统拟合了POSIX系统,就将可以将自己的 POSIX 应用轻松迁移到其他同样符合POSIX标准的系统平台,并且可以获得大量的 POSIX 应用,丰富自己系统的应用生态。 -- Gitee