diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/device.md b/rt-thread-version/rt-thread-standard/programming-manual/device/device.md index 82d7a7a7c7acadc2fdd091a0f369eba7dec69086..9976b242526eb506107761cda0c577edf8f1c1d8 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/device/device.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/device/device.md @@ -493,3 +493,27 @@ int main(void) } ``` + + +## 补充说明 + +### I/O 设备模型框架补充图 + + I/O 设备模型框架补充图是对 I/O 设备模型框架图的解释和补充说明,如下图所示。 + +![I/O 设备模型框架补充图](figures/io-dev-ex.png) + + + +图中各类里的c文件是各类对应的管理接口所在,比如设备基类rt_device的管理接口在device.c中。 + +图中设备驱动框架层有很多 RT-Thread 写好的类,图中只列出2类,其他类用 “xxx” 来表示,这些省略的类及其管理接口可以在 RT-Thread 源码 components/drivers 目录下找寻,比如 serial/i2c/spi/sensor/can 等等。 + +图中设备驱动层的 “xxx” ,是 RT-Thread 支持的各 BSP 平台,在源码的 src/bsp 目录下找寻,比如stm32/gd32/at32/avr32/k210 等等。各个平台各自实现各个设备类型的硬件驱动能力,比如 STM32分别实现了 stm32_uart 类/stm32_adc 类等及其对应的管理接口;同样的,其他平台也分别各自实现了诸多对应类别及管理接口。 + +图中设备驱动层的各类里的c文件路径和名字只是示意,具体名字和路径由各BSP开发维护者自己定的。且随着 RT-Thread 版本的变化,各 BSP 的驱动路径和名字可能会发生变化。比如图中画的 STM32 串口设备类的管理接口所在路径是 bsp/stm32/drv_usart.c ,但实际路径是在 RT-Thread 源码下的 bsp/stm32/libraries/HAL_Drivers 下 。比如有的名字叫 drv_uart.c 等等。 + +该图横向看是分层思想,纵向看是各类派生继承关系。从下到上不断抽象、屏蔽下层差异,体现了面向对象的抽象的思想。子类受到父类的接口约束,子类各自实现父类提供的统一接口,又体现了面向接口编程的思想。比如从驱动层到驱动框架层,由不同厂商的相同硬件模块创建了很多子类对象,然后对接到同一个父类接口上,多对一,体现面向对象的抽象的威力。以串口设备为例,不管下层是 STM32、GD32 还是别的平台的,只要都是串口设备,都对接到 RT-Thread 的串口设备类——如图所绘,多个硬件对象对接同一个父类对象接口。同理,从设备驱动框架层到IO设备管理接口层,又是多对一,又是再一次的屏蔽差异,再一次的抽象。——面向对象的思想贯穿其中。 + +tips: +新增 BSP 设备驱动到 I/O 设备模型框架上时,开发者只需开发驱动层即可,驱动框架层和 I/O 设备管理层 RT-Thread 已写好了,无需改动,除非发现BUG或增加新的类别。 \ No newline at end of file diff --git a/rt-thread-version/rt-thread-standard/programming-manual/device/figures/io-dev-ex.png b/rt-thread-version/rt-thread-standard/programming-manual/device/figures/io-dev-ex.png new file mode 100644 index 0000000000000000000000000000000000000000..77f2cb317e82ce94bd7704e0dfacbb2dede98751 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/programming-manual/device/figures/io-dev-ex.png differ