0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

全面解析騰訊最新開源 loT 操作系統(tǒng) TencentOS tiny

丫丫119 ? 來源:未知 ? 作者:肖冰 ? 2019-09-28 06:12 ? 次閱讀

近期騰訊低調地在GitHub上開源了自己的loT操作TencentOS tiny,截至發(fā)稿,已經累積了2000多個Star,引發(fā)了不小的關注。由于筆者曾經做過CSDN的嵌入式大版當過很長時間的版主,所以第一時間到https://github.com/Tencent/TencentOS-tiny下載了全部的代碼,第一時間為大家?guī)斫庾x。

TencentOS tiny整體架構

TencentOS tiny 提供精簡的 RTOS內核,其架構圖如下:

目前看其內核部分已經開發(fā)完成,并已經完全開源。從目前TencentOS tiny的情況看,騰訊入局物聯(lián)網的相關鏈條已經規(guī)劃完整:

布署了TencentOS tiny的的嵌入式開發(fā)板也已經制造出來,所以看來鵝廠在物聯(lián)網時代對于入口的爭奪也不會有絲毫的放松。

下面我將對于TencentOS tiny代碼中內核及l(fā)oT協(xié)議部分進行相關解讀。

TencentOS tiny內核信號量與互斥鎖解讀

TencentOS tiny的官宣文檔中對于其內核的描述如下:TencentOS tiny 實時內核包括任務管理、實時調度、時間管理、中斷管理、內存管理、異常處理、軟件定時器、鏈表、消息隊列、信號量、互斥鎖、事件標志等模塊。其中定時器、消息隊列等在之前都有過相應介紹,這里就為大家來解讀一下信號量與互斥鎖的相關代碼。信號量與互斥鎖的異同:1.信號量與互斥鎖最根本的不同點在于:互斥鎖的取值只能是0或者1,而信號量的取值范圍則可以定義。2.信號量的作用域可以進程也可以是線程,而互斥鎖只能是線程。簡單來說互斥鎖可以實現(xiàn)線程對于唯一資源的使用保護,而信號量則可以實現(xiàn)多線程或者進程間數(shù)量有限資源的使用保護。從某種意義上講互斥鎖是只能一個資源可用的信號量。關于TencentOS tiny互斥體的實現(xiàn),首先來看其數(shù)據(jù)結構具體解讀如下:

__API__k_err_ttos_mutex_pend_timed(k_mutex_t*mutex,k_tick_ttimeout) { TOS_CPU_CPSR_ALLOC(); k_err_terr; TOS_PTR_SANITY_CHECK(mutex); TOS_IN_IRQ_CHECK(); #ifTOS_CFG_OBJECT_VERIFY_EN>0u if(!pend_object_verify(&mutex->pend_obj,PEND_TYPE_MUTEX)){ returnK_ERR_OBJ_INVALID; } #endif TOS_CPU_INT_DISABLE();//將CPU鎖住,防止其它進程進入 if(mutex->pend_nesting==(k_nesting_t)0u){//沒有等待 mutex_fresh_owner_mark(mutex,k_curr_task);//將此mutex的owner置為當前task TOS_CPU_INT_ENABLE();//將CPU解鎖 returnK_ERR_NONE;//返回成功 } if(knl_is_self(mutex->owner)){ if(mutex->pend_nesting==(k_nesting_t)-1){//等待數(shù)量如果超限則返回overflow TOS_CPU_INT_ENABLE(); returnK_ERR_MUTEX_NESTING_OVERFLOW; } ++mutex->pend_nesting; TOS_CPU_INT_ENABLE(); returnK_ERR_MUTEX_NESTING; } if(timeout==TOS_TIME_NOWAIT){//如果鎖已經被占用超時時間為不等待,則直接返回 TOS_CPU_INT_ENABLE(); returnK_ERR_PEND_NOWAIT; } if(knl_is_sched_locked()){//如果任務被鎖定,則直接返回 TOS_CPU_INT_ENABLE(); returnK_ERR_PEND_SCHED_LOCKED; } if(mutex->owner->prio>k_curr_task->prio){ tos_task_prio_change(mutex->owner,k_curr_task->prio);//如果owner的優(yōu)先級更低,也就是其數(shù)值更大,則調整優(yōu)先級 } pend_task_block(k_curr_task,&mutex->pend_obj,timeout);//阻塞pending的任務 TOS_CPU_INT_ENABLE();//解鎖CPU總線 knl_sched();//解鎖任務高度 err=pend_state2errno(k_curr_task->pend_state); if(err==K_ERR_NONE){//如果沒有錯誤 TOS_CPU_INT_DISABLE(); mutex_new_owner_mark(mutex,k_curr_task);//刷新mutex當前的owner TOS_CPU_INT_ENABLE(); } returnerr; }

TencentOS tiny信號量的實現(xiàn)

首先來看k_sem_st的結構體:

__STATIC__k_err_tsem_do_post(k_sem_t*sem,opt_post_topt) { TOS_CPU_CPSR_ALLOC();//為CPU的CPSR進行預分配為后面恢復做準備 TOS_PTR_SANITY_CHECK(sem); #ifTOS_CFG_OBJECT_VERIFY_EN>0u if(!pend_object_verify(&sem->pend_obj,PEND_TYPE_SEM)){ returnK_ERR_OBJ_INVALID; } #endif TOS_CPU_INT_DISABLE();//CPU鎖定防止其它進程入 if(sem->count==(k_sem_cnt_t)-1){//若資源數(shù)量為-1則返回超限 TOS_CPU_INT_ENABLE(); returnK_ERR_SEM_OVERFLOW; } if(pend_is_nopending(&sem->pend_obj)){//如果無pending的情況則直接返回 ++sem->count; TOS_CPU_INT_ENABLE(); returnK_ERR_NONE; } pend_wakeup(&sem->pend_obj,PEND_STATE_POST,opt);//喚醒pending的進程 TOS_CPU_INT_ENABLE();//恢復CPU knl_sched();//恢復任務調度 returnK_ERR_NONE; }

所以從上述解讀相信各位讀者也能看到,TencentOS tiny的內核的確是被精心修減過,針對物聯(lián)網場景做了相應的優(yōu)化,去掉了一些沒有必要的功能代碼。

TencentOS tiny對于MQTT的實現(xiàn)

在TencentOS tiny的官宣中對于IoT 協(xié)議棧介紹如下:TencentOS tiny 提供 lwip、AT Adapter、SAL 層,支持不同的網絡硬件,例如以太網、串口 Wi-Fi、GPRSNB-IoT4G通信模塊。TCP/IP 網絡協(xié)議棧上提供常用的物聯(lián)網協(xié)議棧,例如 CoAP、MQTT,支撐終端業(yè)務快速接入騰訊云。其中MQTT可以算是物聯(lián)網時代比較通用的基于IP網絡的協(xié)議了,它基于發(fā)布/訂閱消息模式,提供一對多的消息分發(fā)有三種消息傳遞服務質量。1.最多一次,也就是消息發(fā)布者只會發(fā)布一次消息,不管對端是否收到也不會發(fā)布第二次。一般用于環(huán)境傳感器的數(shù)據(jù)讀取,因為一般環(huán)境傳感器讀取的密度很高,丟失幾個數(shù)據(jù)并沒有什么大問題。·2.確保到達,這個一般用在數(shù)據(jù)非常重要的情況,發(fā)送端將不斷重復發(fā)送直到對端響應收到。但這樣可能出現(xiàn)數(shù)據(jù)重復。3.確保恰好一次送達,確保消息正好到達一次。這個級別用于計費系統(tǒng),重復或丟失的數(shù)據(jù)可能導致一定的損失。由于MQTT適合在低帶寬、高延時網絡運行的特性所以在特聯(lián)網中的應用很多。不過呢騰訊針對此部分的實現(xiàn)則是完全拷貝于Eclipse Paho項目個人制作的原理動畫如下圖:

但是考慮到物聯(lián)網終端其實僅需要MQTT的發(fā)布方即可,訂閱方的代碼其實沒有太大必要保留,而且從目前發(fā)布支持的場景來看,MQTT一些通訊質量模式其實用處也不多,不過在這方面TencentOS tiny是沒有做任何優(yōu)化與裁減的。所以這應該也可以看做是TencentOS tiny的一個不足吧。

后記

隨著移動互聯(lián)網+智能硬件的不斷發(fā)展,IoT的新業(yè)態(tài)大門徐徐開啟,這里不但有眾多互聯(lián)網企業(yè),也有傳統(tǒng)家電甚至金融企業(yè)不斷入局。但是與傳統(tǒng)互聯(lián)網軟件+硬件的模式不同,物聯(lián)網除了軟、硬件外還多了一個側面-場景,能將軟、硬件及場景整合化一的公司才能笑到最后。就像HTML整合了互聯(lián)網一樣,MQTT等loT協(xié)議會是整合全鏈條的利器,所以最后筆者也呼吁各方除了重視操作系統(tǒng)內核外也需要大力參與loT通訊協(xié)議,尤其注重標準制訂,這樣才能跟上loT的時代潮流。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 操作系統(tǒng)

    關注

    37

    文章

    6609

    瀏覽量

    123029
  • 騰訊
    +關注

    關注

    7

    文章

    1634

    瀏覽量

    49356
  • LOT
    LOT
    +關注

    關注

    3

    文章

    15

    瀏覽量

    5927
收藏 人收藏

    評論

    相關推薦

    linux操作系統(tǒng)安裝步驟 linux操作系統(tǒng)的特點及組成

    Linux操作系統(tǒng)安裝步驟 Linux操作系統(tǒng)是一種開源操作系統(tǒng),它以其穩(wěn)定性、安全性和靈活性而聞名。以下是安裝Linux操作系統(tǒng)的一般步
    的頭像 發(fā)表于 10-21 11:24 ?127次閱讀

    面向功能安全應用的汽車開源操作系統(tǒng)解決方案

    在SAE 2024國際汽車安全大會上,Elektrobit的Linux專家王紅燕在操作系統(tǒng)與芯片技術的分論壇上為大家?guī)砹恕懊嫦蚬δ馨踩珣玫钠?b class='flag-5'>開源操作系統(tǒng)解決方案”主題演講。
    的頭像 發(fā)表于 09-27 09:21 ?344次閱讀
    面向功能安全應用的汽車<b class='flag-5'>開源</b><b class='flag-5'>操作系統(tǒng)</b>解決方案

    嵌入式實時操作系統(tǒng):Intewell操作系統(tǒng)與VxWorks操作系統(tǒng)有啥區(qū)別

    Intewell操作系統(tǒng)和VxWorks操作系統(tǒng)都是工業(yè)領域常用的操作系統(tǒng),它們各有特點和優(yōu)勢。以下是它們之間的一些主要區(qū)別:
    的頭像 發(fā)表于 07-08 14:16 ?284次閱讀
    嵌入式實時<b class='flag-5'>操作系統(tǒng)</b>:Intewell<b class='flag-5'>操作系統(tǒng)</b>與VxWorks<b class='flag-5'>操作系統(tǒng)</b>有啥區(qū)別

    openEuler 24.03 LTS正式發(fā)布,首個AI原生開源操作系統(tǒng)

    【環(huán)球網科技報道記者張陽】“歐拉開源四年,社區(qū)日益蓬勃發(fā)展,我們不僅匯聚了中國頂尖操作系統(tǒng)開發(fā)者的力量,同時吸引了全球更多開發(fā)者的關注和參與。今天我們正式迎來了24.03版本發(fā)布的隆重時刻?!?月6
    的頭像 發(fā)表于 06-15 08:36 ?568次閱讀
    openEuler 24.03 LTS正式發(fā)布,首個AI原生<b class='flag-5'>開源</b><b class='flag-5'>操作系統(tǒng)</b>

    全球首個符合汽車功能安全標準的Ubuntu車載開源操作系統(tǒng)解決方案

    近期,德國汽車零部件巨頭大陸集團旗下 Elektrobit 公司宣布,推出全球首款符合汽車功能安全標準的 Ubuntu 車載開源操作系統(tǒng) EB corbos Linux for Safety Applications。
    的頭像 發(fā)表于 04-29 16:48 ?624次閱讀

    Elektrobit推出全球首個符合汽車功能安全標準的開源操作系統(tǒng)解決方案

    德國埃朗根,2024年4月23日 – Elektrobit今日宣布推出面向功能安全應用的EB corbos Linux for Safety Applications,這是全球首個符合汽車功能安全標準的開源操作系統(tǒng) (OS) 解決方案。
    的頭像 發(fā)表于 04-24 09:58 ?675次閱讀
    Elektrobit推出全球首個符合汽車功能安全標準的<b class='flag-5'>開源</b><b class='flag-5'>操作系統(tǒng)</b>解決方案

    帶你認識實時操作系統(tǒng)(rtos)

    實時操作系統(tǒng)(RTOS)是為嵌入式系統(tǒng)和實時應用提供一個穩(wěn)定、可預測和高效運行環(huán)境的操作系統(tǒng)。實時操作系統(tǒng)確保了系統(tǒng)能夠在嚴格的時間限制內響
    的頭像 發(fā)表于 04-16 16:30 ?986次閱讀
    帶你認識實時<b class='flag-5'>操作系統(tǒng)</b>(rtos)

    中軟國際簽署CLA,正式加入OpenCloudOS操作系統(tǒng)開源社區(qū)

    近日,中軟國際簽署 CLA(Contributor License Agreement 貢獻者許可協(xié)議),正式加入 OpenCloudOS 操作系統(tǒng)開源社區(qū)。
    的頭像 發(fā)表于 04-15 11:42 ?589次閱讀

    RT-Thread斬獲“最具影響力IoT操作系統(tǒng)獎”

    2024年3月30日,第十一屆開源操作系統(tǒng)年度技術會議(OS2ATC)在西郊賓館舉辦!RT-Thread作為國內領先的開源操作系統(tǒng)斬獲了“最具影響力IoT
    的頭像 發(fā)表于 04-10 09:51 ?485次閱讀

    超云信創(chuàng)服務器與openEuler開源操作系統(tǒng)完成互認證

    日前,超云 C86 平臺服務器 R3215、R3216 成功完成了與 openEuler 開源操作系統(tǒng)的兼容性適配工作。測試結果表明:openEuler 22.03 LTS SP3 版本的開源
    的頭像 發(fā)表于 03-12 16:08 ?1083次閱讀
    超云信創(chuàng)服務器與openEuler<b class='flag-5'>開源</b><b class='flag-5'>操作系統(tǒng)</b>完成互認證

    瑞薩正式加入Zephyr項目,攜手共建開源實時操作系統(tǒng)新生態(tài)

    近日,業(yè)界領先的半導體解決方案提供商瑞薩宣布正式加入Zephyr?項目,并榮升為銀級會員。Zephyr作為Linux基金會的開源項目,致力于面向未來、資源受限的設備打造安全、互聯(lián)且靈活的實時操作系統(tǒng)(RTOS)。瑞薩的加入無疑將為Zephyr項目注入新的活力,共同推動
    的頭像 發(fā)表于 03-12 09:18 ?571次閱讀

    一個成熟且可靠的開源實時操作系統(tǒng)

    市場上有許多專有和開源實時操作系統(tǒng)(RTOS)。ThreadX已經以其對小代碼大小和高性能的關注而聞名。然而,它的競爭優(yōu)勢遠遠超出了這些屬性。
    的頭像 發(fā)表于 02-20 12:26 ?730次閱讀

    深度解析全球操作系統(tǒng)格局

    操作系統(tǒng)是負責協(xié)調、管理和控制計算機硬件與軟件資源的程序,是整個計算機的核心系統(tǒng)軟件。 按照操作系統(tǒng)面向的設備類型,通用操作系統(tǒng)主要包括桌面操作系統(tǒng)
    的頭像 發(fā)表于 01-18 15:00 ?871次閱讀
    深度<b class='flag-5'>解析</b>全球<b class='flag-5'>操作系統(tǒng)</b>格局

    詳解實時操作系統(tǒng)和非實時操作系統(tǒng)

    實時操作系統(tǒng),當外界事件和數(shù)據(jù)產生時,系統(tǒng)能以足夠快的速度予以處理,其處理結果能在規(guī)定的時間內控制生產結果或對系統(tǒng)做出響應,并控制所有實時任務協(xié)調一致運行的操作系統(tǒng)。
    的頭像 發(fā)表于 12-26 09:54 ?4106次閱讀
    詳解實時<b class='flag-5'>操作系統(tǒng)</b>和非實時<b class='flag-5'>操作系統(tǒng)</b>

    開源操作系統(tǒng)大全

    開源操作系統(tǒng)即公開源代碼的操作系統(tǒng)軟件,它遵循開源協(xié)議使用、編譯和發(fā)布。自由和開放源代碼軟件中最著名的是 Linux ,它是一種類 Unix
    發(fā)表于 10-27 15:13