衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

UCOS2系統內核講述_ 總體描述

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-25 10:39 ? 次閱讀

Ⅰ、寫在前面

學習本文之前可以參考我前面基于STM32硬件平臺移植UCOS2的幾篇文章,我將其匯總在一起:

UCOS2_STM32F1移植詳細過程(匯總文章)

要想學習,或使用系統配套的資源(如:信號量、消息郵箱、消息隊列等),就需要先了解一下系統內核大致的原理,也就是先了解大致,在研究細節的東西(從外到內),本文就是接著前面移植的文章來講述關于系統內核的知識。

本文主要是結合前面移植好、可以運行的源代碼來進行講述關于最新版本UCOS2系統內部代碼。

關于本文的更多詳情請往下看。

Ⅱ、UCOS操作系統配置

看過我前面移植UCOS的文章,或打開過我移植成功的軟件工程,都應該大體知道一個簡單的UCOS系統大概需要一些什么配置,包含哪些部分等。

本節將對UCOS軟件工程總體的一些知識進行講述(從大方向來描述一下),也算是對某些知識的再次回顧。

UCOS系統配置就是修改os_cfg.h文件,就是使能或失能某些功能,也就是所謂的系統裁剪。


比如:

我們不使能APP應用HOOK函數

則#defineOS_APP_HOOKS_EN0u

如果使能APP應用HOOK函數

則#define OS_APP_HOOKS_EN1u

再比如:

我們定義最低優先級(值)為63

則#defineOS_LOWEST_PRIO63u

定義最大數10個任務

則#define OS_MAX_TASKS 10u

其實這里的配置在系統中很多通過預處理(配置了的才編譯,未配置不編譯)來實現的,也就是直接影響程序編譯的大小,所以叫系統裁剪。

我提供(移植完成)的實例里面有很多資源(如:信號量、消息郵箱、消息隊列等)都沒有實現,所以那些都是失能的(即都配置為0)。

Ⅲ、主函數描述

主函數在裸機程序和操作系統程序中都是有的,也是程序的入口函數,這里大體講述一下UCOS操作系統主函數中重要的三個函數:

OSInit操作系統初始化

OSTaskCreateExt創建任務

OSStart啟動任務


1.OSInit系統初始化

跟蹤代碼可以知道,這個函數的函數體位于os_core.c文件中。操作系統初始化顧名思義就是對UCOS系統的初始化,其中包含內核與系統資源這些的初始化,如下面代碼截圖:


從上面截圖就可以看得出來,紅色框標記的是系統內核必須初始化部分,藍色框標記是選配(由系統配置決定)。

我們上面說的“系統配置”,在這里就能體現的出來。比如:我藍色框標記的部分中,沒有使能“事件標志”也就是在配置中沒有使能使能該選項,那么程序也不會初始化事件標志組。接著的其他選項一樣的道理。

2.OSTaskCreateExt創建任務

跟蹤代碼可以知道,這個函數的函數體位于os_task.c文件中。該函數從命名及意思上可以知道,它就是創建任務的函數。我們使用“擴展版本”創建任務,主要是配置及初始化任務相關的堆棧、優先級、以及檢測參數的正確性等,如下面代碼截圖:


注意:在os_cfg中需要使能“創建任務-擴展”,也就是需要配置:

#define OS_TASK_CREATE_EXT_EN 1u

創建任務有兩個函數(請看os_task.c文件):

OSTaskCreate基本版本

OSTaskCreateExt擴展版本

擴展版本是在后面升級系統新增加的一個函數,主要是新增加了5個參數(具體請見源代碼),但為了使程序兼容以前系統,這后面的系統中也是保留了基本版本的創建任務函數接口。

我在主函數里面創建的任務是AppTaskStart,也是“開始任務”,后面的一些關于應用所需的初始化都是在AppTaskStart下面創建的,子任務也是基于該函數創建的。

3.OSStart開啟任務

跟蹤代碼可以知道,這個函數的函數體位于os_core.c文件中。在操作系統初始化、任務創建完成之后,調用OSStart就可以開啟并執行任務了。

該函數也是屬于內核級的,由系統調用,主要包含幾步操作:

1.查找最高優先級任務,使其進入就緒;

2.將當前優先級指向就緒任務的最高優先級;

3.執行目標代碼,開始任務(OSRunning = OS_TRUE)。


當你初始接觸UCOS系統時,先了解它主要的意思是啟動任務就行了,至于怎樣啟動的,需后續研究系統內核這一塊,我在后面也會講述。

Ⅳ、AppTaskStart任務描述

應用程序(任務)的執行可以說就是從AppTaskStart這個函數(在上面main中創建的任務)開始一步一步執行的。

在AppTaskStart函數體里面主要做了三類事情:

1.BSP_Initializes:初始化應用底層一些代碼,基本實例就是LED的IO驅動;

2.OSTick_Init:滴答時鐘初始化,這個是屬于系統,在前面移植的過程中說過由我們自己定義,所以這里需要初始化。

3.OSTaskCreateExt:創建子任務(Demo程序創建了3個子任務)。


為什么在這里還要創建任務呢?

這種寫法是參考UCOS官方提供實例代碼的寫法(在main主函數只創建一個AppTaskStart任務,再在AppTaskStart函數創建子任務、系統資源等)。

當然,這個格式寫法不是死的,可根據自己習慣或要求來寫。

1.BSP_Initializes

跟蹤代碼可以知道,這個函數的函數體位于bsp.c文件中。這個函數是我們自己建的文件,我將它歸類為“應用程序底層代碼初始化”,自己可更加實際情況修改。由于是Demo程序(LED閃爍燈),這里主要是對LED燈IO口的初始化。

2.OSTick_Init

跟蹤代碼可以知道,這個函數的函數體位于app_cfg.c文件中。這個函數也是我們自己設計的源代碼,在前面移植的過程中要求自己初始化系統滴答,這里就需要初始化。當然也可以在UCOS提供的文件“os_cpu_c.c”里面初始化該函數。

系統滴答是系統的心臟,沒有它就等于沒有心臟。這里需要搭配滴答中斷函數(如下圖)。


3.OSTaskCreateExt子任務

提供的Demo程序創建了一個開始任務和3個子任務,任務都是實現LED閃爍的內容。更加閃爍的頻率(亮滅間隔時間)不同,可以區分出不同的任務。


開始任務、子任務1、子任務2、子任務3依次LED亮滅間隔時間加長。是由OSTimeDly函數決定的,OSTimeDly函數是系統延時的意思,它這個延時和我們平常使用的延時相似,但又不同。它在各自的任務了看似屬于自身“阻塞延時”了那么長時間,但自系統看來其實是將該任務掛起了那么長時間。

OSTimeDly延時函數屬于系統級延時,需要了解系統內核之后對它的理解就容易了。

Ⅴ、實例工程下載

筆者針對于初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的代碼,對初學者一看就明白,以簡單明了的工程供大家學習。

筆者提供的實例工程都是在板子上經過多次測試并沒有問題才上傳至360云盤,歡迎下載測試、參照學習。

我將最新UCOS2.92操作系統移植到F0、F1、F3、F4各個硬件平臺上,可以根據你芯片系列選擇下載。

UCOS基于STM32F0系列實例:

https://yunpan.cn/cRCZrQ3dzeVQq訪問密碼 e73f

UCOS基于STM32F1系列實例:

https://yunpan.cn/cRCZxGFsqHa6Q訪問密碼 39ff

UCOS基于STM32F3系列實例:

https://yunpan.cn/cRCZqPRCWs8UW訪問密碼 b305

UCOS基于STM32F4系列實例:

https://yunpan.cn/cRCZPqbFqXSPR訪問密碼 f177

本文是基于上面修改部分注釋為中文:

https://yunpan.cn/cM6tNgShDuj5Y 訪問密碼 889e

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

    關注

    30

    文章

    4828

    瀏覽量

    69063
  • HOOK
    +關注

    關注

    0

    文章

    15

    瀏覽量

    8417
  • ucos2
    +關注

    關注

    0

    文章

    15

    瀏覽量

    3572
收藏 人收藏

    評論

    相關推薦

    升級centos7內核版本

    UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 查看系統grub內核啟動列表 ~] # awk -F' '$1=="menuentry " {print i++
    的頭像 發表于 01-02 10:41 ?212次閱讀

    請問PCM1864的驅動在設備樹該如何描述?

    請問PCM1864的驅動在設備樹該如何描述呢: 1. 我使用的不是TI的LINUX內核,是另外一款SOC的LINUX內核 2. 我在設備樹做了以下
    發表于 10-23 07:30

    linux驅動程序如何加載進內核

    在Linux系統中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。 驅動程序的編寫 驅動程序的編寫是Linux驅動開發的基礎。在編寫驅動程序之前
    的頭像 發表于 08-30 15:02 ?592次閱讀

    Linux內核測試技術

    Linux 內核是Linux操作系統的核心部分,負責管理硬件資源和提供系統調用接口。隨著 Linux 內核的不斷發展和更新,其復雜性和代碼規模也在不斷增加。因此,確保
    的頭像 發表于 08-13 13:42 ?589次閱讀
    Linux<b class='flag-5'>內核</b>測試技術

    請問MODUS支持LINUX、FREERTOS、UCOS、Mbed、Android所有操作系統嗎?

    請問 MODUS 支持 LINUX、FREERTOS、UCOS、Mbed、Android 所有操作系統嗎?
    發表于 07-23 06:06

    Cortex R52內核Cache的具體操作(2

    本節內容主要講述CortexR52內核Cache的具體操作包括使緩存無效(invalidate)操作,清除(clean)緩存。有的時候客戶可能需要對cache做一些清理,比如invalidate
    的頭像 發表于 07-15 15:44 ?1551次閱讀
    Cortex R52<b class='flag-5'>內核</b>Cache的具體操作(<b class='flag-5'>2</b>)

    CortexR52內核Cache的具體操作

    本節內容主要講述CortexR52內核Cache的具體操作包括使緩存無效(invalidate)操作,清除(clean)緩存。有的時候客戶可能需要對cache做一些清理,比如invalidate
    的頭像 發表于 07-15 10:32 ?1406次閱讀
    CortexR52<b class='flag-5'>內核</b>Cache的具體操作

    歡創播報 華為宣布鴻蒙內核已超越Linux內核

    1 華為宣布鴻蒙內核已超越Linux內核 ? 6月21日,在華為開發者大會上, HarmonyOS NEXT(鴻蒙NEXT)——真正獨立于安卓和iOS的鴻蒙操作系統,正式登場。這是HarmonyOS
    的頭像 發表于 06-27 11:30 ?903次閱讀

    鴻蒙開發ArkUI-X基礎知識:【ArkUI跨平臺設計總體說明】

    本文檔描述ArkUI開發框架跨平臺運行能力相關的總體技術方案。
    的頭像 發表于 05-24 15:41 ?1636次閱讀
    鴻蒙開發ArkUI-X基礎知識:【ArkUI跨平臺設計<b class='flag-5'>總體</b>說明】

    uCOS使用FATFS的時候如果操作SD卡的優先級低了,uCOS就死機怎么解決?

    不知道大家遇到過這個情況沒有,uCOS使用FATFS的時候如果操作SD卡的優先級低了,uCOS相應的任務會死機,我的FATFS的可重入也已經打開了
    發表于 05-14 06:13

    內核實時操作系統的介紹

    內核實時操作系統(Microkernel Real-Time Operating System, μRTOS)是一種專為實時設計的操作系統。它采用微內核架構,以提高
    的頭像 發表于 05-11 17:13 ?565次閱讀

    請問stm32L4是不是M4內核

    為什么L4在ucos 庫里是屬于 M3內核,F4系列 在ucos庫里是屬于 M4內核
    發表于 04-17 07:07

    linux內核常用調優參數

     1. vm.swappiness:該參數控制系統在內存不足時,內核將頁面交換到磁盤的程度。默認值為60,建議值為10-30。   2. vm.overcommit_memory:該參數控制
    的頭像 發表于 04-01 10:31 ?2128次閱讀

    配電系統實施總體綜合設計方案

    配電系統實施總體思路:根據屏體用電量,現場施工要求,以及配電柜所帶負荷情況,總體綜合設計配電系統。
    發表于 03-06 10:31 ?482次閱讀
    配電<b class='flag-5'>系統</b>實施<b class='flag-5'>總體</b>綜合設計方案

    【鴻蒙】小型系統LiteOS-A內核

    LiteOS-A 內核 移植概述 移植場景 LiteOS-A 當前支持 ARMv7-a 指令集架構,如果三方芯片為 ARMv7-a 架構,可以進行內核基礎適配;否則還需要先根據芯片的架構來新增內核
    的頭像 發表于 02-29 16:16 ?1316次閱讀
    【鴻蒙】小型<b class='flag-5'>系統</b>LiteOS-A<b class='flag-5'>內核</b>
    基础百家乐官网规则| 百家乐看牌技巧| 红桃K百家乐娱乐城| 防城港市| 百家乐官网路单打法| 太阳城百家乐客户端| 黔西| 百家乐视频视频| 彩票预测| 网上百家乐真的假的| 大富豪百家乐| 百家乐代理在线游戏可信吗网上哪家平台信誉好安全 | 属蛇做生意坐向| 博客国际| 网上赌百家乐可信吗| 真人百家乐官网出千| 太阳城百家乐祖玛| 太阳城百家乐官网主页| 太阳城王子酒店| 蓝盾百家乐官网平台| 大发888体育投注| 百家乐官网技巧技巧| 八大胜开户| 风水24山图解| 青浦区| 没费用百家乐分析器| 百家乐官网投注平台信誉排行| 金樽百家乐的玩法技巧和规则| 百家乐官网二十一点游戏| 大发888娱乐游戏--| 新濠百家乐官网娱乐场| 百利宫娱乐城官方网| 试玩百家乐网| 茅台百家乐官网的玩法技巧和规则| 机率游戏| 百家乐投注| 网络百家乐| 百家乐官网桌游| 江津市| bet365吧| 太阳城真人娱乐城|