當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]前幾天拿到了騰訊汪總贈送的EVB_MX+以及EVB_LX開發(fā)板,它們長下面這個(gè)樣子,看起來很輕便,即使是外出我也可以隨身帶著它隨時(shí)隨地進(jìn)行玩耍,就和小熊派一樣,整體給人感覺就非常舒服~

1、騰訊物聯(lián)網(wǎng)開發(fā)板開箱

前幾天拿到了騰訊汪總贈送的EVB_MX+以及EVB_LX開發(fā)板,它們長下面這個(gè)樣子,看起來很輕便,即使是外出我也可以隨身帶著它隨時(shí)隨地進(jìn)行玩耍,就和小熊派一樣,整體給人感覺就非常舒服。

一看這個(gè)開發(fā)板外觀以及包裝盒大家就想到了之前的小熊派,不錯(cuò),它們可是有血緣關(guān)系的!但EVB_MX+的資源更加豐富噢!有關(guān)小熊派的評測文章如下:


網(wǎng)紅物聯(lián)網(wǎng)開發(fā)板小熊派使用評測


迫不及待開啟評測模式,我們先來看看這兩個(gè)開發(fā)板的基本介紹以及功能分布,最后選取一個(gè)入門最快的平臺,移植TecentOS tiny,完善最基礎(chǔ)的實(shí)驗(yàn)。

1、EVB_MX+簡介

EVB_MX+使用STM32L431RCT6作為主控,支持傳感器擴(kuò)展E53接口、支持網(wǎng)絡(luò)模塊擴(kuò)展WAN接口、具有豐富的擴(kuò)展接口等等。騰訊TencentOS tiny 團(tuán)隊(duì)聯(lián)合南京厚德物聯(lián)網(wǎng)有限公司在這個(gè)板子上花費(fèi)了不少心血,參考資料可謂是相當(dāng)完善,零基礎(chǔ)小白看著騰訊的開源文檔都能實(shí)現(xiàn)手把手移植TencentOS tiny到相關(guān)平臺,手把手上手TencentOS tiny,據(jù)說移植TencentOS tiny到STM32相當(dāng)容易噢!


EVB_MX+開發(fā)板資源如下:

2、EVB_LX簡介

EVB_LX使用GD32VF103RBT6作為主控,一樣和EVB_MX+支持傳感器擴(kuò)展E53接口、支持網(wǎng)絡(luò)模塊擴(kuò)展WAN接口、具有豐富的擴(kuò)展接口等等。這是TencentOS tiny 團(tuán)隊(duì)聯(lián)合兆易創(chuàng)新(GD32)、南京厚德物聯(lián)網(wǎng)有限公司三方合作設(shè)計(jì)的一款物聯(lián)網(wǎng)評估板,用于TencentOS tiny 基礎(chǔ)內(nèi)核、RISC-V新IP核架構(gòu)和IoT組件功能體驗(yàn)和評估。

近年來,隨著國際形勢日益嚴(yán)峻,國產(chǎn)半導(dǎo)體行業(yè)也在不斷崛起,而兆易創(chuàng)新可謂是芯片國產(chǎn)化的急行軍,它快速借鑒國內(nèi)以及國外的優(yōu)勢資源,吸取教訓(xùn),不斷完善自己的生態(tài)鏈。在國內(nèi)已經(jīng)有不少的廠家開始用上了兆易的芯片做了很多成熟穩(wěn)定的產(chǎn)品,特別是在工控行業(yè),兆易32位芯片逐步取代國外32位主流控制芯片,相信有朝一日定能與國外的半導(dǎo)體行業(yè)一較高下,成為未來芯片設(shè)計(jì)領(lǐng)域的佼佼者!

那么移植一個(gè)TencentOS tiny到開發(fā)板上真的有那么簡單嗎?我們以將TencentOS tiny移植到EVB_MX+為例。


EVB_LX發(fā)板資源如下:

3、TencentOS tiny EVB_MX+初體驗(yàn)

3.1、準(zhǔn)備一份裸機(jī)工程

以下是我配置的LED、按鍵、時(shí)鐘、串口、SWD調(diào)試口的裸機(jī)工程,這里我們直接借助STM32CubeMX生成就好了:

(1)配置LED、按鍵

(2)配置時(shí)鐘

(3)配置串行調(diào)試口

(4)配置調(diào)試串口

(5)生成基礎(chǔ)裸機(jī)工程

設(shè)置外設(shè)以單獨(dú)的文件生成

最后點(diǎn)擊生成代碼即可,我是屬于Keil環(huán)境下進(jìn)行開發(fā)。

3.2、移植TencentOS tiny到EVB_MX+

TencentOS tiny整體架構(gòu)

從TencentOS tiny開源的Github或者碼云倉庫下載整個(gè)SDK包,如下所示:

TencentOS tiny?Github倉庫地址:

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

TencentOS tiny參考文檔地址:

https://cloud.tencent.com/document/product/1098


首先我們重新在別的地方創(chuàng)建一個(gè)TencentOS tiny,然后把我們下載到的包里的arch、board、kernel、osal四個(gè)文件夾拷貝出來放到我們新創(chuàng)建的TencentOS tiny文件夾,最后我們再手動(dòng)創(chuàng)建一個(gè)TOS_CONFIG,用于放置TencentOS tiny的配置文件,效果如下:

接下來我們把剛剛創(chuàng)建好的裸機(jī)工程First_Test放到board文件夾下:

一級目錄 二級目錄 說明
arch arm TencentOS tiny適配的IP核架構(gòu)(含M核中斷、調(diào)度、tick相關(guān)代碼)
board First_Test 移植目標(biāo)芯片的工程文件
kernel core TencentOS tiny內(nèi)核源碼

pm TencentOS tiny低功耗模塊源碼
osal cmsis_os TencentOS tiny提供的cmsis os 適配

這時(shí)候我們的目錄架構(gòu)如上所示,打開First_Test的Keil MDK工程。

(1)添加工程文件

以上需要選擇對應(yīng)芯片架構(gòu),詳細(xì)請參考10.Porting_Manual_for_KEIL.md文檔說明,如果SDK包沒有的話則需要自己去移植。


最后可以看到相關(guān)文件已經(jīng)包含進(jìn)來了:

(2)添加文件路徑

這里要注意的是需要添加對應(yīng)芯片架構(gòu)的頭文件,詳細(xì)請參考10.Porting_Manual_for_KEIL.md文檔說明。

(3)添加相關(guān)代碼

打開stm32l4xx_it.c,包含tos_k.h頭文件:

在PendSV_Handler前加上__weak關(guān)鍵字,因?yàn)镻endSV_Handler已經(jīng)在TencentOS tiny中某些文件重新實(shí)現(xiàn)了。

__weak?void?PendSV_Handler(void)
{
????/*?USER?CODE?BEGIN?PendSV_IRQn?0?*/

????/*?USER?CODE?END?PendSV_IRQn?0?*/
????/*?USER?CODE?BEGIN?PendSV_IRQn?1?*/

????/*?USER?CODE?END?PendSV_IRQn?1?*/
}

在SysTick_Handler函數(shù)中添加TencentOS tiny的調(diào)度處理函數(shù)在SysTick_Handler函數(shù)中添加TencentOS tiny的調(diào)度處理邏輯:

/**
??*?@brief?This?function?handles?System?tick?timer.
??*/
void?SysTick_Handler(void)
{
????/*?USER?CODE?BEGIN?SysTick_IRQn?0?*/

????/*?USER?CODE?END?SysTick_IRQn?0?*/
????HAL_IncTick();

????/*?USER?CODE?BEGIN?SysTick_IRQn?1?*/
????if(tos_knl_is_running())
????{
????????tos_knl_irq_enter();
????????tos_tick_handler();
????????tos_knl_irq_leave();
????}

????/*?USER?CODE?END?SysTick_IRQn?1?*/
}

以上這里有幾個(gè)關(guān)鍵的API的含義在官方文檔中可以查詢到:

tos_tick_handler是系統(tǒng)用于更新時(shí)基用的,源碼如下:

__API__?void?tos_tick_handler(void)
{
????if?(unlikely(!tos_knl_is_running()))?{
????????return;
????}

????tick_update((k_tick_t)1u);

#if?TOS_CFG_TIMER_EN?>?0u?&&?TOS_CFG_TIMER_AS_PROC?>?0u
????timer_update();
#endif

#if?TOS_CFG_ROUND_ROBIN_EN?>?0u
????robin_sched(k_curr_task->prio);
#endif
}

這里首先會判斷內(nèi)核是否已經(jīng)運(yùn)行,如果沒有運(yùn)行則返回,如果運(yùn)行了,那么就調(diào)用tick_update更新系統(tǒng)時(shí)基,如果配置了TOS_CFG_TIMER_EN宏,則調(diào)用timer_update();這樣我們就可以使用TencentOS Tiny的軟件定時(shí)器,如果配置了TOS_CFG_TIMER_AS_PROC宏,那么會進(jìn)行時(shí)間片相關(guān)的邏輯處理,相關(guān)的代碼邏輯大家可以閱讀源碼詳細(xì)分析,不得不說TencentOS Tiny這里的保護(hù)做得非常好,設(shè)計(jì)思路很嚴(yán)謹(jǐn)!

(4)添加OS配置文件

這個(gè)文件一般是手動(dòng)創(chuàng)建的,放在上面我們創(chuàng)建的TOS_CONFIG目錄下,配置對應(yīng)的宏可以開啟OS對應(yīng)的功能,以下是官方給出的一個(gè)標(biāo)準(zhǔn)模板,如果還有別的需要添加的話,則需要修改以下文件。

tos_config.h

#ifndef?_TOS_CONFIG_H_
#define??_TOS_CONFIG_H_

//#include?"stm32l0xx.h"?//?目標(biāo)芯片頭文件,用戶需要根據(jù)情況更改
#include?"stm32l4xx_hal.h"

#define?TOS_CFG_TASK_PRIO_MAX???????????10u??//?配置TencentOS?tiny默認(rèn)支持的最大優(yōu)先級數(shù)量

#define?TOS_CFG_ROUND_ROBIN_EN??????????0u??//?配置TencentOS?tiny的內(nèi)核是否開啟時(shí)間片輪轉(zhuǎn)

#define?TOS_CFG_OBJECT_VERIFY_EN???????????1u?//?配置TencentOS?tiny是否校驗(yàn)指針合法

#define?TOS_CFG_TASK_DYNAMIC_CREATE_EN??1u??//?TencentOS?tiny?動(dòng)態(tài)任務(wù)創(chuàng)建功能宏

#define?TOS_CFG_EVENT_EN????????????????1u??//?TencentOS?tiny?事件模塊功能宏

#define?TOS_CFG_MMBLK_EN????????????????1u??//配置TencentOS?tiny是否開啟內(nèi)存塊管理模塊

#define?TOS_CFG_MMHEAP_EN???????????????1u??//配置TencentOS?tiny是否開啟動(dòng)態(tài)內(nèi)存模塊

#define?TOS_CFG_MMHEAP_DEFAULT_POOL_EN??1u??//?TencentOS?tiny?默認(rèn)動(dòng)態(tài)內(nèi)存池功能宏

#define?TOS_CFG_MMHEAP_DEFAULT_POOL_SIZE????????0x100?//?配置TencentOS?tiny默認(rèn)動(dòng)態(tài)內(nèi)存池大小

#define?TOS_CFG_MUTEX_EN????????????????1u??//?配置TencentOS?tiny是否開啟互斥鎖模塊

#define?TOS_CFG_MESSAGE_QUEUE_EN????????1u??//?配置TencentOS?tiny是否開啟消息隊(duì)列模塊

#define?TOS_CFG_MAIL_QUEUE_EN???????????1u??//?配置TencentOS?tiny是否開啟消息郵箱模塊

#define?TOS_CFG_PRIORITY_MESSAGE_QUEUE_EN?1u?//?配置TencentOS?tiny是否開啟優(yōu)先級消息隊(duì)列模塊

#define?TOS_CFG_PRIORITY_MAIL_QUEUE_EN?1u??//?配置TencentOS?tiny是否開啟優(yōu)先級消息郵箱模塊

#define?TOS_CFG_TIMER_EN????????????????1u??//?配置TencentOS?tiny是否開啟軟件定時(shí)器模塊

#define?TOS_CFG_PWR_MGR_EN??????????????0u??//?配置TencentOS?tiny是否開啟外設(shè)電源管理模塊

#define?TOS_CFG_TICKLESS_EN?????????????0u??//?配置Tickless?低功耗模塊開關(guān)

#define?TOS_CFG_SEM_EN??????????????????1u??//?配置TencentOS?tiny是否開啟信號量模塊

#define?TOS_CFG_TASK_STACK_DRAUGHT_DEPTH_DETACT_EN??????1u?//?配置TencentOS?tiny是否開啟任務(wù)棧深度檢測

#define?TOS_CFG_FAULT_BACKTRACE_EN??????0u??//?配置TencentOS?tiny是否開啟異常棧回溯功能

#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就已經(jīng)在EVB_MX+上移植成功了!接下來我們來測試一下:

(5)添加相關(guān)代碼

在main.c中添加相關(guān)代碼:

#include?"cmsis_os.h"

//定義一個(gè)任務(wù)
#define?TASK1_STK_SIZE??256
void?task1(void?*pdata);
osThreadDef(task1,?osPriorityNormal,?1,?TASK1_STK_SIZE);

void?task1(void?*pdata)
{
????while(1)
????{
????????printf("Hello?TencentOS_tiny_EVB_MX_Plus\n");
????????HAL_GPIO_TogglePin(DEBUG_LED_GPIO_Port,?DEBUG_LED_Pin);
????????osDelay(500);
????}
}

/**
??*?@brief??The?application?entry?point.
??*?@retval?int
??*/
int?main(void)
{
????/*?USER?CODE?BEGIN?1?*/

????/*?USER?CODE?END?1?*/

????/*?MCU?Configuration--------------------------------------------------------*/

????/*?Reset?of?all?peripherals,?Initializes?the?Flash?interface?and?the?Systick.?*/
????HAL_Init();

????/*?USER?CODE?BEGIN?Init?*/

????/*?USER?CODE?END?Init?*/

????/*?Configure?the?system?clock?*/
????SystemClock_Config();

????/*?USER?CODE?BEGIN?SysInit?*/

????/*?USER?CODE?END?SysInit?*/

????/*?Initialize?all?configured?peripherals?*/
????MX_GPIO_Init();
????MX_USART2_UART_Init();
????/*?USER?CODE?BEGIN?2?*/
????//初始化內(nèi)核
????osKernelInitialize();?
????//創(chuàng)建一個(gè)任務(wù)
????osThreadCreate(osThread(task1),?NULL);
????//啟動(dòng)內(nèi)核
????osKernelStart();
????/*?USER?CODE?END?2?*/

????/*?Infinite?loop?*/
????/*?USER?CODE?BEGIN?WHILE?*/
????while?(1)
????{
????????/*?USER?CODE?END?WHILE?*/

????????/*?USER?CODE?BEGIN?3?*/
????}

????/*?USER?CODE?END?3?*/
}

運(yùn)行結(jié)果:

LED調(diào)試燈翻轉(zhuǎn)的同時(shí)打印LOG信息。

有關(guān)TencentOS tiny相關(guān)的知識,小伙伴們可以自行下載SDK包,TencentOS tiny技術(shù)團(tuán)隊(duì)已經(jīng)給多個(gè)開發(fā)板編寫了相應(yīng)的高質(zhì)量軟件例程。相信有不少東西值得學(xué)習(xí)和借鑒。

公眾號粉絲福利時(shí)刻

這里我給大家申請到了福利,本公眾號讀者購買小熊派開發(fā)板可享受9折優(yōu)惠,有需要購買小熊派以及騰訊物聯(lián)網(wǎng)開發(fā)板的朋友,淘寶搜索即可,跟客服說你是公眾號:嵌入式云IOT技術(shù)圈 的粉絲,立享9折優(yōu)惠!

往期精彩

網(wǎng)紅物聯(lián)網(wǎng)開發(fā)板小熊派使用評測

開源STM32產(chǎn)品:無線點(diǎn)菜寶使用評測

替代傳統(tǒng)串口屏的Yoxios了解一下!

了解下小白的福音Micro-Lab(多個(gè)案例帶你快速入門)

覺得本次分享的文章對您有幫助,隨手點(diǎn)[在看]并轉(zhuǎn)發(fā)分享,也是對我的支持。

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉