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