## **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 預覽**

###
## **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