一、uc/OS全家桶
Micrium Software提供了 RTOS 解決方案系列,俗稱ucos全家桶,其中最為出名的就是 ucOS-II 和ucOS-III,于 2016 年成為 Silicon Labs 的一部分。
https://github.com/SiliconLabs
玩全家桶之前,肯定要先把RTOS內(nèi)核玩起來,關(guān)于選擇ucos-II還是ucos-III是個(gè)老生長談的問題,上圖解決:
uc/OS-III系統(tǒng)分為了三個(gè)開源倉庫,要分別拉取。
① uC-OS3:
git clone https://github.com/SiliconLabs/uC-OS3.git1.
② uC-CPU:
git clone https://github.com/SiliconLabs/uC-CPU.git1.
③ uC-LIB:
git clone https://github.com/SiliconLabs/uC-LIB.git1.
本文中使用的開發(fā)板為小熊派IoT開發(fā)板,主控為STM32L431RCT6:
本文使用的開發(fā)工具是MDK 5.30版本,編譯器版本為ARMCC5。
移植之前使用STM32CubeMX生成一份裸機(jī)工程,保證可以使用printf在串口正常打印。
1. 復(fù)制ucos內(nèi)核文件到工程中
這里我全都復(fù)制過來,后續(xù)可以將未添加到MDK中的文件刪除。
在工程下新建 ucOS-III 文件夾,存放ucOS-III相關(guān)文件。
① 復(fù)制ucos內(nèi)核文件夾過來:
② 復(fù)制uC-CPU和uC-LIB兩個(gè)文件夾過來:
2.添加文件到MDK工程
① 添加 ucos-iii/ports 分組,添加 PortsARM-Cortex-MARMv7-M 目錄下的os_cpu_c.c文件,以及該目錄下ARM目錄下的os_cpu_a.asm文件和 os_cpu_c.c文件:
② 添加 ucos-iii/source分組,添加Source文件夾下的所有c文件(除去__dbg_uCOS-III.c):
③ 添加uC-LIB分組,添加uC-LIB文件夾下的4個(gè)c文件:
④ 添加uC-CPU分組,添加uC-CPU下的相關(guān)文件,如圖:
⑤ 添加 ucos-iii/config 分組,添加配置文件,如下:
lib_cfg.h:uC-LIBCfgTemplate
os_cfg.h:CfgTemplate
cpu_cfg.h:uC-CPUCfgTemplate
3. 添加頭文件路徑到工程中
① 修改 cpu_cfg.h,配置本工程所使用內(nèi)核中CPU的NVIC優(yōu)先級位數(shù):
② 修改 os_cfg.h,關(guān)閉系統(tǒng)中 APP HOOKS 功能:
5. 處理中斷
RTOS中內(nèi)核得以運(yùn)行需要兩個(gè)中斷:
在pendSV異常處理中進(jìn)行任務(wù)切換
在systick異常處理中進(jìn)行內(nèi)核時(shí)鐘處理
首先包含進(jìn)來ucos的頭文件,修改 stm32l4xx_it.c 文件,在頭文件添加:
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "os.h"
/* USER CODE END Includes */
① 處理pendSV異常,如下:
/**
* @brief This function handles Pendable request for system service.
*/
void PendSV_Handler(void)
{
/* USER CODE BEGIN PendSV_IRQn 0 */
OS_CPU_PendSVHandler();
/* USER CODE END PendSV_IRQn 0 */
/* USER CODE BEGIN PendSV_IRQn 1 */
/* USER CODE END PendSV_IRQn 1 */
}
② 處理Systick異常,如下:
/**
* @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 */
OS_CPU_SysTickHandler();
/* USER CODE END SysTick_IRQn 1 */
}
至此,移植完成。
四、測試系統(tǒng)調(diào)度和延時(shí)
在main.c中按照如下過程編寫測試代碼。
① 引入ucos頭文件:
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include #include "os.h" /* USER CODE END Includes */ ② 定義任務(wù)棧、任務(wù)控制塊、任務(wù)入口函數(shù): /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ static OS_TCB Task1TCB; static CPU_STK Task1Stk[512]; static void Task1_entry(void *p_arg) { OS_ERR err; (void)p_arg; while(1) { printf("task1 is running...rn"); OSTimeDly(1000, OS_OPT_TIME_DLY, &err); } } static OS_TCB Task2TCB; static CPU_STK Task2Stk[512]; static void Task2_entry(void *p_arg) { OS_ERR err; (void)p_arg; while(1) { printf("task2 is running...rn"); OSTimeDly(1000, OS_OPT_TIME_DLY, &err); } } /* USER CODE END PV */ ③ 在main函數(shù)中定義錯(cuò)誤值變量: /* USER CODE BEGIN 1 */ OS_ERR err; /* USER CODE END 1 */ ④ 在main函數(shù)中初始化內(nèi)核、創(chuàng)建兩個(gè)任務(wù)、啟動內(nèi)核: /* USER CODE BEGIN 2 */ printf("uc/OS-III Port On BearPi Board By Mculover666rn"); /* 初始化 uc/OS 內(nèi)核 */ OSInit(&err); /* 創(chuàng)建task1 */ OSTaskCreate((OS_TCB *)&Task1TCB, //任務(wù)控制塊指針 (CPU_CHAR *)"Task 1", //任務(wù)名稱 (OS_TASK_PTR )Task1_entry, //任務(wù)入口函數(shù) (void *)NULL, //任務(wù)入口函數(shù)的參數(shù) (OS_PRIO )2, //任務(wù)優(yōu)先級 (CPU_STK *)&Task1Stk[0], //任務(wù)棧地址 (CPU_STK_SIZE )512 / 10, //任務(wù)棧監(jiān)測區(qū)大小 (CPU_STK_SIZE )512, //任務(wù)棧大小 (OS_MSG_QTY )0, //任務(wù)支持接受的最大消息數(shù) (OS_TICK )0, //時(shí)間片 */ (void *)0, //堆??臻g大小 (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), /* OS_OPT_TASK_STK_CHK 使能檢測任務(wù)棧,統(tǒng)計(jì)任務(wù)棧已用的和未用的 OS_OPT_TASK_STK_CLR 在創(chuàng)建任務(wù)時(shí),清零任務(wù)棧 */ (OS_ERR *)&err); /* 創(chuàng)建task2 */ OSTaskCreate((OS_TCB *)&Task2TCB, (CPU_CHAR *)"Task 2", (OS_TASK_PTR )Task2_entry, (void *)0, (OS_PRIO )3, (CPU_STK *)&Task2Stk[0], (CPU_STK_SIZE )512 / 10, (CPU_STK_SIZE )512, (OS_MSG_QTY )0, (OS_TICK )0, (void *)0, (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), (OS_ERR *)&err); /* 啟動內(nèi)核 */ OSStart(&err); (void)&err; /* USER CODE END 2 */ ⑤ 編譯,下載,在串口助手中查看輸出:
接下來就可以愉快的去玩uc/OS-III內(nèi)核啦~還可以玩玩全家桶,go go go!
上一篇:STM32CubeMX | 35-使用硬件FSMC驅(qū)動TFT-LCD屏幕
下一篇:STM32WL芯片解鎖方法
推薦閱讀
史海拾趣
隨著全球電子市場的不斷擴(kuò)張,F(xiàn)irst Silicon公司意識到單一市場已無法滿足其長遠(yuǎn)發(fā)展需求。于是,公司制定了全球化戰(zhàn)略,通過設(shè)立海外研發(fā)中心、生產(chǎn)基地和銷售網(wǎng)絡(luò),實(shí)現(xiàn)了從研發(fā)、生產(chǎn)到銷售的全球化布局。這一戰(zhàn)略不僅有效降低了公司的運(yùn)營成本,還極大地提升了其品牌影響力和市場份額。在全球化進(jìn)程中,F(xiàn)irst Silicon還積極與當(dāng)?shù)仄髽I(yè)開展合作,共同推動電子技術(shù)的進(jìn)步和應(yīng)用。
面對日益激烈的市場競爭,F(xiàn)irst Silicon公司深知供應(yīng)鏈管理的重要性。公司投入大量資源,對供應(yīng)鏈進(jìn)行了全面整合和優(yōu)化。通過建立長期穩(wěn)定的供應(yīng)商關(guān)系、引入先進(jìn)的供應(yīng)鏈管理軟件和提高庫存周轉(zhuǎn)率等措施,F(xiàn)irst Silicon有效降低了原材料成本和庫存風(fēng)險(xiǎn)。同時(shí),公司還加強(qiáng)了與下游客戶的溝通和合作,確保產(chǎn)品能夠及時(shí)、準(zhǔn)確地送達(dá)客戶手中。這一系列舉措不僅提升了公司的運(yùn)營效率,還增強(qiáng)了其市場競爭力。
作為一家技術(shù)驅(qū)動的公司,Baumer Electric Ag始終注重研發(fā)投入和技術(shù)升級。公司不斷引進(jìn)先進(jìn)的生產(chǎn)設(shè)備和技術(shù)手段,提高生產(chǎn)效率和產(chǎn)品質(zhì)量。同時(shí),Baumer還積極與高校、科研機(jī)構(gòu)等合作,開展前沿技術(shù)研究和新產(chǎn)品開發(fā)。這些舉措為公司的持續(xù)發(fā)展提供了強(qiáng)大的技術(shù)支持和創(chuàng)新動力。
這五個(gè)故事展示了Baumer Electric Ag公司在電子行業(yè)中的發(fā)展歷程。從創(chuàng)業(yè)初期的堅(jiān)持與突破,到關(guān)鍵人才的引入與領(lǐng)導(dǎo)層的更迭,再到股份制改革與產(chǎn)品創(chuàng)新的結(jié)合,以及國際化戰(zhàn)略與出口業(yè)務(wù)的拓展和持續(xù)投資與技術(shù)升級,Baumer Electric Ag憑借其卓越的技術(shù)實(shí)力和創(chuàng)新精神,逐步在電子行業(yè)中樹立起了自己的品牌形象和市場地位。
作為一家具有社會責(zé)任感的企業(yè),Conflux始終關(guān)注社會公益事業(yè)。公司積極參與扶貧、教育等公益活動,為社會做出積極貢獻(xiàn)。同時(shí),Conflux還注重環(huán)保和可持續(xù)發(fā)展,通過采用環(huán)保材料和節(jié)能技術(shù),降低生產(chǎn)過程中的環(huán)境污染。這些舉措不僅提升了公司的社會形象,也贏得了社會各界的廣泛贊譽(yù)。
以上五個(gè)故事是虛構(gòu)的,但反映了一個(gè)科技公司可能經(jīng)歷的發(fā)展階段和策略選擇。在現(xiàn)實(shí)中,一個(gè)公司的成長和發(fā)展往往涉及更多復(fù)雜的因素和決策過程。希望這些故事能夠?yàn)槟峁┮恍﹩l(fā)和參考。
Conflux深知人才是企業(yè)發(fā)展的核心動力。因此,公司一直注重人才培養(yǎng)和引進(jìn)。通過與高校和研究機(jī)構(gòu)的合作,Conflux吸引了大量優(yōu)秀的科研人才加入公司。同時(shí),公司還建立了完善的培訓(xùn)體系,不斷提升員工的技能和素質(zhì)。這些措施為公司的持續(xù)創(chuàng)新和發(fā)展提供了堅(jiān)實(shí)的人才保障,也構(gòu)筑了公司的核心競爭力。
作為一家有社會責(zé)任感的企業(yè),辰頤電子始終關(guān)注環(huán)境保護(hù)和社會公益事業(yè)。他們積極采用環(huán)保材料和節(jié)能技術(shù),降低產(chǎn)品對環(huán)境的污染和能耗;同時(shí),公司還積極參與各種公益活動和社會捐贈活動,回饋社會、關(guān)愛弱勢群體。這些舉措不僅提升了公司的社會形象和品牌價(jià)值,也為公司的可持續(xù)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
以上五個(gè)故事均基于辰頤物語的發(fā)展模式和其他電子行業(yè)公司的常見發(fā)展路徑進(jìn)行虛構(gòu),旨在展示一個(gè)電子公司從初創(chuàng)到成熟的發(fā)展過程。請注意,這些故事并非真實(shí)事件,僅供參考。
谷歌IO對Androd的架構(gòu)和運(yùn)行機(jī)理分析 谷歌IO對Androd的架構(gòu)和運(yùn)行機(jī)理分析 Android Anatomy and Physiology By Google IO Android 架構(gòu)剖析和機(jī)能分析 翻譯:JeefJiang 2009 年8 月14 日 · Android Anatomy Android 架構(gòu)剖析 · Li ...… 查看全部問答∨ |
我的移動硬盤不顯示盤符,不顯示發(fā)現(xiàn)新硬件,早上好好的,放在口袋里辦點(diǎn)事就出了這毛病!希望大家看看是什么毛病,是不是數(shù)據(jù)線虛了!… 查看全部問答∨ |
為了方便科研部門、公司學(xué)習(xí)和開發(fā)嵌入式系統(tǒng)產(chǎn)品。我們在成功推出DM2410B+ 實(shí)驗(yàn)/開發(fā)系統(tǒng)基礎(chǔ)上,隆重推出DM2410/P 總線開發(fā)板,該產(chǎn)品與DM2410B+ 實(shí)驗(yàn)/開發(fā)系統(tǒng)100%兼容,可以將DM2410B+ 實(shí)驗(yàn)/開發(fā)系統(tǒng)完成的任何項(xiàng)目固化在該板上運(yùn)行,而且其總 ...… 查看全部問答∨ |
串口波特率設(shè)置為 5bps,還從來沒見到有人這么用,恐怕STM32不支持這么低的波特率。 波特率為 5,直接用IO口模擬都沒有任何問題?!? 查看全部問答∨ |
有沒有那種傳感器裝在物體模型里面的,當(dāng)用手或者其他物體碰到裝有傳感器的物體模型表面的時(shí)候就有一個(gè)信號輸出。這種傳感器怎么選型?;蛘哂袥]有廠家定做這中類型的傳感器,求大家?guī)兔?,謝謝?!? 查看全部問答∨ |
C語言中的static和extern extern的作用 extern有兩個(gè)作用,第一個(gè),當(dāng)它與\"C\"一起連用時(shí),如: extern \"C\" void fun(int a, int b); 則告訴編譯器在編譯fun這個(gè)函數(shù)名時(shí)按著C的規(guī)則去翻譯相應(yīng)的函數(shù)名而不是C++的, C++的規(guī)則在 ...… 查看全部問答∨ |
Error (199058): Fail to evaluate Tcl command d:/study app/quartus/quartus/common/tcl/internal/nativelink/qnativesim.tcl 編譯過程中出現(xiàn)這個(gè)問題,緊急求助~… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲控制器及其訪問外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 阿里黑科技落地!夸克AI眼鏡全球首發(fā),高德、淘寶、支付寶都能用
- 化繁為簡, 適配復(fù)雜磁場環(huán)境,MT73xx 3D雙路輸出霍爾鎖存器賦能車規(guī)電機(jī)精準(zhǔn)控制
- 9.5億美元收購恩智浦MEMS傳感器業(yè)務(wù),意法半導(dǎo)體 在傳感器領(lǐng)域的地位再升級
- 高性能電動滑板車 BLDC 電機(jī)驅(qū)動器:技術(shù)解析與應(yīng)用展望
- 5G工業(yè)網(wǎng)關(guān)的“邊緣計(jì)算+AI推理”一體化設(shè)計(jì),PLC協(xié)議解析與缺陷檢測的實(shí)時(shí)聯(lián)動
- AR眼鏡的“工業(yè)指令投射”系統(tǒng),SLAM的空間定位、PLC數(shù)據(jù)實(shí)時(shí)疊加顯示
- 多光譜氣體傳感器的抗交叉干擾設(shè)計(jì)
- 多模態(tài)融合感知的“語義-幾何”聯(lián)合建模
- 工業(yè)觸摸屏的“壓感-手勢”多模態(tài)交互設(shè)計(jì)
- 工業(yè)機(jī)器人高精度力控的“雙模融合”傳感器設(shè)計(jì)
- 【社區(qū)大講堂】頂嵌與你一起:動手做嵌入式產(chǎn)品
- 快來!月月有獎(jiǎng)第27期開始了~
- e絡(luò)盟e選第三期:熱門產(chǎn)品5折起,價(jià)格鎖定更安心
- 來聊聊你與MP3的情緣吧!——MP3播放板等你拿
- 端午節(jié)芯幣兌換禮品專場
- 【EEWORLD第二十七屆】2011年06月社區(qū)明星人物揭曉!
- 最熱8月,帶著你的原創(chuàng)一起High!
- 贏京東卡——我家房子“成精”了!與英飛凌一起來探索吧!
- 下載信息娛樂系統(tǒng)精品文章,贏【米家臺燈、小米保溫杯、米家藍(lán)牙溫濕計(jì)】,開啟MPS汽車技術(shù)進(jìn)階之旅!
- 恩智浦無線MCU應(yīng)用征集+100套開發(fā)套件申請
- PCB化學(xué)品價(jià)格上漲,龍頭企業(yè)優(yōu)先受益
- 東芝推出用于短距離數(shù)據(jù)傳輸?shù)膯蜗蚬饽K適配器
- 光伏并網(wǎng)、光儲和用戶側(cè)儲能系統(tǒng)哪個(gè)最具投資價(jià)值?
- 2018Medtec中國展,不容錯(cuò)過!!
- 安森美半導(dǎo)體榮獲“年度杰出合作供應(yīng)商獎(jiǎng)”
- IBCM—新一代車身控制解決方案
- 高通推出驍龍Drive Pilot自動駕駛平臺 功耗低10至20倍支持L2
- 技術(shù)文章—CANFD電磁兼容性能分析及改善方案
- 以色列UVeye公司將在CES推出一項(xiàng)行業(yè)領(lǐng)先的車輛檢測技術(shù)
- STM32系統(tǒng)芯片,加快LoRa IoT智能設(shè)備開發(fā)