国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UCOS2系統(tǒng)內(nèi)核講述_ 總體描述

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-25 10:39 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

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

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

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

本文主要是結(jié)合前面移植好、可以運行的源代碼來進(jìn)行講述關(guān)于最新版本UCOS2系統(tǒng)內(nèi)部代碼。

關(guān)于本文的更多詳情請往下看。

Ⅱ、UCOS操作系統(tǒng)配置

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

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

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


比如:

我們不使能APP應(yīng)用HOOK函數(shù)

則#defineOS_APP_HOOKS_EN0u

如果使能APP應(yīng)用HOOK函數(shù)

則#define OS_APP_HOOKS_EN1u

再比如:

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

則#defineOS_LOWEST_PRIO63u

定義最大數(shù)10個任務(wù)

則#define OS_MAX_TASKS 10u

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

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

Ⅲ、主函數(shù)描述

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

OSInit操作系統(tǒng)初始化

OSTaskCreateExt創(chuàng)建任務(wù)

OSStart啟動任務(wù)


1.OSInit系統(tǒng)初始化

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


從上面截圖就可以看得出來,紅色框標(biāo)記的是系統(tǒng)內(nèi)核必須初始化部分,藍(lán)色框標(biāo)記是選配(由系統(tǒng)配置決定)。

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

2.OSTaskCreateExt創(chuàng)建任務(wù)

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


注意:在os_cfg中需要使能“創(chuàng)建任務(wù)-擴展”,也就是需要配置:

#define OS_TASK_CREATE_EXT_EN 1u

創(chuàng)建任務(wù)有兩個函數(shù)(請看os_task.c文件):

OSTaskCreate基本版本

OSTaskCreateExt擴展版本

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

我在主函數(shù)里面創(chuàng)建的任務(wù)是AppTaskStart,也是“開始任務(wù)”,后面的一些關(guān)于應(yīng)用所需的初始化都是在AppTaskStart下面創(chuàng)建的,子任務(wù)也是基于該函數(shù)創(chuàng)建的。

3.OSStart開啟任務(wù)

跟蹤代碼可以知道,這個函數(shù)的函數(shù)體位于os_core.c文件中。在操作系統(tǒng)初始化、任務(wù)創(chuàng)建完成之后,調(diào)用OSStart就可以開啟并執(zhí)行任務(wù)了。

該函數(shù)也是屬于內(nèi)核級的,由系統(tǒng)調(diào)用,主要包含幾步操作:

1.查找最高優(yōu)先級任務(wù),使其進(jìn)入就緒;

2.將當(dāng)前優(yōu)先級指向就緒任務(wù)的最高優(yōu)先級;

3.執(zhí)行目標(biāo)代碼,開始任務(wù)(OSRunning = OS_TRUE)。


當(dāng)你初始接觸UCOS系統(tǒng)時,先了解它主要的意思是啟動任務(wù)就行了,至于怎樣啟動的,需后續(xù)研究系統(tǒng)內(nèi)核這一塊,我在后面也會講述。

Ⅳ、AppTaskStart任務(wù)描述

應(yīng)用程序(任務(wù))的執(zhí)行可以說就是從AppTaskStart這個函數(shù)(在上面main中創(chuàng)建的任務(wù))開始一步一步執(zhí)行的。

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

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

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

3.OSTaskCreateExt:創(chuàng)建子任務(wù)(Demo程序創(chuàng)建了3個子任務(wù))。


為什么在這里還要創(chuàng)建任務(wù)呢?

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

當(dāng)然,這個格式寫法不是死的,可根據(jù)自己習(xí)慣或要求來寫。

1.BSP_Initializes

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

2.OSTick_Init

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

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


3.OSTaskCreateExt子任務(wù)

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


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

OSTimeDly延時函數(shù)屬于系統(tǒng)級延時,需要了解系統(tǒng)內(nèi)核之后對它的理解就容易了。

Ⅴ、實例工程下載

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

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

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73965
  • HOOK
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    8822
  • ucos2
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    3707
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何為 Vision Five 2 編譯自定義 Linux 內(nèi)核

    Vision Five 2 的 Debian 用戶指南只提供了半頁關(guān)于如何編譯自己的內(nèi)核的相當(dāng)稀疏的內(nèi)容。僅從該文檔中,我無法制作我的自定義內(nèi)核。那里的信息似乎相當(dāng)不完整。如果有人能提供一些
    發(fā)表于 02-24 07:44

    Linux內(nèi)核伙伴系統(tǒng)內(nèi)存申請函數(shù)詳解:從原理到實戰(zhàn)

    在 Linux 內(nèi)核中,內(nèi)存管理是整個系統(tǒng)穩(wěn)定運行的基石,而伙伴系統(tǒng)(Buddy System) 作為內(nèi)核物理內(nèi)存分配的核心機制,更是驅(qū)動開發(fā)、內(nèi)核
    的頭像 發(fā)表于 02-10 16:58 ?3630次閱讀
    Linux<b class='flag-5'>內(nèi)核</b>伙伴<b class='flag-5'>系統(tǒng)</b>內(nèi)存申請函數(shù)詳解:從原理到實戰(zhàn)

    深入理解設(shè)備樹chosen節(jié)點:固件與內(nèi)核的“配置橋梁”

    在嵌入式 Linux 開發(fā)中,設(shè)備樹(Device Tree)是連接硬件與內(nèi)核的關(guān)鍵紐帶。但有一個節(jié)點很特殊 —— 它不描述任何硬件模塊,卻直接決定內(nèi)核能否正常啟動,這就是chosen節(jié)點。
    的頭像 發(fā)表于 02-09 16:36 ?136次閱讀
    深入理解設(shè)備樹chosen節(jié)點:固件與<b class='flag-5'>內(nèi)核</b>的“配置橋梁”

    Linux內(nèi)核bug狩獵指南:從棧跟蹤到修復(fù),官方文檔教你搞定系統(tǒng)核心故障

    內(nèi)核是 Linux 系統(tǒng)的 “心臟”—— 一旦它出 bug,小則功能異常,大則系統(tǒng)崩潰、死機。但內(nèi)核 bug 往往藏在百萬行代碼中,想快速定位、修復(fù)絕非易事。
    的頭像 發(fā)表于 02-06 16:59 ?3124次閱讀
    Linux<b class='flag-5'>內(nèi)核</b>bug狩獵指南:從棧跟蹤到修復(fù),官方文檔教你搞定<b class='flag-5'>系統(tǒng)</b>核心故障

    Linux內(nèi)核的“心跳”:jiffies如何為系統(tǒng)計時?

    在 Linux 內(nèi)核的世界里,有一個默默工作的 "計時器"——jiffies。它不像我們手機上的時鐘那樣顯示年月日,卻掌控著內(nèi)核中絕大多數(shù)時間相關(guān)的操作:從進(jìn)程調(diào)度到設(shè)備驅(qū)動的定時檢查,都離不開它的身影。
    的頭像 發(fā)表于 02-04 16:27 ?820次閱讀
    Linux<b class='flag-5'>內(nèi)核</b>的“心跳”:jiffies如何為<b class='flag-5'>系統(tǒng)</b>計時?

    Linux系統(tǒng)內(nèi)核參數(shù)調(diào)優(yōu)實戰(zhàn)指南

    Linux 內(nèi)核參數(shù)調(diào)優(yōu)是系統(tǒng)性能優(yōu)化的核心環(huán)節(jié)。隨著云原生架構(gòu)的普及和硬件性能的飛速提升,默認(rèn)的內(nèi)核參數(shù)配置往往無法充分發(fā)揮系統(tǒng)潛力。在高并發(fā) Web 服務(wù)、大數(shù)據(jù)處理、容器化部署等
    的頭像 發(fā)表于 01-28 14:27 ?441次閱讀

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗】+讀深入理解Linux內(nèi)核內(nèi)存分配

    ,目前4KB是廣泛使用的頁大小。在Linux操作系統(tǒng)中,每個進(jìn)程甚至內(nèi)核本身都被分配了地址空間,這是處理器的虛擬地址空間的一部分,內(nèi)核和進(jìn)程都不處理物理地址,物理地址由MMU處理。 虛擬地址空間被拆分
    發(fā)表于 01-16 20:05

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗】Linux內(nèi)核開發(fā)基礎(chǔ)

    感謝電子發(fā)燒友論壇提供的《Linux設(shè)備驅(qū)動開發(fā)(第2版)》閱讀機會,測評將從Linux內(nèi)核開發(fā)基礎(chǔ)、Linux內(nèi)核平臺抽象和設(shè)備驅(qū)動程序、發(fā)揮硬件潛力以及嵌入式領(lǐng)域內(nèi)的多種內(nèi)核子系統(tǒng)
    發(fā)表于 01-12 22:45

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗】+讀內(nèi)核處理的核心輔助函數(shù)

    上周收到《Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)》書籍,這是一本介紹Linux內(nèi)核開發(fā)的指導(dǎo)性書籍。全面了解Linux內(nèi)核所提供的一些接口函數(shù),是一位Linux設(shè)備驅(qū)動開發(fā)從業(yè)者所必備的知識點。書籍
    發(fā)表于 01-10 22:08

    ElfBoard嵌入式教育科普|Linux系統(tǒng)I/O接口:Open函數(shù)詳解

    1.函數(shù)概述open()是Linux/Unix內(nèi)核提供的底層系統(tǒng)調(diào)用,核心功能是打開或創(chuàng)建文件。成功調(diào)用后,內(nèi)核會返回一個整型的文件描述符作為該文件的句柄,后續(xù)的所有讀寫操作都基于此
    的頭像 發(fā)表于 12-29 11:41 ?1054次閱讀
    ElfBoard嵌入式教育科普|Linux<b class='flag-5'>系統(tǒng)</b>I/O接口:Open函數(shù)詳解

    ucos與freertos哪個好?

    選擇uCOS或FreeRTOS取決于項目的具體需求和資源限制。 FreeRTOS的優(yōu)點包括: 更小的內(nèi)核ROM和RAM占用,特別是在RAM方面,適合資源受限的嵌入式系統(tǒng)。 支持協(xié)程
    發(fā)表于 12-05 07:13

    Linux內(nèi)核模塊的加載機制

    使用insmod或modprobe命令來加載模塊。insmod是直接加載,而modprobe會處理依賴關(guān)系。 2、如何工作 那內(nèi)核模塊具體是怎么工作的呢?當(dāng)執(zhí)行insmod時,會調(diào)用系統(tǒng)調(diào)用
    發(fā)表于 11-25 06:59

    飛凌嵌入式ElfBoard-系統(tǒng)IO接口之刷新內(nèi)核緩沖

    、權(quán)限等等信息,這里統(tǒng)稱為文件的元數(shù)據(jù),這些信息也是存儲在磁盤設(shè)備中的。1)頭文件#include 2)函數(shù)原型int fsync(int fd);3)參數(shù)fd:表示要操作文件的文件描述符。4)返回值若
    發(fā)表于 11-04 08:59

    強實時運動控制內(nèi)核MotionRT750(一):驅(qū)動安裝、內(nèi)核配置與使用

    強實時運動控制內(nèi)核MotionRT750的驅(qū)動安裝與內(nèi)核配置
    的頭像 發(fā)表于 07-03 15:48 ?3679次閱讀
    強實時運動控制<b class='flag-5'>內(nèi)核</b>MotionRT750(一):驅(qū)動安裝、<b class='flag-5'>內(nèi)核</b>配置與使用

    瑞薩RA8快速上手指南:Cortex-M85內(nèi)核瑞薩RA8開發(fā)環(huán)境搭建 并點亮一個LED

    因為Cortex-M內(nèi)核,瑞薩RA8系列單片機支持多種市面上常見的開發(fā)環(huán)境,像Keil MDK、IAR EWARM等,而本文講述的是瑞薩自家官方的IDE(e2 studio)。
    的頭像 發(fā)表于 03-17 14:35 ?1932次閱讀
    瑞薩RA8快速上手指南:Cortex-M85<b class='flag-5'>內(nèi)核</b>瑞薩RA8開發(fā)環(huán)境搭建 并點亮一個LED