騰訊物聯(lián)網(wǎng)操作系統(tǒng)(TencentOS tiny)是騰訊面向物聯(lián)網(wǎng)領(lǐng)域開發(fā)的實時操作系統(tǒng),具有低功耗,低資源占用,模塊化,可裁剪等特性。TencentOS tiny 為物聯(lián)網(wǎng)終端廠家提供一站式軟件解決方案,方便各種物聯(lián)網(wǎng)設(shè)備快速接入騰訊云,可支撐智慧城市、智能水表、智能家居、智能穿戴、車聯(lián)網(wǎng)等多種行業(yè)應(yīng)用。 「騰訊云大學」為大家整理了參與了TencentOS tiny技術(shù)特性規(guī)劃及開發(fā)的「騰訊云高級工程師戴勝冬」老師直播課的內(nèi)容。課程針對新接觸TencentOS tiny的開發(fā)者,從宏觀角度分解TencentOS tiny的技術(shù)架構(gòu),讓開發(fā)者快速了解TencentOS tiny的軟件能力棧;針對弱基礎(chǔ)的基于RTOS內(nèi)核的嵌入式開發(fā)者,設(shè)計了基于TencentOS tiny的嵌入式RTOS開發(fā)范式講解環(huán)節(jié),此環(huán)節(jié)展示基于嵌入式RTOS內(nèi)核基本能力的開發(fā)案例;針對端測最常見的基于模組聯(lián)網(wǎng)場景,設(shè)計了基于TencentOS tiny模組通訊框架的開發(fā)講解環(huán)節(jié),此環(huán)節(jié)展示基于TencentOS tiny AT框架的模組驅(qū)動開發(fā)范式;最后一個環(huán)節(jié),基于TencentOS tiny集成的騰訊云sdk能力,展示一個具體的上云案例開發(fā)流程,助力開發(fā)者快速構(gòu)建自己的物聯(lián)應(yīng)用。 一、TencentOS tiny技術(shù)架構(gòu)講解下圖是TencentOS tiny github官網(wǎng)首頁README中的整體架構(gòu)圖。 這個架構(gòu)較為籠統(tǒng),我們通過從TencentOS tiny作為一個端測操作系統(tǒng)的角度對架構(gòu)進行拆解: TencentOS tiny底層是一個實時操作系統(tǒng)(RTOS)核心,此核心提供了中斷管理、內(nèi)存管理、異常管理、多任務(wù)管理、時間管理、實時調(diào)度等最基本的RTOS功能,在此之上提供了信號量、互斥鎖、事件、消息隊列、完成量、計數(shù)鎖等多任務(wù)通信機制。在內(nèi)核的基礎(chǔ)接口之上,提供了cmsis接口適配層,對于用戶來說,可以通過cmsis接口訪問內(nèi)核功能,也可以直接訪問內(nèi)核層的接口。 從硬件抽象能力的角度對架構(gòu)進行拆解,TencentOS tiny對下支持IoT領(lǐng)域最常見的CPU核心(包括arm v6、v7架構(gòu),以及RISC-V架構(gòu)),集成了最常見的mcu板級開發(fā)包(noridc、st、nxp、TI等),以及常見的一些硬件驅(qū)動包。在內(nèi)核與板級開發(fā)包之間提供一層硬件抽象層,統(tǒng)一化對硬件的訪問。 從組件能力的角度對架構(gòu)進行拆解,針對IoT場景對系統(tǒng)能力的核心訴求,我們圍繞內(nèi)核構(gòu)建了高效的文件系統(tǒng)、設(shè)備管理組件,硬件自組網(wǎng)能力、極簡的功耗管理框架、固件OTA差分升級能力等。 作為物聯(lián)網(wǎng)操作系統(tǒng),“聯(lián)網(wǎng)”是一個重要的能力方面。 針對最常見的基于AT模組的聯(lián)網(wǎng)方式,我們提供了極簡的AT框架實現(xiàn),并實現(xiàn)了基于AT框架的常見模組(esp8266、BC26、SIM800)驅(qū)動,對上封裝成統(tǒng)一的sal接口;針對基于LoRA的聯(lián)網(wǎng)場景,集成了常見的LoRA芯片板級驅(qū)動及LoRA協(xié)議棧,對上封裝成統(tǒng)一的LoRaWan API;對于基于open模式的聯(lián)網(wǎng)能力開發(fā),我們集成了常見的芯片板級驅(qū)動及常見的IoT協(xié)議棧(ble 5.0、wifi等),并積極與芯片廠商合作,對上封裝統(tǒng)一的抽象接口;對于基于以太網(wǎng)的聯(lián)網(wǎng)方式,我們集成了常見的以太網(wǎng)控制器板級驅(qū)動以及LwIP協(xié)議棧,對上提供統(tǒng)一的socket接口。 在這些基礎(chǔ)聯(lián)網(wǎng)能力之上,集成TLS/DTLS傳輸層加密套件以及常見的物聯(lián)網(wǎng)應(yīng)用層協(xié)議棧(MQTT、CoAP、HTTP)。 二、嵌入式RTOS開發(fā)范式講解從上云能力的角度來看,以前面所述的聯(lián)網(wǎng)能力為基礎(chǔ),我們集成了無縫對接騰訊云的SDK套件,提供端測快速對接云端MQTT、CoAP、OTA、Shadow等能力。 RTOS是實時操作系統(tǒng)(RealTime OperationSystem)的縮寫,使用的場景一般是對實時性處理要求較高的、資源受限的設(shè)備,可以解決裸機程序下“多任務(wù)”之間不可能實時搶占的問題。 我們從三個維度考慮為什么使用RTOS:
再了解了什么是RTOS后,我們該如何使用RTOS呢?多任務(wù)的本質(zhì)就是提供了上下文yield語義,以及高優(yōu)先級搶占式調(diào)度的策略?;赗TOS開發(fā),相較于邏輯程序而言,可以享受一系列多任務(wù)間異步同步的機制。 互斥鎖主要是解決多任務(wù)之間臨界區(qū)資源的互斥性訪問的問題,使用互斥鎖可以保證一段臨界區(qū)資源在任意時刻只會有一個任務(wù)在對其進行訪問。假設(shè)你有一段代碼,或者一段數(shù)據(jù),當有多個任務(wù)并行操作時,會導(dǎo)致結(jié)果的不確定性(不可重入性,這段代碼或者數(shù)據(jù)就叫臨界區(qū)資源)。而你的業(yè)務(wù)恰恰存在這種情況,并且想得到這種確定性,那么在訪問這段代碼或這段數(shù)據(jù)(臨界區(qū))前,使用互斥鎖來確保一個臨界區(qū),在任意時刻,只會有一個任務(wù)在對其進行訪問。 信號量解決的是“系統(tǒng)可用資源數(shù)”信息在多任務(wù)間傳遞的問題,通俗化理解就是,對系統(tǒng)某種資源可用數(shù)量進行仲裁、管理的機制,可以用來操作系統(tǒng)中最經(jīng)典的解決生產(chǎn)者、消費者問題。 ![]() 事件解決的是多任務(wù)之間傳遞一種“信號類”信息,一個具體的事件就是一個uint32_t中的比特位。 ![]() 隊列用來解決多任務(wù)之間傳遞帶負載的消息。有些RTOS實現(xiàn)中也稱之為“郵箱”。“事件”機制是通知一個任務(wù)發(fā)生了一件什么事,更多具體的信息就沒有了。隊列提供了傳遞“額外信息”的機制。 ![]() 總結(jié)一下以上的基本組件之任務(wù)間通信:
當需要定時觸發(fā)一些邏輯時,會使用到軟件定時器。軟件定時器是不依賴于特定硬件,純粹用軟件實現(xiàn)的定時器。可以實現(xiàn)“任務(wù)”的定期執(zhí)行。 ![]() 系統(tǒng)在沒有用戶業(yè)務(wù)需要處理的時候(進入idle),系統(tǒng)會自動進入低功耗模式(sleep),TencentOS tiny實現(xiàn)了兩級功耗管理方案:第一級功耗管理,直接在系統(tǒng)配置文件tos_config.h中使能TOS_CFG_PWR_MGR_EN配置項即可,系統(tǒng)會在沒有用戶業(yè)務(wù)需要處理的時候(進入idle)自動進入低功耗模式。第二級功耗管理,提供“非周期性”時鐘機制。需要用戶在tos_config.h中使能TOS_CFG_TICKLESS_EN配置項,并實現(xiàn)喚醒鬧鐘機制以及tickless配置接口。 ![]() 三、模組通信框架開發(fā)講解模組通信框架基于AT指令的模組通信方式,使用起來較為繁瑣,用戶要處理很多與模組之間串口的同步、異步通信流程。模組通信框架,是基于TencentOS tiny對串口的hal抽象接口,以及內(nèi)核提供的信號量、互斥鎖、字符隊列等機制,實現(xiàn)的一套AT處理框架,并基于AT框架實現(xiàn)最常見的AT模組驅(qū)動,對上提供統(tǒng)一的SAL訪問接口,極大簡化用戶對AT模組的使用流程。 ![]() 以下是一個最典型的基于SAL接口及AT框架的模組訪問案例: ![]() 首先我們通過串口發(fā)送AT+RESTORE的命令讓模組復(fù)位,第二步把這個模組設(shè)置為station模式,再設(shè)置多連接模式,并最終發(fā)布數(shù)據(jù)。 接下來我們談?wù)勗趺词褂媚=M通信框架。 ![]() Void tos at uart write byte 這個接口是用來向AT框架灌入數(shù),一般用于與模組連接的串口中斷處理函數(shù)中被調(diào)用。串口中斷中收到數(shù)據(jù)后(從模組來的),調(diào)用此接口將數(shù)據(jù)灌入AT框架。 ![]() AT框架提供了一系列的接口,可以輔助用戶編寫模組訪問的AT驅(qū)動。 ![]() 上圖是基于AT框架編寫自己的模組驅(qū)動的流程:
在直播課中,戴勝冬老師講解了幾個驅(qū)動編寫案例。 ![]() ![]() ![]() ![]() 四、上云案例開發(fā)講解TencentOS tiny基于TencentOS tiny開發(fā)評估套件及eps8266 AT模組的對接騰訊云mqtt服務(wù)的案例: TencentOS-tiny\board\TencentOS_tiny_EVB_MX\KEIL\tencent_cloud_sdk_mqtt ![]() ![]() 1、qcloud_device_create 創(chuàng)建一個端測設(shè)備,接口參數(shù)為在云上控制臺中返回的設(shè)備信息。 2、qcloud_mqtt_connect_opt_create 創(chuàng)建mqtt連接選項。 3、qcloud_mqtt_client_create 用創(chuàng)建的設(shè)備及mqtt連接選項創(chuàng)建一個mqtt client。 4、qcloud_mqtt_client_connect 發(fā)起mqtt連接。 5、qcloud_mqtt_client_subscribe 訂閱主題。 6、qcloud_mqtt_client_publish 發(fā)布主題。 7、qcloud_mqtt_client_yield mqtt連接?;?。 TencentOS tiny還提供了小程序框架,可以無縫對接騰訊云openAPI平臺,直接在小程序中訪問設(shè)備狀態(tài)及設(shè)備狀態(tài)控制。 ![]() 五、內(nèi)容總結(jié):
除了文中提到的驅(qū)動和端側(cè)對接云端的案例外,再直播課中還演示了TencentCloud IoT Hub平臺的使用,想具體了解的同學可以觀看詳細的課程錄播視頻。 |
|