ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## **MVC 架构简介** &emsp;&emsp;经典的MVC是一种常用的代码架构设计思想,其中M表示Model(模型),V表示View(视图),C表示控制器(Controller),相关含义如下: * Model(模型):封装了数据的互操作操作,是实际进行数据处理的地方。 * View(视图):负责程序和用户之间的交互,例如在屏幕上显示信息。 * Controller(控制器):用于操作Model(模型)和View(视图)。 <br/> ## **SDK 模型** &emsp;&emsp;通过借鉴MVC的模型设计,我们将SDK设计成为HAL,Services和Tasks三层,该设计的描述如下: **HAL**: HAL(Hardware Abstraction Layer,硬件抽象层),对各种硬件外设进行抽象,从而达到向上层提供统一的标准接口。 ### **Services**:服务组件,对HAL进行服务化抽象和管理。HAL的重点是操作和管理某一个硬件,例如串口和显示器等。然而,Service的重点是为上层提供服务,例如Log组件为上层提供日志打印服务,这个组件既能通过串口写入日志数据,又能通过显示器上显示日志;又例如Sender组件为上层提供NB-IoT数据发送服务,上层无需理会使用哪个型号的NB-IoT模组去发送的,因为这个组件会自行去处理这些细节。 ### **Tasks**:是指某种更贴合用户需求的任务,例如定时地获取传感器的数值,并上报给指定的服务器。 <br/> ## **编程规范** * 整个SDK采用unix的命名方式,代码风格高度统一,在实际的项目开发过程中,建议使用unix的命名方式,即小写字母加下划线的方式,以保证整体的可读性和流畅性。 * 整个SDK的注释都为英文,建议不使用中文进行注释,避免不同编辑器和编译器由于编码问题而出现乱码。 <br/> ## **SDK 预览** ![](https://img.kancloud.cn/1b/6a/1b6af951665c3ccb5ba07e476f2d2067_1011x805.png =500x) ### ## **HAL** &emsp;&emsp;HAL 层目前包含的驱动程序包括: * system:提供和系统相关的功能,比如重启,获取芯片ID等等。 * systick:提供延时函数及系统定时器等功能。 * idt:中断描述表(Interrupt Description Table),提供对外部中断及其他中断入口进行集中管理的服务。 * ioctl:简化GPIO的配置过程,提供GPIO输入输出,中断等配置的功能。 * flash:提供操作芯片内部FLASH的能力。 * lpm:低功耗管理器(Low Power Manager),向上层提供让芯片进入低功耗模式的能力。 * rtc:实时时钟及闹钟服务。 * iwdg:独立看门狗,是防止系统跑飞的基本驱动组件。 * uart:串口,向上层提供操作串口的能力。 * i2c:I2C总线驱动。 * led:LED驱动服务,向上层提供操作LED的标准接口,比如对LED进行开/关,闪烁等。 * button:按键驱动服务,向上层提供按键的常见功能,比如按键的单击,双击,三击,长按3秒,长按5秒等等。 * vht2x:温湿度传感器(DHT20/DHT22/AHT25/AHT21B等)的驱动程序。 * lcd:显示器驱动程序,向上层提供屏幕的显示服务。 * HW:存放各种第三方的驱动程序,比如OLED12864显示屏的驱动程序,软件SPI的驱动程序,等等。 * STDLibs:官方标准库。 ### ## **Services** &emsp;&emsp;Services 层目前包含的服务程序包括: * system:为上层提供系统任务调度服务,提供系统自动低功耗调度能力,任务定时器及快速轮询服务,以及事件通知服务等等,是整个系统进行调度的核心组件。 * msg:管理串口驱动程序的服务。 * hid:管理系统默认按键和系统默认LED的服务。 * database:键值数据库,提供数据的存储服务,具有操作简单,掉电保护,二级缓存,快速写入等优点。 * log:日志服务,为上层提供简洁的接口操作LCD,串口等的信息输出。 * humiture:温湿度服务,用于获取温度和湿度数据的服务。 ### ## **tasks** &emsp;&emsp;Tasks 层默认包含两个任务方便用户进行快速学习: * system:一个完整的任务所需要编写的程序。 * example:获取温湿度数据,在显示屏上进行显示,进入低功耗模式,定期唤醒再获取温湿度数据,再显示,然后再进入低功耗,如此反复。 <br/> <br/>