女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 作者:黃工的嵌入式技術(shù) ? 2020-02-05 12:51 ? 次閱讀

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

一、介紹

TencentOS tiny的內(nèi)核就是一個(gè)RTOS內(nèi)核,與我們常見(jiàn)的RTOS有很多類似之處。比如:任務(wù)管理、實(shí)時(shí)調(diào)度、時(shí)間管理、消息隊(duì)列、信號(hào)量、互斥鎖、事件標(biāo)志等。

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

更多關(guān)于TOS的介紹,請(qǐng)參看官方文檔: https://github.com/Tencent/TencentOS-tiny

(公眾號(hào)不支持外部鏈接,請(qǐng)復(fù)制鏈接到瀏覽器打開(kāi))

二、內(nèi)核移植

對(duì)于TencentOS tiny內(nèi)核移植,和大多數(shù)RTOS可能類似,官方提供有相關(guān)文檔。

基于STM32、Keil的移植教程,參考地址:

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

移植前的準(zhǔn)備

1. 準(zhǔn)備目標(biāo)硬件(開(kāi)發(fā)板/芯片/模組)

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

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

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

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

下載地址為:

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

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

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

參考文章:Keil系列教程

3. 準(zhǔn)備芯片對(duì)應(yīng)的裸機(jī)工程

移植TencentOS tiny基礎(chǔ)內(nèi)核需要您提前準(zhǔn)備一個(gè)芯片對(duì)應(yīng)的裸機(jī)工程,裸機(jī)工程包含基本的芯片啟動(dòng)文件、基礎(chǔ)配置(時(shí)鐘、主頻等)、以及串口、基本GPIO驅(qū)動(dòng)用于RTOS測(cè)試。

本教程使用ST官方的STM32CubeMX軟件來(lái)自動(dòng)化生成MDK裸機(jī)工程,STM32CubeMX的下載地址為:

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

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

參看文章:STM32CubeMX系列教程

4. 準(zhǔn)備TencentOS tiny的源碼TencentOS tiny的源碼已經(jīng)開(kāi)源,github下載地址為:

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

一級(jí)目錄 二級(jí)目錄 說(shuō)明
arch arm TencentOS tiny適配的IP核架構(gòu)(含M核中斷、調(diào)度、tick相關(guān)代碼)
board NUCLEO_L073RZ 移植目標(biāo)芯片的工程文件
kernel core TencentOS tiny內(nèi)核源碼
pm TencentOS tiny低功耗模塊源碼
osal cmsis_os TencentOS tiny提供的cmsis os 適配

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

內(nèi)核移植

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

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

接下來(lái)進(jìn)入TencentOS_tinyoardNUCLEO_L073RZMDK-ARM目錄,打開(kāi)keil工程,我們開(kāi)始添加TencentOS tiny的內(nèi)核代碼。

2. 添加arch平臺(tái)代碼

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

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

3. 添加內(nèi)核源碼

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

4. 添加cmsis os源碼

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

5. 添加TencentOS tiny頭文件目錄

添加頭文件目錄前,我們?cè)谝浦驳墓こ棠夸浵滦略鲆粋€(gè) TOS_CONFIG文件夾,用于存放TencentOS tiny的配置頭文件,也就是接下來(lái)要新建的tos_config.h文件;

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

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

```#ifndef TOS_CONFIG_H#define TOS_CONFIG_H #include "stm32l0xx.h" // 目標(biāo)芯片頭文件,用戶需要根據(jù)情況更改 #define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默認(rèn)支持的最大優(yōu)先級(jí)數(shù)量 #define TOS_CFG_ROUND_ROBIN_EN 1u // 配置TencentOS tiny的內(nèi)核是否開(kāi)啟時(shí)間片輪轉(zhuǎn) #define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校驗(yàn)指針合法 #define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模塊功能宏 #define TOS_CFG_MMBLK_EN 1u //配置TencentOS tiny是否開(kāi)啟內(nèi)存塊管理模塊 #define TOS_CFG_MMHEAP_EN 1u // 配置TencentOS tiny是否開(kāi)啟動(dòng)態(tài)內(nèi)存模塊 #define TOS_CFG_MMHEAP_POOL_SIZE 0x100 // 配置TencentOS tiny動(dòng)態(tài)內(nèi)存池大小 #define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否開(kāi)啟互斥鎖模塊 #define TOS_CFG_QUEUE_EN 1u // 配置TencentOS tiny是否開(kāi)啟隊(duì)列模塊 #define TOS_CFG_TIMER_EN 1u // 配置TencentOS tiny是否開(kāi)啟軟件定時(shí)器模塊 #define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否開(kāi)啟信號(hào)量模塊 #define TOS_CFG_TICKLESS_EN 0u // 配置Tickless 低功耗模塊開(kāi)關(guān) #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消息隊(duì)列大小 #define TOS_CFG_IDLE_TASK_STK_SIZE 128u // 配置TencentOS tiny空閑任務(wù)棧大小 #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配置成函數(shù)模式 #endif```

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

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

創(chuàng)建TencentOS tiny任務(wù),測(cè)試移植結(jié)果

1. 修改部分代碼

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

在stm32l0xx_it.c文件中的PendSV_Handler函數(shù)前添加___weak關(guān)鍵字,因?yàn)樵摵瘮?shù)在TencentOS tiny的調(diào)度匯編中已經(jīng)重新實(shí)現(xiàn);同時(shí)在SysTick_Handler函數(shù)中添加TencentOS tiny的調(diào)度處理函數(shù),如下圖所示:

2. 編寫(xiě)TencentOS tiny 測(cè)試任務(wù)

在mian.c 中添加TencentOS tiny 頭文件,編寫(xiě)任務(wù)函數(shù)

```#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函數(shù)中硬件外設(shè)初始化代碼后添加TencentOS tiny的初始化代碼:

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

3. 編譯下載測(cè)試TencentOS tiny移植結(jié)果

按照上圖指示,進(jìn)行編譯下載到開(kāi)發(fā)板即可完成TencentOS tiny的測(cè)試,如下圖所示,可以看到串口交替打印信息,表示兩個(gè)任務(wù)正在進(jìn)行調(diào)度,切換運(yùn)行:

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

    關(guān)注

    7

    文章

    1678

    瀏覽量

    50109
  • 嵌入式RTOS
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    6817
  • 內(nèi)核移植
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    6996
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

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

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

    99%的人都不知道,氣密性測(cè)試儀器竟如此簡(jiǎn)單

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

    宇樹(shù)科技在聯(lián)網(wǎng)方面

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

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

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

    騰訊內(nèi)核團(tuán)隊(duì)修復(fù)Linux關(guān)鍵Bug

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

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植內(nèi)核簡(jiǎn)介

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

    飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植內(nèi)核簡(jiǎn)介

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

    PON不只是破網(wǎng)那么簡(jiǎn)單

    。 ? 別急,我知道你在想什么,這聽(tīng)起來(lái)可能有點(diǎn)枯燥,但相信我,這絕對(duì)比你想象的要有趣得多! 1 PON,網(wǎng)絡(luò)界的“超級(jí)英雄” PON,是指利用點(diǎn)對(duì)多點(diǎn)拓?fù)浜头止馄鲗?shù)據(jù)從單個(gè)傳輸點(diǎn)傳送到多個(gè)用戶端
    的頭像 發(fā)表于 12-04 09:08 ?685次閱讀
    PON不只是破網(wǎng)那么<b class='flag-5'>簡(jiǎn)單</b>

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

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

    聯(lián)網(wǎng)學(xué)習(xí)路線來(lái)啦!

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

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

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

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

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

    淺談聯(lián)網(wǎng)設(shè)備的天線種類

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

    什么是聯(lián)網(wǎng)技術(shù)?

    夠?qū)A康?b class='flag-5'>物聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行整合、分析和挖掘,提取有價(jià)值的信息。 應(yīng)用層:是聯(lián)網(wǎng)技術(shù)的最終體現(xiàn),直接面向用戶和具體的應(yīng)用場(chǎng)景。包括各類
    發(fā)表于 08-19 14:08