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

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

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

3天內不再提示

騰訊物聯網系統TOS內核移植起來比你想象的要簡單

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

可能很多人都聽說了,就在前幾天,騰訊公布了面向物聯網領域開發的實時操作系統:TencentOS tiny.

一、介紹

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

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

更多關于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. 準備目標硬件(開發板/芯片/模組)

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

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

2.準備編譯器環境

本移植指南針對的是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環境,您可以在互聯網上查找如何安裝和配置JDK環境,此處不再贅述。

參看文章: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. 代碼目錄規劃

如圖所示,新建TencentOS_tiny主目錄,并在主目錄下添加四個子目錄,其中arch、kernel、osal從代碼倉直接拷貝過來即可,而board目錄下則放入我們前面生成的裸機工程代碼,我們移植的開發板取名叫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下的適配代碼,如果你的開發板是STM32F429IG,M4核,編譯器是GCC,則可以選擇archarmarm-v7mcortex-m4gcc目錄下的適配文件。

3. 添加內核源碼

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

4. 添加cmsis os源碼

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

5. 添加TencentOS tiny頭文件目錄

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

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

6. 新建TencentOS tiny系統配置文件 tos_config.h

```#ifndef TOS_CONFIG_H#define TOS_CONFIG_H #include "stm32l0xx.h" // 目標芯片頭文件,用戶需要根據情況更改 #define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默認支持的最大優先級數量 #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是否開啟動態內存模塊 #define TOS_CFG_MMHEAP_POOL_SIZE 0x100 // 配置TencentOS tiny動態內存池大小 #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的源碼就全部添加完畢了。

創建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;}``` 如圖:

繼續在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移植結果

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

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

    關注

    7

    文章

    1656

    瀏覽量

    49453
  • 嵌入式RTOS
    +關注

    關注

    0

    文章

    2

    瀏覽量

    6747
  • 內核移植
    +關注

    關注

    0

    文章

    6

    瀏覽量

    6964
收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

    PON不只是破網那么簡單

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

    聯網定義、聯網天線選擇指南

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

    聯網學習路線來啦!

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

    嵌入式系統聯網的結合

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

    智能系統聯網的結合

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

    淺談聯網設備的天線種類

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

    什么是聯網技術?

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

    億級大標不斷!聯網「智慧應急」今年大爆?

    億級大標不斷!聯網「智慧應急」今年大爆?
    的頭像 發表于 06-24 08:05 ?533次閱讀
    億級大標不斷!<b class='flag-5'>物</b><b class='flag-5'>聯網</b>「智慧應急」今年<b class='flag-5'>要</b>大爆?

    一文速覽鐵威馬TOS 6全新“文件管理”

    TOS 6 Beta已經上線一段時間了,各位鐵粉用著怎么樣呢?今天就和大家分享,TOS 6全新文件管理。 為了向用戶提供更流暢、更便捷的文件管理體驗,鐵威馬的研發團隊積極借鑒了Windows OS
    的頭像 發表于 04-16 12:11 ?334次閱讀
    一文速覽鐵威馬<b class='flag-5'>TOS</b> 6全新“文件管理”

    聯網IOT芯片是什么?聯網芯片的作用 聯網芯片的應用領域

    聯網IOT芯片是什么?聯網芯片的作用 聯網芯片的應用領域?
    的頭像 發表于 02-01 11:38 ?3852次閱讀

    聯網平臺之智慧校園系統應用

    校園系統的各項技術應用: 1.?聯網技術:智慧校園系統通過聯網技術,將校園內的各種設備、傳感
    的頭像 發表于 01-10 15:52 ?1090次閱讀

    rk3399移植Linux內核

    RK3399是一款由中國廠商瑞芯微推出的高性能處理器芯片,被廣泛用于嵌入式系統開發。在進行應用程序開發之前,我們需要將Linux內核移植到RK3399上,以支持硬件的驅動和功能。本文將詳細介紹如何將
    的頭像 發表于 01-08 09:56 ?1156次閱讀
    主站蜘蛛池模板: 一区二区三区无码高清视频| 秋霞午夜理论理论福利无码| 伦理 电影在线观看| 午夜DV内射一区区| 草莓视频在线播放视频| 欧美jizz19性欧美| china野外18:19| 蜜柚视频在线观看全集免费观看| 影视先锋男人无码在线| 精品少妇高潮蜜臀涩涩AV| 無码一区中文字幕少妇熟女网站 | 日韩a视频在线观看| 成年性生交大片免费看| 暖暖日本 在线 高清| 91女神娇喘| 妻中蜜在线播放| 穿着丝袜被男生强行啪啪| 入禽太深视频免费视频| 国产精品成人无码久免费| 亚洲男同tv| 暖暖的视频完整视频免费韩国| 成人毛片免费播放| 胸大美女又黄的网站| 麻豆XXXX乱女少妇精品| 打开双腿狠狠蹂躏蜜桃臀| 射死你天天日| 吉吉av电影| www.av一区| 亚洲午夜精品A片久久WWW解说| 暖暖免费观看日本在线视频 | 97超级碰碰人妻中文字幕| 暖暖的高清视频在线观看免费中文 | 浓毛BWBWBWBWBW日本| 耽肉高h喷汁呻吟| 亚洲女初尝黑人巨磁链接| 朋友的娇妻好爽好烫嗯 | 果冻传媒我的女老板| 91国内精品久久久久免费影院| 色姣姣狠狠撩综合网| 麻豆国产成人AV在线| 国产精品人妻系列21P|