Преглед изворни кода

【更新】:去掉不必要的文件,完善基本模块的说明文档

SummerGift пре 7 година
родитељ
комит
fc7b9de93e

+ 34 - 0
docs/Development_manual_document_section/02-Basic_Knowledge.md

@@ -8,3 +8,37 @@
 - 开启 `msh` 功能。
 
 符合以上两点,就可以使用 `msh` 命令行中的 `python` 命令加上 `*.py` 文件名来执行一个 python 文件了。
+
+## 2. 术语表
+
+### board
+
+  开发板,通常这个术语用来表示以一个特定的 MCU 为核心的开发板 。它也可以被用来表示移植 MicroPython 到一个特定的开发板上,也可以表示像 Unix 移植这样没有开发板的移植。
+
+### CPython
+
+  CPython 是 Python 编程语言的一种实现,是最被人们所熟知和使用的一种。然而它只是许多种实现中的一种(其中包括 Jython、IronPython、PyPy、 MicroPython 等)。由于没有正式的 Python 语言规范,只有 CPython 文档,在 Python 语言本身和 Cpython 这种实现之间画出一条界限并不容易。这同时也给其他方式的实现留下了更多的自由。比如 MicroPython 做了许多和 Cpython 不一样的事情,同时仍然成为 Python 语言的一种实现。
+
+### GPIO
+
+  通用输入/输出。控制电子信号最简单的方法。通过 GPIO 用户可以配置硬件信号引脚为输入或者输出,并设置或者获取其数字信号值(逻辑  '0' 或 '1')。 MicroPython 使用抽象类  [`machine.Pin`](04-Hardware_Control_Module/02-machine-Pin.md)  来访问 GPIO。
+
+### interned string
+
+  由其唯一的标识而不是其地址引用的字符串。因此,可以用他们的标识符而不是通过内容快速地比较内部字符串。interned 字符串的缺点是插入操作需要时间(与现有 interned 字符串的数量成正比,也就是说会随着时间的推移耗时越来越久),而用于插入 interned 字符串的空间是不可回收的。当某个 interned 字符串被应用需求(作为关键字参数)或者对系统有益(可以减少查找的时间)时,就会被 MicroPython 的编译器和运行环境自动生成。由于上面的缺点,大多数字符串和输入/输出操作都不会产生 interned 字符串。
+
+### MCU
+
+  微控制器,也称单片机,通常资源比成熟的计算机系统要少的多,但是体积更小,也更便宜,功耗更低。MicroPython 被设计的足够小,并且优化到可以运行在一个普通的现代微控制器上。
+
+### micropython-lib
+
+  MicroPython 通常是单个的可执行/二进制文件,只有很少的内置模块。没有广泛的标准库可以用来和 Cpython 相比。与 Cpython 不同的是 MicroPython 有一个相关但是独立的项目 [`micropython-lib`](https://github.com/micropython/micropython-lib),它提供了来自 CPython 标准库的许多模块的实现。然而这些模块大部分需要类似于 POSIX 的环境,只能在 MicroPython 的 Unix 移植上工作。安装方法与 Cpython 也不同,需要使用手动复制或者使用 upip 来安装。由于 RT-Thread 操作系统提供了很好的 POSIX 标准支持,所以 [`micropython-lib`](https://github.com/micropython/micropython-lib) 中很多模块可以在 RT-Thread MicroPython 上运行。
+
+### stream
+
+  也被称为文件类对象,一种对底层数据提供顺序读写访问的对象。stream 对象实现了对应的接口,包括` read()`, `write()`, `readinto()`, `seek()`, `flush()`, `close()`  等方法。在 MicroPython 中,流是一个重要的概念,许多输入/输出对象都实现了流接口,因此可以在不同的上下文中一致地使用。更多关于 MicroPython 流的信息,可以参考  [uio](03-Basic_Module/05-uio.md) 。
+
+### upip
+
+  字面意思是微型的 pip 工具。由 CPython 启发而开发的 MicroPython 包管理程序,但它要小的多,功能也更少。upip 可以在 MicroPython 的 Unix 移植上运行。由于 RT-Thread 操作系统提供了很好的 POSIX 标准支持,所以 upip 也可以运行在 RT-Thread MicroPython 上。使用 upip 工具可以在线下载 MicroPython 的扩展模块,并且自动下载其依赖的模块,为用户扩展 MicroPython 功能提供了很大的便利。 

+ 2 - 2
docs/Development_manual_document_section/03-Basic_Module/01-rtthread.md

@@ -1,8 +1,8 @@
 # **rtthread** – 系统相关函数
 
 
-!!! tip "简介"
-     `rtthread` 模块提供了与 rt-thread 操作系统相关的功能,如查看栈使用情况等。
+!!! abstract "简介"
+     **rtthread** 模块提供了与 rt-thread 操作系统相关的功能,如查看栈使用情况等。
 
 
 ## 函数

+ 4 - 4
docs/Development_manual_document_section/03-Basic_Module/02-utime.md

@@ -1,7 +1,7 @@
 # **utime** – 时间相关函数
 
-!!! tip "简介"
-    utime 模块提供获取当前时间和日期、测量时间间隔和延迟的功能。
+!!! abstract "简介"
+    **utime** 模块提供获取当前时间和日期、测量时间间隔和延迟的功能。
 
 **初始时刻**: Unix 使用 POSIX 系统标准,从 1970-01-01 00:00:00 UTC开始。
 嵌入式程序从 2000-01-01 00:00:00 UTC 开始。
@@ -72,7 +72,7 @@ print(utime.ticks_add(0, -1))
 
 ### **utime.ticks_diff**(ticks1, ticks2)
    计算两次调用 `ticksms()`, `ticks_us()`, 或 `ticks_cpu()`之间的时间。因为这些函数的计数值可能会回绕,所以不能直接相减,需要使用 `ticks_diff()` 函数。“旧” 时间需要在 “新” 时间之前,否则结果无法确定。这个函数不要用在计算很长的时间 (因为 `ticks*()` 函数会回绕,通常周期不是很长)。通常用法是在带超时的轮询事件中调用:
-   
+
 代码示例:
 ```python
 # 等待 GPIO 引脚有效,但是最多等待500微秒
@@ -85,7 +85,7 @@ while pin.value() == 0:
 ### **utime.time**()
   返回从开始时间的秒数(整数),假设 RTC 已经按照前面方法设置好。如果 RTC 没有设置,函数将返回参考点开始计算的秒数 (对于 RTC 没有后备电池的板子,上电或复位后的情况)。如果你开发便携版的 MicroPython 应用程序,你不要依赖函数来提供超过秒级的精度。如果需要高精度,使用 `ticks_ms()` 和 `ticks_us()` 函数。如果需要日历时间,使用不带参数的 `localtime()` 是更好选择。
 
-!!! tip " CPython 的区别"
+!!! tip " CPython 的区别"
     在 CPython 中,这个函数用浮点数返回从 Unix 开始时间(1970-01-01 00:00 UTC)的秒数,通常是毫秒级的精度。在 MicroPython 中,只有 Unix 版才使用相同开始时间,如果允许浮点精度,将返回亚秒精度。嵌入式硬件通常没有用浮点数表示长时间访问和亚秒精度,所以返回值是整数。一些嵌入式系统硬件不支持 RTC 电池供电方式,所以返回的秒数是从最后上电、或相对某个时间、以及特定硬件时间 (如复位)。
 
 ##   示例 

+ 16 - 10
docs/Development_manual_document_section/03-Basic_Module/03-sys.md

@@ -1,16 +1,18 @@
 # **sys** – 系统特有功能函数
 
-!!! tip "简介"
-    `sys` 模块提供系统相关的功能。
+!!! abstract "简介"
+    **sys** 模块提供系统特有的功能。
 
 ## 函数
 
-- sys.exit(retval=0)  
+### **sys.exit**(retval=0)  
   终止当前程序给定的退出代码。 函数会抛出 `SystemExit` 异常。
-
-- sys.print_exception(exc, file=sys.stdout)  
+### **sys.print_exception**(exc, file=sys.stdout)  
   打印异常与追踪到一个类似文件的对象 file (或者缺省 `sys.stdout` ).
 
+!!! tip "与 CPython 的区别"
+    这是 CPython 中回溯模块的简化版本。不同于 `traceback.print_exception()`,这个函数用异常值代替了异常类型、异常参数和回溯对象。文件参数在对应位置,不支持更多参数。CPython 兼容回溯模块在 `micropython-lib`。  
+
 ## 常数
 
 ### **sys.argv**  
@@ -20,16 +22,18 @@
   系统字节顺序 (“little” or “big”).
 
 ### **sys.implementation**  
-  使用当前 Python 实现的。
+  关于当前 Python 实现的信息,对于 MicroPython 来说,有以下属性:  
+  - 名称 -  ‘’micropython“  
+  - 版本 - 元组(主要,次要,小),比如(1,9,3) 
 
 ### **sys.modules**  
-  加载模块字典。在一部分环境中它可能不包含内置模块。
+  已加载模块的字典。在一部分移植中,它可能不包含内置模块。
 
 ### **sys.path**  
-  搜索导入模块的可变目录列表。
+  用来搜索导入模块地址的列表。
 
 ### **sys.platform**  
-  返回当前操作系统信息。
+  返回当前平台的信息。
 
 ### **sys.stderr**  
   标准错误流。
@@ -44,7 +48,7 @@
   符合的 Python 语言版本,如字符串。
 
 ### **sys.version_info**  
-  Python 语言版本,实现符合,作为一个元组的值
+  本次实现使用的 Python 语言版本,用一个元组的方式表示
 
 ## 示例 
 
@@ -60,6 +64,8 @@
 'sys'
 >>> sys.platform
 'rt-thread'
+>>> sys.byteorder
+'little'
 ```
 
 更多内容可参考 [sys](http://docs.micropython.org/en/latest/pyboard/library/sys.html) 。

+ 3 - 4
docs/Development_manual_document_section/03-Basic_Module/04-math.md

@@ -1,9 +1,8 @@
 # **math** – 数学函数
 
-!!! tip "简介"
-    `math` 模块提供了对 C 标准定义的数学函数的访问。 
-    
-    **注意** : 需要带有硬件FPU,精度是32位,这个模块需要浮点功能支持。
+!!! abstract "简介"
+    **math** 模块提供了对 C 标准定义的数学函数的访问。  
+    本模块需要带有硬件FPU,精度是32位,这个模块需要浮点功能支持。
 
 ## 函数
 

+ 2 - 2
docs/Development_manual_document_section/03-Basic_Module/05-uio.md

@@ -1,7 +1,7 @@
 # **uio** – 输入/输出流
 
-!!! tip "简介"
-    `uio` 模块包含流类型 (类似文件) 对象和帮助函数。
+!!! abstract "简介"
+    **uio** 模块包含流类型 (类似文件) 对象和帮助函数。
 
 ## 函数
 

+ 6 - 4
docs/Development_manual_document_section/03-Basic_Module/06-ucollections.md

@@ -1,13 +1,14 @@
 # **ucollections** – 收集和容器类型
 
-!!! tip "简介"
-    `ucollections` 模块实现了专门的容器数据类型,它提供了 Python 的通用内置容器的替代方案,包括了字典、列表、集合和元组。
+!!! abstract "简介"
+    **ucollections** 模块实现了专门的容器数据类型,它提供了 Python 的通用内置容器的替代方案,包括了字典、列表、集合和元组。
 
 ## 类
 
 ### **ucollections.namedtuple**(name, fields)  
-这是工厂函数创建一个新的 `namedtuple` 型与一个特定的字段名称和集合。`namedtuple` 是元组允许子类要访问它的字段不仅是数字索引,而且还具有属性使用符号字段名访问语法。 字段是字符串序列指定字段名称。为了兼容的实现也可以用空间分隔的字符串命名的字段(但效率较低) 使用示例:
+这是工厂函数创建一个新的 `namedtuple` 型与一个特定的字段名称和集合。`namedtuple` 是元组允许子类要访问它的字段不仅是数字索引,而且还具有属性使用符号字段名访问语法。 字段是字符串序列指定字段名称。为了兼容的实现也可以用空间分隔的字符串命名的字段(但效率较低) 
 
+代码示例:
 ```python
 from ucollections import namedtuple
 
@@ -20,7 +21,8 @@ ucollections.OrderedDict(...)
 
 ```
 
-dict 类型的子类,记住并保留键的追加顺序。keys/items 返回的顺序被加入:
+### **ucollections.OrderedDict**(...)  
+字典类型的子类,会记住并保留键/值的追加顺序。当有序的字典被迭代输出时,键/值 会按照他们被添加的顺序返回 :
 
 ```python
 from ucollections import OrderedDict

+ 3 - 3
docs/Development_manual_document_section/03-Basic_Module/07-ustruct.md

@@ -1,10 +1,10 @@
 # **ustruct** – 打包和解包原始数据类型
 
-!!! tip "简介"
-    `ustruct` 模块在 Python 值和以 Python 字节对象表示的 C 结构之间执行转换。
+!!! abstract "简介"
+    **ustruct** 模块在 Python 值和以 Python 字节对象表示的 C 结构之间执行转换。
 
 - 支持 size/byte 的前缀: @, <, >, !.
-- 支持的格式代码: b, B, h, H, i, I, l, L, q, Q, s, P, f, d (最后2个需要浮点库支持).
+- 支持的格式代码: b, B, h, H, i, I, l, L, q, Q, s, P, f, d (最后2个需要支持浮点数).
 
 ## 函数
 

+ 5 - 5
docs/Development_manual_document_section/03-Basic_Module/08-array.md

@@ -1,9 +1,9 @@
 # **array** – 数字数据数组
 
-!!! tip "简介"
-    ``array``  模块定义了一个对象类型,它可以简洁地表示基本值的数组:字符、整数、浮点数。
+!!! abstract "简介"
+    **array**  模块定义了一个对象类型,它可以简洁地表示基本值的数组:字符、整数、浮点数。
 
-- 支持代码格式: b, B, h, H, i, I, l, L, q, Q, f, d (后2个支持浮点数)。
+- 支持代码格式: b, B, h, H, i, I, l, L, q, Q, f, d (后2个需要支持浮点数)。
 
 ## 类
 
@@ -11,10 +11,10 @@
   指定类型创建数组元素。用可选项[]做为数组的初始值,可选项[]未指定的,则创建空数组。
 
 ### **append**(val)  
-  将新元素添加到数组的结尾,并将其扩展。
+  将新元素添加到数组的结尾,将数组扩展。
 
 ### **extend**(iterable)  
-  使用迭代方式将新元素添加到数组的结尾,并将其扩展。
+  使用迭代方式将新元素添加到数组的结尾,将数组扩展。
 
 更多内容可参考  [array](https://docs.python.org/3/library/array.html) 。
 

+ 6 - 6
docs/Development_manual_document_section/03-Basic_Module/09-gc.md

@@ -1,7 +1,7 @@
 # **gc** – 控制垃圾回收
 
-!!! tip "简介"
-    `gc` 模块提供了垃圾收集器的控制接口。
+!!! abstract "简介"
+    **gc** 模块提供了垃圾收集器的控制接口。
 
 ## 函数
 
@@ -9,16 +9,16 @@
   启动自动垃圾回收。
 
 ### **gc.disable**()  
-  禁用自动垃圾回收。 堆内存仍然可以分配,垃圾回收仍然可以手动启动使用 gc.collect().
+  禁用自动垃圾回收。 堆内存仍然可以分配,垃圾回收仍然可以使用 `gc.collect()` 函数来手动初始化。
 
 ### **gc.collect**()  
-  运行垃圾回收。
+  运行一次垃圾回收。
 
 ### **gc.mem_alloc**()  
-  返回分配的堆 RAM 的字节数。
+  返回已被分配的堆 RAM 的字节数。
 
 ### **gc.mem_free**()  
-  返回可用堆内存的字节数。
+  返回可用堆内存的字节数,如果返回 -1 则表示容量不可知
 
 更多内容可参考  [gc](https://docs.python.org/3.5/library/gc.html#module-gc) 。
 

+ 0 - 4
docs/Development_manual_document_section/03-Basic_Module/README.md

@@ -1,4 +0,0 @@
-# RT-Thread MicroPython 基础模块
-
-!!! abstract "摘要"
-    本章介绍 micropython 的基本模块,运用这些模块,你可以使用 MicroPython 的基本功能。

+ 11 - 23
docs/Development_manual_document_section/03-MicroPython_libraries.md

@@ -1,30 +1,21 @@
 # MicroPython 模块
 
-!!! abstract "摘要"
+!!! abstract "简介"
     - MicroPython 提供丰富的模块,每个模块提供特定的功能。了解开发的过程中一些常用的模块的使用方式,可以让你很好的使用 MicroPython 的功能。
 
     - 这些模块可以通过 env 工具的 menuconfig 功能来开启和关闭,如果你需要使用特定的模块,在 menuconfig 中选中模块名,保存退出后,重新编译运行即可。
 
-## 1. MicroPython 模块的类别
+## 1. Python 标准库和微型库
 
-MicroPython 的模块(函数和类库)有以下几类 :
+Python 的标准库被 “微型化”后,就是 MicroPython 标准库,也称 MicroPython 模块。它们仅仅提供了该模块的核心功能,用来替代 Python 标准库 。一些模块使用 Python  标准库的名字,但是加上了前缀 "u",例如``ujson``代替``json``。也就是说 MicroPython 的标准库(微型库),只实现了一部分模块功能。通过给这些库以不同的方式命名,用户可以写一个 Python 级的模块来扩展微型库的功能,以便于兼容 CPython 的标准库(这项工作就是 [micropython-lib](https://github.com/micropython/micropython-lib) 项目的正在做的)。
 
-- 内置模块:标准 Python 功能的子集,用户不能扩展。
-- 扩展模块:实现了 Python 功能的一个子集,并提供用户扩展(通过Python代码)。
-- 扩展模块:实现 micropython 的 Python 标准库。
-- 硬件驱动模块: 特定端口或者硬件驱动的模块,因此不可移植。
+在一些嵌入式平台上,可添加 Python 级别封装库从而实现命名兼容 CPython,使用 MicroPython 标准库既可使用他们的 u-name,也可以使用 non-u-name。使用 non-u-name 的模块可以被库路径文件夹里面的同名模块所覆盖。
 
-## 2. Python 标准库和微型库
+例如,当``import json``时,首先会在库路径文件夹中搜索一个 ``json.py`` 文件或 ``json`` 目录进行加载。如果没有找到,它才会去加载内置 ``ujson`` 模块。
 
-标准的 Python 库被 “微型化”后,就是 micropython 标准库。它们仅仅提供了该模块的核心功能。一些模块没有直接使用标准的 Python 的名字,而是冠以"u",例如``ujson``代替``json``。也就是说 micropython 标准库(=微型库),只实现了一部分模块功能。通过他们的名字不同,用户有选择的去写一个 Python 级模块扩展功能,也是为实现更好的兼容性。
+## 2. RT-Thread MicroPython 模块
 
-在嵌入式平台上,可添加 Python 级别封装库从而实现命名兼容 CPython,微模块即可调用他们的 u-name,也可以调用 non-u-name。根据 non-u-name 包路径的文件可重写。
-
-例如,``import json``的话,首先搜索一个``json.py``文件或``json``目录进行加载。如果没有找到,它回退到加载内置``ujson``模块。
-
-## 3. RT-Thread MicroPython 模块列表
-
-### 1、系统模块
+### 2.1 系统模块
 - [rtthread][1] – RT-Thread 系统相关函数
 - [utime][2]  – 时间相关函数
 - [sys][3]  – 系统特有功能函数
@@ -35,21 +26,21 @@ MicroPython 的模块(函数和类库)有以下几类 :
 - [array][8]  – 数字数据数组
 - [gc][9]  – 控制垃圾回收
 
-### 2硬件模块
+### 2.2 硬件模块
 - [machine][10] – 与硬件相关的功能
 - [machine.Pin][11]
 - [machine.I2C][12]
 - [machine.SPI][13]
 - [machine.UART][14]
 
-### 3、系统模块
+### 2.3 系统模块
 - [uos][15] – 基本的 “操作系统” 服务
 - [select][16] – 等待流事件
 - [uctypes][17] – 以结构化的方式访问二进制数据
 - [uerrno][18] – 系统错误码模块
 - [_thread][19] – 多线程支持
 
-### 4、工具模块
+### 2.4 工具模块
 - [cmath][20] – 复数的数学函数
 - [ubinascii][21] – 二进制/ ASCII转换
 - [uhashlib][22] – 哈希算法
@@ -59,7 +50,7 @@ MicroPython 的模块(函数和类库)有以下几类 :
 - [uzlib][26] – zlib 解压缩
 - [urandom][27] – 随机数生成模块
 
-### 5、网络模块
+### 2.5 网络模块
 - [usocket][28] – 套接字模块
 
 [1]: 03-Basic_Module/01-rtthread.md
@@ -94,6 +85,3 @@ MicroPython 的模块(函数和类库)有以下几类 :
 
 
 
-
-
-

+ 0 - 5
docs/Development_manual_document_section/04-Hardware_Control_Module/README.md

@@ -1,5 +0,0 @@
-# RT-Thread MicroPython 硬件模块
-
-!!! tip "提示"
-    本章介绍 MicroPython 硬件相关的模块,运用这些模块,你可以使用 MicroPython 轻松操纵硬件。
-

+ 0 - 5
docs/Development_manual_document_section/05-System_Module/README.md

@@ -1,5 +0,0 @@
-# RT-Thread MicroPython 基础模块
-
-!!! tip "提示"
-    本章介绍 micropython 的基本模块,运用这些模块,你可以使用 MicroPython 的基本功能。
-

+ 0 - 5
docs/Development_manual_document_section/06-Tools_Module/README.md

@@ -1,5 +0,0 @@
-# RT-Thread MicroPython 基础模块
-
-!!! tip "提示"
-    本章介绍 micropython 的基本模块,运用这些模块,你可以使用 MicroPython 的基本功能。
-

+ 0 - 5
docs/Development_manual_document_section/07-Network_Module/README.md

@@ -1,5 +0,0 @@
-# RT-Thread MicroPython 基础模块
-
-!!! tip "提示"
-    本章介绍 micropython 的基本模块,运用这些模块,你可以使用 MicroPython 的基本功能。
-

+ 9 - 9
docs/Development_manual_document_section/README.md

@@ -3,24 +3,24 @@
 ----------
 
 !!! abstract "摘要"
-     本手册介绍了 RT-Thread Micropython 的基础知识、常用模块,以及开发新模块的流程。带领读者了解 Micropython ,并学会使用 Micropython 进行开发。
+     本手册介绍了 RT-Thread MicroPython 的基础知识、常用模块,以及开发新模块的流程。带领读者了解 MicroPython ,并学会使用 MicroPython 进行开发。
      
 ## 1.1 主要特性
 
-- 1、MicroPython 是 Python 3 编程语言的一种精简而高效的实现,它包含 Python 标准库的一个子集,并被优化为在微控制器和受限环境中运行。
+- MicroPython 是 Python 3 编程语言的一种精简而高效的实现,它包含 Python 标准库的一个子集,并被优化为在微控制器和受限环境中运行。
 
-- 2、RT-Thread MicroPython 可以运行在任何搭载了 RT-Thread 操作系统并且有一定资源的嵌入式平台上。
+- RT-Thread MicroPython 可以运行在任何搭载了 RT-Thread 操作系统并且有一定资源的嵌入式平台上。
 
-- 3、MicroPython 可以运行在有一定资源的开发板上,给你一个低层次的 Python 操作系统,可以用来控制各种电子系统。
+- MicroPython 可以运行在有一定资源的开发板上,给你一个低层次的 Python 操作系统,可以用来控制各种电子系统。
 
-- 4、MicroPython 富有各种高级特性,比如交互式提示、任意精度整数、闭包函数、列表解析、生成器、异常处理等等。
+- MicroPython 富有各种高级特性,比如交互式提示、任意精度整数、闭包函数、列表解析、生成器、异常处理等等。
 
-- 5、MicroPython 的目标是尽可能与普通 Python 兼容,使开发者能够轻松地将代码从桌面端转移到微控制器或嵌入式系统。
+- MicroPython 的目标是尽可能与普通 Python 兼容,使开发者能够轻松地将代码从桌面端转移到微控制器或嵌入式系统。
 
 ## 1.2 MicroPython 的优势
 
-- 1、Python 是一款容易上手的脚本语言,同时具有强大的功能,语法优雅简单。使用 MicroPython 编程可以降低嵌入式的开发门槛,让更多的人体验嵌入式的乐趣。
+- Python 是一款容易上手的脚本语言,同时具有强大的功能,语法优雅简单。使用 MicroPython 编程可以降低嵌入式的开发门槛,让更多的人体验嵌入式的乐趣。
 
-- 2、通过 MicroPython 实现硬件底层的访问和控制,不需要了解底层寄存器、数据手册、厂家的库函数等,即可轻松控制硬件。
+- 通过 MicroPython 实现硬件底层的访问和控制,不需要了解底层寄存器、数据手册、厂家的库函数等,即可轻松控制硬件。
 
-- 3、大部分外设和常用功能都有自己的库,降低开发难度,使开发和移植变得容易和快速。
+- 外设与常用功能都有相应的模块,降低开发难度,使开发和移植变得容易和快速。