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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

如何在APM32F407開發板上應用uC/OS-III實時操作系統

Geehy極海半導體 ? 來源:21ic論壇極海半導體專區 ? 2025-04-01 09:39 ? 次閱讀

來源:轉載自21ic論壇極海半導體專區

最近我開始學習 uC/OS-III 實時操作系統,并著手將其移植到APM32F407 開發板上。在這個過程中,我遇到了許多有趣的挑戰和發現,也感受到了操作系統帶來的強大功能和靈活性。

在這篇帖子中,我打算分享我的學習經驗和移植過程,包括如何開始學習uC/OS-III、配置步驟、移植過程中遇到的問題以及解決方法。我希望通過這篇帖子,能夠幫助那些和我一樣對操作系統感興趣的朋友們,一起探索如何在APM32F407 上應用 uC/OS-III。

1. uC/OS-III簡介:

uC/OS-III,又稱微型C語言編寫的操作系統第3版,是一個基于優先級的實時內核,可升級和固化。它無限制地支持任務個數,并且作為第三代內核,擁有現代實時內核所需的基本功能,例如資源管理、同步和任務間通信。值得注意的是,uC/OS-III具有獨特的功能,如完整的運行時性能測量、直接向任務發送信號或消息,以及任務可以同時等待多個內核對象。

簡單來說,uC/OS-III是一個可擴展和穩固的實時內核,可以管理無限數量的任務。它滿足現代實時內核的期望,提供資源管理、同步和任務間通信等功能。它的獨特之處在于能夠在運行時測量性能、直接向任務發送信號或消息,以及任務可以同時等待多個信號或消息隊列。

下面是一個列出了uC/OS-III的功能的簡單表格:

20d7995c-0bb5-11f0-9310-92fbcf53809c.png

這些功能使得uC/OS-III成為一個強大、靈活且功能豐富的實時操作系統,適用于各種嵌入式系統和實時應用場景。

2.移植流程

?一、uCOS-III系統文件獲取

我這里提供了兩種下載方式,如下。

1.網盤鏈接下載:https://pan.baidu.com/s/1nHZjj2A40qW_jbbODOXfOw?pwd=762k

2.官方下載:https://github.com/weston-embedded

以下是點擊官方下載的鏈接后,需要下載的源文件。

① uc-os3源碼下載

20e73e3e-0bb5-11f0-9310-92fbcf53809c.png

② uc-lib源碼下載

20fce2c0-0bb5-11f0-9310-92fbcf53809c.png

③ uc-cpu源碼下載 ? 2115cc4a-0bb5-11f0-9310-92fbcf53809c.png

??二、添加ucos-III系統文件

1、去極海官網(https://geehy.com/apm32?id=47)下載APM32F407SDK,打開Examples文件夾,復制一份Template模板,新建ucos-III文件夾,把下載的源碼文件全部都復制進去。??

212913a4-0bb5-11f0-9310-92fbcf53809c.png

2、打開mdk工程,新建一些文件目錄。

213a1988-0bb5-11f0-9310-92fbcf53809c.png

?3、向ucos_cpu中添加文件

打開uCOSIIIuC-CPU文件目錄,添加cpu_core.c文件。?

214f0578-0bb5-11f0-9310-92fbcf53809c.png

打開uCOSIIIuC-CPUARM-Cortex-MARMv7-M文件目錄,添加cpu_c.c。

21624b2e-0bb5-11f0-9310-92fbcf53809c.png

打開uCOSIIIuC-CPUARM-Cortex-MARMv7-MARM文件目錄,添加cpu_a.asm。

217a4094-0bb5-11f0-9310-92fbcf53809c.png

?4、向ucos_lib中添加文件。

打開uCOSIIIuC-LIB文件目錄,添加該文件目錄下的所有.c文件。?

218ef9f8-0bb5-11f0-9310-92fbcf53809c.png

?5、向ucos_source中添加文件。

打開uCOSIIIuC-OS3Source文件目錄,添加除了__dbg_uCOS-III.c文件的其余所有文件。?

21a771b8-0bb5-11f0-9310-92fbcf53809c.png

?6、向ucos_port中添加文件。

打開uCOSIIIuC-OS3PortsARM-Cortex-MARMv7-MARM文件目錄,添加該目錄下所有文件。?

21bc6e88-0bb5-11f0-9310-92fbcf53809c.png

打開uCOSIIIuC-OS3PortsARM-Cortex-MARMv7-M文件目錄,添加os_cpu_c.c。

7、向ucos_misc中添加文件。

打開uCOSIIIuC-CPUBSPTemplate文件目錄,添加bsp_cpu.c。?

21d23556-0bb5-11f0-9310-92fbcf53809c.png

8、添加頭文件。

21e8abf6-0bb5-11f0-9310-92fbcf53809c.png

21fab7d8-0bb5-11f0-9310-92fbcf53809c.png

三、編寫代碼

?1、編寫app_cfg.h文件。

ucos-III是沒有提供app_cfg.h這個文件的,我們需要手動編寫。在uCOSIII下新建app_cfg.h,添加如下代碼。 ?

220a1778-0bb5-11f0-9310-92fbcf53809c.png

/* ********************************************************************************************************* * EXAMPLE CODE * * This file is provided as an example on how to use Micrium products. * * Please feel free to use any application code labeled as 'EXAMPLE CODE' in * your application products. Example code may be used as is, in whole or in * part, or may be used as a reference only. This file can be modified as * required to meet the end-product requirements. * * Please help us continue to provide the Embedded community with the finest * software available. Your honesty is greatly appreciated. * * You can find our product's user manual, API reference, release notes and * more information at https://doc.micrium.com. * You can contact us at www.micrium.com. ********************************************************************************************************* */ #ifndef APP_CFG_MODULE_PRESENT #define APP_CFG_MODULE_PRESENT /* ********************************************************************************************************* * MODULE ENABLE / DISABLE ********************************************************************************************************* */ /* ********************************************************************************************************* * TASK PRIORITIES ********************************************************************************************************* */ #define APP_CFG_TASK_START_PRIO 2u #define APP_CFG_TASK_1_PRIO 3u #define APP_CFG_TASK_2_PRIO 4u /* ********************************************************************************************************* * TASK STACK SIZES ********************************************************************************************************* */ #define APP_CFG_TASK_START_STK_SIZE 128u #define APP_CFG_TASK_BLINKY_STK_SIZE 128u #define APP_CFG_TASK_1_STK_SIZE 512u #define APP_CFG_TASK_2_STK_SIZE 512u /* ********************************************************************************************************* * TRACE / DEBUG CONFIGURATION ********************************************************************************************************* */ #ifndef TRACE_LEVEL_OFF #define TRACE_LEVEL_OFF 0 #endif #ifndef TRACE_LEVEL_INFO #define TRACE_LEVEL_INFO 1 #endif #ifndef TRACE_LEVEL_DBG #define TRACE_LEVEL_DBG 2 #endif #define APP_CFG_TRACE_LEVEL TRACE_LEVEL_OFF #define APP_CFG_TRACE printf #define BSP_CFG_TRACE_LEVEL TRACE_LEVEL_OFF #define BSP_CFG_TRACE printf #define APP_TRACE_INFO(x) ((APP_CFG_TRACE_LEVEL >= TRACE_LEVEL_INFO) ? (void)(APP_CFG_TRACE x) : (void)0) #define APP_TRACE_DBG(x) ((APP_CFG_TRACE_LEVEL >= TRACE_LEVEL_DBG) ? (void)(APP_CFG_TRACE x) : (void)0) #define BSP_TRACE_INFO(x) ((BSP_CFG_TRACE_LEVEL >= TRACE_LEVEL_INFO) ? (void)(BSP_CFG_TRACE x) : (void)0) #define BSP_TRACE_DBG(x) ((BSP_CFG_TRACE_LEVEL >= TRACE_LEVEL_DBG) ? (void)(BSP_CFG_TRACE x) : (void)0) #endif

?這段代碼是uC/OS-III示例程序的配置文件,定義了一些任務優先級、任務堆棧大小以及跟蹤/調試配置相關的宏。以下是每個定義的宏的作用:

1. 任務優先級(`APP_CFG_TASK_START_PRIO`, `APP_CFG_TASK_1_PRIO`, `APP_CFG_TASK_2_PRIO`):

- 定義了不同任務的優先級,用于確定任務在多任務系統中的執行順序。數字越小,優先級越高。?

?2. 任務堆棧大小(`APP_CFG_TASK_START_STK_SIZE`, `APP_CFG_TASK_BLINKY_STK_SIZE`,`APP_CFG_TASK_1_STK_SIZE`, `APP_CFG_TASK_2_STK_SIZE`):

- 定義了不同任務所使用的堆棧大小。堆棧大小越大,任務能夠使用的局部變量和函數調用深度就越大。

3. 跟蹤/調試配置:

- `TRACE_LEVEL_OFF`、`TRACE_LEVEL_INFO` 和`TRACE_LEVEL_DBG` 定義了跟蹤信息的級別。在這里,`TRACE_LEVEL_OFF` 表示關閉跟蹤,`TRACE_LEVEL_INFO` 表示僅輸出信息級別的跟蹤,`TRACE_LEVEL_DBG`表示輸出調試級別的跟蹤。

-`APP_CFG_TRACE_LEVEL` 和 `BSP_CFG_TRACE_LEVEL` 分別定義了應用程序和 BSP (Board Support Package) 的跟蹤級別。

- `APP_CFG_TRACE` 和 `BSP_CFG_TRACE` 是跟蹤輸出函數的宏定義。在這里,它們被定義為`printf`,表示將跟蹤信息輸出到標準輸出設備(通常是串口)。?

?4. 跟蹤輸出宏 (`APP_TRACE_INFO`,`APP_TRACE_DBG`, `BSP_TRACE_INFO`, `BSP_TRACE_DBG`):

- 這些宏用于根據跟蹤級別輸出相應級別的跟蹤信息。當跟蹤級別高于宏定義的級別時,才會輸出相應級別的跟蹤信息,否則會被忽略。

2、編寫main函數。

我已經編寫了一個使用ucos-iii的簡單的示例代碼,代碼如下。

/*!

* [url=home.php?mod=space&uid=288409]@file[/url] main.c * * [url=home.php?mod=space&uid=247401]@brief[/url] Main program body * * [url=home.php?mod=space&uid=895143]@version[/url] V1.0.3 * * [url=home.php?mod=space&uid=212281]@date[/url] 2023-07-31 * * @attention * * Copyright (C) 2021-2023 Geehy Semiconductor * * You may not use this file except in compliance with the * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE). * * The program is only for reference, which is distributed in the hope * that it will be useful and instructional for customers to develop * their software. Unless required by applicable law or agreed to in * writing, the program is distributed on an "AS IS" BASIS, WITHOUT * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied. * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions * and limitations under the License. */ /* Includes */ #include "main.h" #include "Board.h" #include #include #include #define DEBUG_USART USART1 /** @addtogroup Examples @{ */ /** @addtogroup Template @{ */ /** @defgroup Template_Functions Functions @{ */ #define STACK_SIZE 128 // Stack size for LED task #define LED_TASK_PRIO 5 // Priority for LED task #define SERIAL_TASK_PRIO 6 // Priority for serial print task OS_TCB ledTaskTCB; // Task Control Block for LED task OS_TCB serialTaskTCB; // Task Control Block for serial print task CPU_STK ledTaskStk[STACK_SIZE]; // Stack for LED task CPU_STK serialTaskStk[STACK_SIZE]; // Stack for serial print task OS_FLAG_GRP ledFlagGrp; // Event flag group for LED task void ledTask(void *p_arg); void serialPrintTask(void *p_arg); /*! * [url=home.php?mod=space&uid=247401]@brief[/url] Main program * * @param None * * @retval None */ int main(void) { USART_Config_T usartConfig; /* Configure US

???我們可以簡單分析一下這段代碼,這段代碼實現了兩個任務:LED任務 (`ledTask`) 和串行打印任務(`serialPrintTask`)。以下是代碼的主要功能和實現細節:

1. 任務優先級和堆棧大小定義:

- 定義了LED任務和串行打印任務的優先級 (`LED_TASK_PRIO` 和`SERIAL_TASK_PRIO`),以及任務堆棧大小 (`STACK_SIZE`)。

- 定義了LED任務和串行打印任務的任務控制塊 (TCB) 和堆棧數組。

2. uC/OS-III初始化:

- 使用`OSInit()` 函數初始化uC/OS-III。

3. 串口和LED初始化:

- 配置了USART1作為調試串口,并初始化LED2和LED3。

4. 任務創建:

- 使用`OSTaskCreate()` 函數創建LED任務和串行打印任務。

- `ledTask` 函數用于定期切換LED狀態,并通過設置事件標志組通知串行打印任務。

- `serialPrintTask`函數等待事件標志組的設置,然后通過串口打印消息。

5. 事件標志組創建:

- 使用`OSFlagCreate()` 函數創建了一個名為 "LED Flags" 的事件標志組 (`ledFlagGrp`)。

6. 多任務啟動:

- 使用`OSStart()` 函數啟動uC/OS-III多任務調度。

7. 主循環:

- 在`main` 函數的無限循環中,沒有具體的操作,只是用來保持程序運行。

8. LED控制和定時延遲:

- `ledTask` 定期切換LED2和LED3的狀態,然后通過設置事件標志組通知串行打印任務。

- `serialPrintTask`等待事件標志組的設置,并在收到通知后通過USART串口打印消息。

9. 系統時鐘設置:

- 使用`SysTick_Config()` 函數配置系統時鐘,用于提供定時功能。

總體來說,這份代碼展示了如何使用uC/OS-III創建并管理多個任務,通過事件標志組實現任務之間的同步,以及使用USART進行串行通信。

四、編譯與下載

2218bd46-0bb5-11f0-9310-92fbcf53809c.jpg

初次編譯時會報錯,原因是ucos-iii系統文件中已經實現了這兩個中斷服務函數。

222449ea-0bb5-11f0-9310-92fbcf53809c.png

注釋apm32f4xx_int.c中這兩個中斷服務函數的實現,再次編譯。

223abbb2-0bb5-11f0-9310-92fbcf53809c.png

編譯無誤,下載代碼。

可以看到LED每隔0.5s翻轉一次,當 LED的狀態變化時,串口都會打印一串信息。(這里LED翻轉的現象就不上傳了)

22545d92-0bb5-11f0-9310-92fbcf53809c.png

注:文章作者在原帖中提供了例程文件,有需要請至原文21ic論壇下載

原文地址:https://bbs.21ic.com/icview-3364670-1-1.html

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

    關注

    3

    文章

    1400

    瀏覽量

    40740
  • 操作系統
    +關注

    關注

    37

    文章

    6977

    瀏覽量

    124403
  • 移植
    +關注

    關注

    1

    文章

    391

    瀏覽量

    28403
  • 開發板
    +關注

    關注

    25

    文章

    5273

    瀏覽量

    99865

原文標題:APM32芯得 EP.50 | APM32F4 移植ucos-iii

文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    國產優秀替代_APM32F407替代STM32F407記錄

    STM32F407綽綽有余。我拿出了我吃灰已久的一塊開發板“啟明欣欣 IMT407 V5.1”(淘寶搜索“啟明欣欣”)。預計將開發板的ST
    的頭像 發表于 05-10 11:22 ?2.1w次閱讀
    國產優秀替代_<b class='flag-5'>APM32F407</b>替代STM32<b class='flag-5'>F407</b>記錄

    APM32F407工具鏈使用教程

    APM32F407工具鏈使用教程
    的頭像 發表于 10-31 17:14 ?1378次閱讀
    <b class='flag-5'>APM32F407</b>工具鏈使用教程

    深入剖析uC/OS-III和FreeRTOS的區別

    操作uC/OS-III為了減少中斷執行的時間,提高系統中斷響應的實時性,設計了OS_TickT
    發表于 08-22 23:08

    分析一下uC/OS-III和FreeRTOS的區別

    : 我覺得,從這一點,可以看出uC/OS-III實時性要比FreeRTOS好。另外,可能有的同學不理解為什么中斷執行時間少了,系統
    發表于 12-17 10:31

    哪里可以買到《嵌入式實時操作系統uc/os-III應用開發》這本書?

    最近學習在看原子哥的視頻學習uc/os-III的相關知識,想買他推薦的兩本參考教材《嵌入式實時操作系統uc/
    發表于 09-26 22:46

    有沒有哪位大神將UC/OS-III 3.06.00移植到STM32F407的?

    最近在學習uC/OS-III,原子的例程中移植UC/OSIII 3.04.00,官網上更新的最新版本是UC/OS-III 3.06.00,取
    發表于 05-25 09:51

    uC/OS-III和FreeRTOS有什么區別

    : 我覺得,從這一點,可以看出uC/OS-III實時性要比FreeRTOS好。另外,可能有的同學不理解為什么中斷執行時間少了,系統
    發表于 05-28 00:38

    uC/OS-III和FreeRTOS的區別是什么?

    : 我覺得,從這一點,可以看出uC/OS-III實時性要比FreeRTOS好。另外,可能有的同學不理解為什么中斷執行時間少了,系統
    發表于 06-09 15:09

    uC/OS-III學習筆記

    uC/OS-III 學習筆記(一)uC/OS-III移植前言  最近畢設要做一個嵌入式設備,需要用到操作系統。本人只會制
    發表于 08-06 06:33

    嵌入式實時操作系統uC/OS-II原理及應用

    例程下載驗證總結參考資料:正點原子《STM32F767 UCOS開發手冊》 野火《uC/OS-III內核應用與開發》 《嵌入式
    發表于 12-17 08:18

    uC/OS-III介紹

    uC/OS-III(Micro C OS Three 微型的C 語言編寫的操作系統第3版)是一個可升級的,可固化的,基于優先級的實時內核。它
    發表于 07-13 17:31 ?0次下載

    uC/OS-III的特點

    uC/OS-III簡介 uC/OS-III(Micro C OS Three 微型的C 語言編寫的操作系
    發表于 10-13 14:07 ?2305次閱讀

    uCOS-III嵌入式實時操作系統中文版教程免費下載

    什么是 uC/OS-IIIuC/OS-III(Micro C OS Three 微型的 C語言編寫的
    發表于 10-28 08:00 ?0次下載
    uCOS-<b class='flag-5'>III</b>嵌入式<b class='flag-5'>實時</b><b class='flag-5'>操作系統</b>中文版教程免費下載

    uC/OS-III移植----第一節(基于野火STM32F407ZGT6開發板 2021/11/1)

    uC/OS-III移植(基于野火STM32F407ZGT6開發板)一、源碼獲取二、工程準備1、開發板準備2、模板準備三、開始移植1、源碼選擇
    發表于 12-01 14:36 ?8次下載
    <b class='flag-5'>uC</b>/<b class='flag-5'>OS-III</b>移植----第一節(基于野火STM32<b class='flag-5'>F407</b>ZGT6<b class='flag-5'>開發板</b> 2021/11/1)

    APM32F407 EVAL 原理圖

    APM32F407 EVAL 原理圖
    發表于 11-09 21:04 ?13次下載
    <b class='flag-5'>APM32F407</b> EVAL 原理圖
    主站蜘蛛池模板: 国产精品日韩欧美一区二区三区 | 黑人巨摘花破女处 | 《乳色吐息》无删减版在线观看 | 欧美激情视频一区二区 | 欧美精品3atv一区二区三区 | 岛国大片在线播放高清 | 福利视频一二三在线观看 | 日韩精品久久日日躁夜夜躁影视 | 泡妞高手在都市完整版视频免费 | 日韩一区二区三区射精 | 久久电影院久久国产 | 亚洲欧美成人综合 | 色欲午夜无码久久久久久 | 国产在线观看码高清视频 | 老妇高潮潮喷到猛进猛出 | 国产手机在线精品 | 亚洲青青草原 | 琪琪婷婷五月色综合久久 | 浪潮AV色综合久久天堂 | 永久精品免费影院在线观看网站 | 成人免费观看在线视频 | 久久国产综合精品欧美 | 色欲AV精品人妻一区二区三区 | 人妻久久久精品99系列AV | 亚洲成av人影院 | 动漫在线观看免费肉肉 | 亚洲欧洲日产国码久在线 | 99久免费精品视频在线观看2 | 98久久人妻无码精品系列蜜桃 | 好男人在线视频 | 99久久久无码国产精品不卡按摩 | 欧美s00老人 | 国产精品v片在线观看不卡 国产精品v欧美精品v日韩 | 精品欧美一区二区三区四区 | 99精品国产免费观看视频 | 精品无码国产AV一区二区三区 | 97国产成人精品免费视频 | 在线日本高清日本免费 | 色橹橹欧美在线观看视频高 | 色悠久久综合 | 日本不卡免免费观看 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品