## **MVC 架构简介**
  经典的MVC是一种常用的代码架构设计思想,其中M表示Model(模型),V表示View(视图),C表示控制器(Controller),相关含义如下:
* Model(模型):封装了数据的互操作操作,是实际进行数据处理的地方。
* View(视图):负责程序和用户之间的交互,例如在屏幕上显示信息。
* Controller(控制器):用于操作Model(模型)和View(视图)。
<br/>
## **SDK 模型**
  通过借鉴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**
  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**
  Services 层目前包含的服务程序包括:
* system:为上层提供系统任务调度服务,提供系统自动低功耗调度能力,任务定时器及快速轮询服务,以及事件通知服务等等,是整个系统进行调度的核心组件。
* msg:管理串口驱动程序的服务。
* hid:管理系统默认按键和系统默认LED的服务。
* database:键值数据库,提供数据的存储服务,具有操作简单,掉电保护,二级缓存,快速写入等优点。
* log:日志服务,为上层提供简洁的接口操作LCD,串口等的信息输出。
* humiture:温湿度服务,用于获取温度和湿度数据的服务。
###
## **tasks**
  Tasks 层默认包含两个任务方便用户进行快速学习:
* system:一个完整的任务所需要编写的程序。
* example:获取温湿度数据,在显示屏上进行显示,进入低功耗模式,定期唤醒再获取温湿度数据,再显示,然后再进入低功耗,如此反复。
<br/>
<br/>
- 框架介绍
- Main 函数
- HAL 函数接口说明
- hal_system.h
- hal_systick.h
- hal_idt.h
- hal_ioctl.h
- hal_flash.h
- hal_lpm.h
- hal_rtc.h
- hal_iwdg.h
- hal_uart.h
- hal_i2c.h
- hal_led.h
- hal_button.h
- hal_vht2x.h
- hal_lcd.h
- Services 函数接口说明
- svc_system.h
- svc_database.h
- svc_hid.h
- svc_msg.h
- svc_humiture.h
- svc_log.h
- Tasks 说明
- task_system.c
- task_example.c
- Libs 函数接口说明
- mathlib.h
- json.h
- atcmd.h
- atcmd_proxy.h
- libwifi.h
- libs1.h