在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-25 10:39 ? 次閱讀

Ⅰ、寫(xiě)在前面

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

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

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

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

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

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

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

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

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)先級(jí)(值)為63

則#defineOS_LOWEST_PRIO63u

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

則#define OS_MAX_TASKS 10u

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

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

Ⅲ、主函數(shù)描述

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

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

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

OSStart啟動(dòng)任務(wù)


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

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


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

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

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

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


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

#define OS_TASK_CREATE_EXT_EN 1u

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

OSTaskCreate基本版本

OSTaskCreateExt擴(kuò)展版本

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

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

3.OSStart開(kāi)啟任務(wù)

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

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

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

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

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


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

Ⅳ、AppTaskStart任務(wù)描述

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

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

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

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

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


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

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

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

1.BSP_Initializes

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

2.OSTick_Init

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

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


3.OSTaskCreateExt子任務(wù)

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


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

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

Ⅴ、實(shí)例工程下載

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

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

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

UCOS基于STM32F0系列實(shí)例:

https://yunpan.cn/cRCZrQ3dzeVQq訪問(wèn)密碼 e73f

UCOS基于STM32F1系列實(shí)例:

https://yunpan.cn/cRCZxGFsqHa6Q訪問(wèn)密碼 39ff

UCOS基于STM32F3系列實(shí)例:

https://yunpan.cn/cRCZqPRCWs8UW訪問(wèn)密碼 b305

UCOS基于STM32F4系列實(shí)例:

https://yunpan.cn/cRCZPqbFqXSPR訪問(wèn)密碼 f177

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

https://yunpan.cn/cM6tNgShDuj5Y 訪問(wèn)密碼 889e

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

    關(guān)注

    30

    文章

    4891

    瀏覽量

    70317
  • HOOK
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    8555
  • ucos2
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    3621
收藏 人收藏

    評(píng)論

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

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

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

    UHV系列串聯(lián)諧振裝置總體介紹

    UHV系列 串聯(lián)諧振裝置總體介紹說(shuō)明書(shū)
    發(fā)表于 02-25 17:37 ?0次下載

    升級(jí)centos7內(nèi)核版本

    UTC 2020 x86_64 x86_64 x86_64 GNU/Linux 查看系統(tǒng)grub內(nèi)核啟動(dòng)列表 ~] # awk -F' '$1=="menuentry " {print i++
    的頭像 發(fā)表于 01-02 10:41 ?628次閱讀

    linux內(nèi)核中通用HID觸摸驅(qū)動(dòng)

    在linux內(nèi)核中,為HID觸摸面板實(shí)現(xiàn)了一個(gè)通用的驅(qū)動(dòng)程序,位于/drivers/hid/hid-multitouch.c文件中。hid觸摸驅(qū)動(dòng)是以struct hid_driver實(shí)現(xiàn),首先定義一個(gè)描述hid觸摸驅(qū)動(dòng)的結(jié)構(gòu)mt_driver。
    的頭像 發(fā)表于 10-29 10:55 ?2075次閱讀
    linux<b class='flag-5'>內(nèi)核</b>中通用HID觸摸驅(qū)動(dòng)

    請(qǐng)問(wèn)PCM1864的驅(qū)動(dòng)在設(shè)備樹(shù)該如何描述

    請(qǐng)問(wèn)PCM1864的驅(qū)動(dòng)在設(shè)備樹(shù)該如何描述呢: 1. 我使用的不是TI的LINUX內(nèi)核,是另外一款SOC的LINUX內(nèi)核 2. 我在設(shè)備樹(shù)做了以下
    發(fā)表于 10-23 07:30

    音頻特征描述

    電子發(fā)燒友網(wǎng)站提供《音頻特征描述.pdf》資料免費(fèi)下載
    發(fā)表于 10-10 11:37 ?0次下載
    音頻特征<b class='flag-5'>描述</b>

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    在Linux系統(tǒng)中,驅(qū)動(dòng)程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們?cè)试S內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的控制和管理。 驅(qū)動(dòng)程序的編寫(xiě) 驅(qū)動(dòng)程序的編寫(xiě)是Linux驅(qū)動(dòng)開(kāi)發(fā)的基礎(chǔ)。在編寫(xiě)驅(qū)動(dòng)程序之前
    的頭像 發(fā)表于 08-30 15:02 ?1003次閱讀

    為了學(xué)習(xí)內(nèi)核開(kāi)發(fā),大佬手搓了一個(gè)輕量級(jí)操作系統(tǒng)YiYiYa OS

    RISC-V內(nèi)核芯片,所有移植教程及方法都在Github上公開(kāi)。 gmenu2x:輕量級(jí)菜單桌面 gnuboy模擬器 系統(tǒng)架構(gòu) 架構(gòu)從上而下分層設(shè)計(jì),同一層從左到右為模塊。越下層與用戶離得遠(yuǎn),就會(huì)變得越
    發(fā)表于 08-30 14:57

    為了學(xué)習(xí)內(nèi)核開(kāi)發(fā),大佬手搓了一個(gè)輕量級(jí)操作系統(tǒng)YiYiYa OS

    、gpio、i2c、spi驅(qū)動(dòng)等 系統(tǒng)移植教程 作者本人及團(tuán)隊(duì)自制的開(kāi)源掌機(jī)FunKey所采用的操作系統(tǒng)就是基于Linux內(nèi)核和YiYiYa OS,YiYiYa OS內(nèi)提供了豐富的桌面
    發(fā)表于 08-27 10:08

    Linux內(nèi)核測(cè)試技術(shù)

    Linux 內(nèi)核是Linux操作系統(tǒng)的核心部分,負(fù)責(zé)管理硬件資源和提供系統(tǒng)調(diào)用接口。隨著 Linux 內(nèi)核的不斷發(fā)展和更新,其復(fù)雜性和代碼規(guī)模也在不斷增加。因此,確保
    的頭像 發(fā)表于 08-13 13:42 ?939次閱讀
    Linux<b class='flag-5'>內(nèi)核</b>測(cè)試技術(shù)

    請(qǐng)問(wèn)MODUS支持LINUX、FREERTOS、UCOS、Mbed、Android所有操作系統(tǒng)嗎?

    請(qǐng)問(wèn) MODUS 支持 LINUX、FREERTOS、UCOS、Mbed、Android 所有操作系統(tǒng)嗎?
    發(fā)表于 07-23 06:06

    Cortex R52內(nèi)核Cache的具體操作(2

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

    Cortex R52內(nèi)核Cache的相關(guān)概念(1)

    在開(kāi)始閱讀本系列文章之前,請(qǐng)先參閱《有關(guān)CR52 MPU配置說(shuō)明》。因?yàn)檫@篇文章講述了,cache配置所涉及到的寄存器的設(shè)置和MPU的一些基本概念。如果讀者都已經(jīng)理解了上述內(nèi)容,可以跳過(guò)。本章內(nèi)容主要講述cache屬性的具體含意、注意事項(xiàng)、以及在RZ/T
    的頭像 發(fā)表于 07-15 10:37 ?2333次閱讀
    Cortex R52<b class='flag-5'>內(nèi)核</b>Cache的相關(guān)概念(1)

    CortexR52內(nèi)核Cache的具體操作

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

    歡創(chuàng)播報(bào) 華為宣布鴻蒙內(nèi)核已超越Linux內(nèi)核

    1 華為宣布鴻蒙內(nèi)核已超越Linux內(nèi)核 ? 6月21日,在華為開(kāi)發(fā)者大會(huì)上, HarmonyOS NEXT(鴻蒙NEXT)——真正獨(dú)立于安卓和iOS的鴻蒙操作系統(tǒng),正式登場(chǎng)。這是HarmonyOS
    的頭像 發(fā)表于 06-27 11:30 ?1185次閱讀
    主站蜘蛛池模板: 2020国产v亚洲v天堂高清 | 国产成人精品男人的天堂538 | brazzers720欧美丰满 | 国语自产拍在线观看7m | 爱逼色 | 亚洲v视频 | 成人网在线 | 久久午夜视频 | 日本韩国三级在线 | 放荡女同老师和女同学生 | 天天干天天操天天添 | 小雪被撑暴黑人黑人与亚洲女人 | 午夜免费在线观看 | 日本四虎影院 | 狠狠色丁香婷婷综合久久片 | 人人免费操 | 亚洲欧美视频网站 | 一本到视频在线 | 伊人网在线观看 | 亚洲成人资源 | ggg成人| 噜噜色噜噜 | aaaaa国产毛片 | 精品乱人伦一区二区三区 | 久久国产精品久久久久久 | 激情综合丝袜美女一区二区 | 午夜免费小视频 | 美女黄网站 | 国产精品二区三区免费播放心 | 四虎在线网址 | 午夜剧场黄 | 天天操天天干天天爽 | 99精品国产第一福利网站 | 手机看片福利在线 | 日本免费在线一区 | 狠狠色噜噜狠狠狠狠五月婷 | 日本免费黄色片 | 看大片全色黄大色黄 | 正在播放国产乱子伦视频 | 色在线国产 | xx肥妇人爽妇网 |