天啊!鵝廠都開始做開發(fā)板了?讓我們一睹為快!
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)系我們,謝謝!