色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

3天內不再提示

騰訊物聯(lián)網系統(tǒng)TOS內核移植起來比你想象的要簡單

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 作者:黃工的嵌入式技術 ? 2020-02-05 12:51 ? 次閱讀

可能很多人都聽說了,就在前幾天,騰訊公布了面向物聯(lián)網領域開發(fā)的實時操作系統(tǒng):TencentOS tiny.

一、介紹

TencentOS tiny的內核就是一個RTOS內核,與我們常見的RTOS有很多類似之處。比如:任務管理、實時調度、時間管理、消息隊列、信號量、互斥鎖、事件標志等。

其實,更重要的是上層的Iot SDK,這一套協(xié)議棧主要用于快速接入騰訊云,同時,結合上層的安全、組件等框架實現物聯(lián)網。 IoT生態(tài):

更多關于TOS的介紹,請參看官方文檔: https://github.com/Tencent/TencentOS-tiny

(公眾號不支持外部鏈接,請復制鏈接到瀏覽器打開)

二、內核移植

對于TencentOS tiny內核移植,和大多數RTOS可能類似,官方提供有相關文檔。

基于STM32Keil的移植教程,參考地址:

https://github.com/Tencent/TencentOS-tiny/blob/master/doc/TencentOS-tiny-porting-keil.md

移植前的準備

1. 準備目標硬件(開發(fā)板/芯片/模組)

TencentOS tiny目前主要支持ARM Cortex M核芯片的移植,比如STM32 基于Cortex M核全系列、NXP 基于Cortex M核全系列等。本教程將使用STM32官方Demo開發(fā)板 NUCLEO-L073RZ進行示例移植,其他 ARM Cortex M系列開發(fā)板和芯片移植方法類似。

調試ARM Cortex M核還需要仿真器, NUCLEO-L073RZ自帶ST-Link調試器,如果您的開發(fā)板或者芯片模組沒有板載仿真器,就需要連接外置的仿真器,如J-Link、U-Link之類的。

2.準備編譯器環(huán)境

本移植指南針對的是Keil MDK,最新版本5.28a

下載地址為:

https://www.keil.com/demo/eval/arm.htm

安裝完成后,還需要安裝對應芯片的器件支持包Keil.STM32L0xx_DFP.2.0.1.pack,下載地址為:

http://www.keil.com/dd2/Pack

參考文章:Keil系列教程

3. 準備芯片對應的裸機工程

移植TencentOS tiny基礎內核需要您提前準備一個芯片對應的裸機工程,裸機工程包含基本的芯片啟動文件、基礎配置(時鐘、主頻等)、以及串口、基本GPIO驅動用于RTOS測試。

本教程使用ST官方的STM32CubeMX軟件來自動化生成MDK裸機工程,STM32CubeMX的下載地址為:

https://www.st.com/en/development-tools/stm32cubemx.html

安裝STM32CubeMx還需要事先安裝好JDK環(huán)境,您可以在互聯(lián)網上查找如何安裝和配置JDK環(huán)境,此處不再贅述。

參看文章:STM32CubeMX系列教程

4. 準備TencentOS tiny的源碼TencentOS tiny的源碼已經開源,github下載地址為:

https://github.com/Tencent/TencentOS-tiny.git

一級目錄 二級目錄 說明
arch arm TencentOS tiny適配的IP核架構(含M核中斷、調度、tick相關代碼)
board NUCLEO_L073RZ 移植目標芯片的工程文件
kernel core TencentOS tiny內核源碼
pm TencentOS tiny低功耗模塊源碼
osal cmsis_os TencentOS tiny提供的cmsis os 適配

由于本教程只介紹TencentOS tiny的內核移植,所以這里只需要用到 arch、board、kernel、osal四個目錄下的源碼。

內核移植

1. 代碼目錄規(guī)劃

如圖所示,新建TencentOS_tiny主目錄,并在主目錄下添加四個子目錄,其中arch、kernel、osal從代碼倉直接拷貝過來即可,而board目錄下則放入我們前面生成的裸機工程代碼,我們移植的開發(fā)板取名叫NUCLEO_L073RZ,裸機代碼全部拷貝到下面即可,如下圖所示:

接下來進入TencentOS_tinyoardNUCLEO_L073RZMDK-ARM目錄,打開keil工程,我們開始添加TencentOS tiny的內核代碼。

2. 添加arch平臺代碼

tos_cpu.c是TencentOS tiny 的CPU適配文件,包括堆棧初始化,中斷適配等,如果您的芯片是ARM Cortex M核,該文件可以不做改動,M0、M3 、M4、M7是通用的,其他IP核需要重新適配;

port_s.S 文件是TencentOS tiny的任務調度匯編代碼,主要做彈棧壓棧等處理的,port_c.c適配systick等,這兩個文件 每個IP核和編譯器都是不一樣的,如果您的芯片是ARM Cortex M核,我們都已經適配好,比如現在我們移植的芯片是STM32L073RZ,是ARM Cortex M0+核,使用的編譯器是KEIL,所以我們選擇archarmarm-v7mcortex-m0+armcc下的適配代碼,如果你的開發(fā)板是STM32F429IG,M4核,編譯器是GCC,則可以選擇archarmarm-v7mcortex-m4gcc目錄下的適配文件。

3. 添加內核源碼

內核源碼kerne目錄下包含core和pm兩個目錄,其中core下為基礎內核,pm是內核中的低功耗組件;基礎移植的時候可以不添加pm目錄下的代碼,如下圖所示,添加基本內核源碼:

4. 添加cmsis os源碼

cmsis os是TencentOS tiny為了兼容cmsis標準而適配的OS抽象層,可以簡化大家將業(yè)務從其他RTOS遷移到TencentOS tiny的工作量。

5. 添加TencentOS tiny頭文件目錄

添加頭文件目錄前,我們在要移植的工程目錄下新增一個 TOS_CONFIG文件夾,用于存放TencentOS tiny的配置頭文件,也就是接下來要新建的tos_config.h文件;

TencentOS tiny所有要添加的頭文件目錄如下:

6. 新建TencentOS tiny系統(tǒng)配置文件 tos_config.h

```#ifndef TOS_CONFIG_H#define TOS_CONFIG_H #include "stm32l0xx.h" // 目標芯片頭文件,用戶需要根據情況更改 #define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默認支持的最大優(yōu)先級數量 #define TOS_CFG_ROUND_ROBIN_EN 1u // 配置TencentOS tiny的內核是否開啟時間片輪轉 #define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校驗指針合法 #define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模塊功能宏 #define TOS_CFG_MMBLK_EN 1u //配置TencentOS tiny是否開啟內存塊管理模塊 #define TOS_CFG_MMHEAP_EN 1u // 配置TencentOS tiny是否開啟動態(tài)內存模塊 #define TOS_CFG_MMHEAP_POOL_SIZE 0x100 // 配置TencentOS tiny動態(tài)內存池大小 #define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否開啟互斥鎖模塊 #define TOS_CFG_QUEUE_EN 1u // 配置TencentOS tiny是否開啟隊列模塊 #define TOS_CFG_TIMER_EN 1u // 配置TencentOS tiny是否開啟軟件定時器模塊 #define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否開啟信號量模塊 #define TOS_CFG_TICKLESS_EN 0u // 配置Tickless 低功耗模塊開關 #if (TOS_CFG_QUEUE_EN > 0u)#define TOS_CFG_MSG_EN 1u#else#define TOS_CFG_MSG_EN 0u#endif #define TOS_CFG_MSG_POOL_SIZE 10u // 配置TencentOS tiny消息隊列大小 #define TOS_CFG_IDLE_TASK_STK_SIZE 128u // 配置TencentOS tiny空閑任務棧大小 #define TOS_CFG_CPU_TICK_PER_SECOND 1000u // 配置TencentOS tiny的tick頻率 #define TOS_CFG_CPU_CLOCK (SystemCoreClock) // 配置TencentOS tiny CPU頻率 #define TOS_CFG_TIMER_AS_PROC 1u // 配置是否將TIMER配置成函數模式 #endif```

按照上面的模板配置好TencentOS tiny的各項功能后,將tos_config.h 文件放入要移植的board工程目錄下即可,例如本教程是放到boardNUCLEO_L073RZTOS_CONFIG目錄下。

這樣,TencentOS tiny的源碼就全部添加完畢了。

創(chuàng)建TencentOS tiny任務,測試移植結果

1. 修改部分代碼

修改stm32l0xx_it.c的中斷函數,在stm32l0xx_it.c文件中包含 tos.h 頭文件

在stm32l0xx_it.c文件中的PendSV_Handler函數前添加___weak關鍵字,因為該函數在TencentOS tiny的調度匯編中已經重新實現;同時在SysTick_Handler函數中添加TencentOS tiny的調度處理函數,如下圖所示:

2. 編寫TencentOS tiny 測試任務

在mian.c 中添加TencentOS tiny 頭文件,編寫任務函數

```#include "cmsis_os.h"http://task1#define TASK1_STK_SIZE 256void task1(void *pdata);osThreadDef(task1, osPriorityNormal, 1, TASK1_STK_SIZE); //task2#define TASK2_STK_SIZE 256void task2(void *pdata);osThreadDef(task2, osPriorityNormal, 1, TASK2_STK_SIZE); void task1(void *pdata){ int count = 1; while(1) { printf("Hello world!###This is task1 ,count is %d ", count++); HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin); osDelay(2000); }}void task2(void *pdata){ int count = 1; while(1) { printf("Hello TencentOS !***This is task2 ,count is %d", count++); osDelay(1000); }} int fputc(int ch, FILE *f){ if (ch == '') { HAL_UART_Transmit(&huart2, (void *)"", 1,30000); } HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF); return ch;}``` 如圖:

繼續(xù)在main.c 的mian函數中硬件外設初始化代碼后添加TencentOS tiny的初始化代碼:

```osKernelInitialize(); //TOS Tiny kernel initializeosThreadCreate(osThread(task1), NULL);// Create task1osThreadCreate(osThread(task2), NULL);// Create task2osKernelStart();//Start TOS Tiny``` 如圖:

3. 編譯下載測試TencentOS tiny移植結果

按照上圖指示,進行編譯下載到開發(fā)板即可完成TencentOS tiny的測試,如下圖所示,可以看到串口交替打印信息,表示兩個任務正在進行調度,切換運行:

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

    關注

    7

    文章

    1678

    瀏覽量

    50024
  • 嵌入式RTOS
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6805
  • 內核移植
    +關注

    關注

    0

    文章

    6

    瀏覽量

    6989
收藏 0人收藏

    評論

    相關推薦

    蜂窩聯(lián)網怎么選

    的數據傳輸速率。有了蜂窩聯(lián)網技術,您就不必在功耗和數據傳輸速率之間做出妥協(xié),而是可以兩全其美。 終身成本:雖然某些 LPWAN 技術的前期成本可能看起來很吸引人,但評估整個生命周期的成本(部署
    發(fā)表于 03-17 11:46

    為什么選擇蜂窩聯(lián)網

    在為您的聯(lián)網(IoT)應用評估最合適的低功耗廣域網(LPWAN)技術時,除了考慮技術指標外,還必須考慮各種因素,因為技術指標本身可能與實際性能大相徑庭。與 LoRaWAN、Sigfox
    發(fā)表于 03-17 11:42

    99%的人都不知道,氣密性測試儀器竟如此簡單

    大上,但氣密性測試儀器的原理其實非常簡單,甚至比你想象容易理解得多。想象一下,給氣球充氣:當你往氣球里吹氣時,氣球會逐漸膨脹。如果你捏住氣球的吹氣口,氣球就會
    的頭像 發(fā)表于 02-06 14:19 ?415次閱讀
    99%的人都不知道,氣密性測試儀器竟如此<b class='flag-5'>簡單</b>!

    宇樹科技在聯(lián)網方面

    與上下游企業(yè)開展合作,共同構建產業(yè)生態(tài)系統(tǒng)。上游方面,與電機、減速器、軸承等零部件供應商緊密合作,確保產品的質量和供應穩(wěn)定性;下游方面,與系統(tǒng)集成商、應用開發(fā)商等合作,將機器人產品應用于不同的
    發(fā)表于 02-04 06:48

    聯(lián)網就業(yè)有哪些高薪崗位?

    架構師: 負責制定聯(lián)網解決方案,設計聯(lián)網系統(tǒng)的整體架構,對于整個系統(tǒng)的穩(wěn)定性、安全性和性能負
    發(fā)表于 01-10 16:47

    騰訊內核團隊修復Linux關鍵Bug

    騰訊云操作系統(tǒng)(Tencent OS)內核團隊近日在Linux社區(qū)取得了顯著成果。他們提交的兩項改進方案,成功解決了自2021年以來一直困擾眾多一線廠商,并在近期讓多個Linux頂級
    的頭像 發(fā)表于 12-31 10:58 ?504次閱讀

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Linux內核移植內核簡介

    學到本章節(jié),大家應該對Linux操作系統(tǒng)都有了一定的了解,但可能還不知道我們拿到手的內核源碼都經歷了什么。linux有一個龐大的開源社區(qū),每個人都可以向開源社區(qū)提交代碼。由于linux內核十分龐大
    發(fā)表于 12-16 13:08

    飛凌嵌入式ElfBoard ELF 1板卡-Linux內核移植內核簡介

    學到本章節(jié),大家應該對Linux操作系統(tǒng)都有了一定的了解,但可能還不知道我們拿到手的內核源碼都經歷了什么。linux有一個龐大的開源社區(qū),每個人都可以向開源社區(qū)提交代碼。由于linux內核十分龐大
    發(fā)表于 12-13 09:03

    PON不只是破網那么簡單

    。 ? 別急,我知道你在想什么,這聽起來可能有點枯燥,但相信我,這絕對比你想象的要有趣得多! 1 PON,網絡界的“超級英雄” PON,是指利用點對多點拓撲和分光器將數據從單個傳輸點傳送到多個用戶端
    的頭像 發(fā)表于 12-04 09:08 ?599次閱讀
    PON不只是破網那么<b class='flag-5'>簡單</b>

    聯(lián)網定義、聯(lián)網天線選擇指南

    聯(lián)網,英文全稱為internet of things,簡稱IoT,也是一個流行了好久的名詞了。類似于互聯(lián)網,把人與人之間鏈接起來了,而
    的頭像 發(fā)表于 11-12 11:10 ?1401次閱讀
    <b class='flag-5'>物</b><b class='flag-5'>聯(lián)網</b>定義、<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網</b>天線選擇指南

    聯(lián)網學習路線來啦!

    ,開發(fā)物聯(lián)網智能硬件產品大有裨益。 3.2.3圖形界面開發(fā) 對于有顯示界面的智能聯(lián)網產品,用戶對產品界面的審美及操作體驗都有了更高的要求,簡單的顯示和低級的操作方法,已經難以滿足客戶
    發(fā)表于 11-11 16:03

    嵌入式系統(tǒng)聯(lián)網的結合

    隨著科技的飛速發(fā)展,嵌入式系統(tǒng)聯(lián)網(IoT)已經成為現代技術領域的重要組成部分。嵌入式系統(tǒng)是指嵌入到設備或系統(tǒng)中的專用計算機
    的頭像 發(fā)表于 11-06 10:23 ?844次閱讀

    智能系統(tǒng)聯(lián)網的結合

    在數字化轉型的浪潮中,智能系統(tǒng)聯(lián)網的結合成為了推動社會進步的關鍵力量。聯(lián)網通過連接各種設備,收集和傳輸數據,而智能
    的頭像 發(fā)表于 10-29 09:46 ?653次閱讀

    淺談聯(lián)網設備的天線種類

    聯(lián)網,英文全稱為internet of things,簡稱IoT,也是一個流行了好久的名詞了。類似于互聯(lián)網,把人與人之間鏈接起來了,而
    的頭像 發(fā)表于 10-23 10:10 ?1117次閱讀
    淺談<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網</b>設備的天線種類

    什么是聯(lián)網技術?

    夠對海量的聯(lián)網數據進行整合、分析和挖掘,提取有價值的信息。 應用層:是聯(lián)網技術的最終體現,直接面向用戶和具體的應用場景。包括各類
    發(fā)表于 08-19 14:08

    電子發(fā)燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品
    主站蜘蛛池模板: 囯产免费精品一品二区三区视频 | 浴室里强摁做开腿呻吟的漫画 | 欧美人与善交大片 | 色宅男看片午夜大片免费看 | 无套日出白浆在线播放 | 97无码人妻精品1国产精东影业 | 99久久精品国产交换 | 天天影视网网色色欲 | 国产精品99久久久久久AV | 视频一区二区三区蜜桃麻豆 | 国产精品高清在线观看地址 | 无码专区久久综合久综合字幕 | 一本一本之道高清在线观看 | 2017天天拍天天拍香蕉视频 | 中文字幕人成人乱码亚洲影视S | 边摸边吃奶边做激情叫床视 | 5G在线观看免费年龄确认 | 我们日本在线观看免费动漫下载 | 亚久久伊人精品青青草原2020 | 男女啪啪久久精品亚洲A | 精品精品国产yyy5857香蕉 | 国产成人在线小视频 | 小箩莉奶水四溅小说 | 久久这里只有精品视频e | 欧美一区二区在线观看 | 美女张开大腿 | 小夫妻天天恶战 | 玩高中女同桌肉色短丝袜脚文 | 日韩精品一卡二卡三卡四卡2021 | 99国内精品久久久久久久清纯 | 中文字幕亚洲无线码高清不卡 | 999久久免费高清热精品 | 成人天堂婷婷青青视频在线观看 | 亚洲 欧美 国产在线视频 | 99精品视频一区在线视频免费观看 | 欧美人妇无码精品久久 | 国产亚洲精品在浅麻豆 | 午夜熟女插插XX免费视频 | 2020亚洲 欧美 国产 日韩 | 国产成人精品免费青青草原app | 亚洲看片无码免费视频 |