91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

UCOS2系統(tǒng)內(nèi)核講述(二)_ 初始化調(diào)用函數(shù)

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

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

學(xué)習(xí)本文之前可以參看我前面的文章:

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

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

還是按照上一篇文章的思維(從外到內(nèi)),本文(結(jié)合源代碼)進(jìn)一步深入U(xiǎn)COS系統(tǒng)內(nèi)核,我會(huì)將講述過(guò)的源代碼注釋修改為中文,提供給大家參考。

上一篇文章總體描述了一下整個(gè)工程“外圍”的代碼,本文將進(jìn)一步“入圍”,進(jìn)一步講述OSInit所調(diào)用的函數(shù)。

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

本文講述的內(nèi)容不必深入理解,可以先做個(gè)了解。

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

Ⅱ、OSInit所調(diào)用的函數(shù)

上一篇文章大概講述了關(guān)于該函數(shù)的內(nèi)容,本文將進(jìn)一步講述OSInit系統(tǒng)初始化。

我將OSInit所調(diào)用的函數(shù)分為兩類:必須類和非必須類。


必須類:與系統(tǒng)、任務(wù)緊密相關(guān)的初始化。其實(shí)這些初始化就是對(duì)變量、結(jié)構(gòu)體等賦予初始值。(如:系統(tǒng)運(yùn)行標(biāo)志位初始化暫停運(yùn)行、最高優(yōu)先級(jí)指向空等)它們的初始化位于系統(tǒng)內(nèi)核os_core.c里面。

非必須類:這一類就是可以不調(diào)用來(lái)初始化的一類。從代碼可以看他們前面有一個(gè)預(yù)處理標(biāo)志位【如:#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)】,這些標(biāo)志位位于os_cfg.h(前面說(shuō)過(guò)系統(tǒng)的裁剪),當(dāng)我們不使用這些功能時(shí),也就是系統(tǒng)裁剪掉了這些功能,它們就不會(huì)被初始化。

事件標(biāo)志組、內(nèi)存管理、消息隊(duì)列等這些就屬于非必須類,它們的初始化位于自身的.c文件里面(不位于os_core.c)。【如:OS_FlagInit位于os_flag.c文件里面】

下面講述一下必須類(非必須類在后面結(jié)合相關(guān)資源講述):

1.OS_InitMisc(必須類)

這個(gè)函數(shù)會(huì)被OSInit()調(diào)用來(lái)初始化各項(xiàng)變量。對(duì)紅色框內(nèi)參數(shù)初始化數(shù)值,這些參數(shù)是系統(tǒng)必須的變量,類似于我們定義一個(gè)全局變量,初始的時(shí)候?qū)λM(jìn)行賦值。


2.OS_InitRdyList(必須類)

這個(gè)函數(shù)被OSInit()調(diào)用來(lái)初始化就緒表。這里說(shuō)的就緒表其實(shí)指的是把一個(gè)一個(gè)任務(wù)排列成一個(gè)表,要將這個(gè)表初始化的意思。要執(zhí)行響應(yīng)任務(wù)就需要知道任務(wù)的優(yōu)先級(jí)、任務(wù)控制塊、目前指向的任務(wù)等一系列信息。


3.OS_InitTCBList(必須類)

這個(gè)函數(shù)會(huì)被OSInit()調(diào)用來(lái)初始化空閑TCB(任務(wù)控制塊)。這個(gè)初始化函數(shù)包含的信息是比較難的,也是系統(tǒng)比較重要的(后面會(huì)對(duì)TCB進(jìn)行講述)。

所謂任務(wù)控制塊,就是控制任務(wù)相關(guān)變量數(shù)據(jù)信息各類的結(jié)構(gòu)體的歸類,其結(jié)構(gòu)體里面包含的信息是很多的。

理解TCB就需要對(duì)數(shù)據(jù)結(jié)構(gòu)有一定的熟悉才行。


4.OS_InitEventList(必須類)

這個(gè)函數(shù)會(huì)被OSInit()調(diào)用來(lái)初始化空閑ECB(事件控制塊)。這個(gè)函數(shù)雖然我把它歸類到系統(tǒng)必須類這一塊,其實(shí)不完全正確。這里所說(shuō)的事件,其實(shí)就是系統(tǒng)相關(guān)資源(消息隊(duì)列、郵箱、信號(hào)量、互斥信號(hào)量等)的一個(gè)或集。在ucos_ii.h中可以看到下面宏定義:

#define OS_EVENT_EN (((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u) || (OS_SEM_EN > 0u) || (OS_MUTEX_EN > 0u))

消息隊(duì)列、郵箱、信號(hào)量、互斥信號(hào)量等這些資源要被系統(tǒng)所調(diào)用,就需要進(jìn)行初始化。系統(tǒng)把他們定義為事件,而使用是需要調(diào)用相關(guān)數(shù)據(jù),系統(tǒng)就把他們定義為ECB(事件控制塊),有點(diǎn)類似于TCB(任務(wù)控制塊)。


5.OS_InitTaskIdle(必須類)

這個(gè)函數(shù)會(huì)被OSInit()調(diào)用來(lái)創(chuàng)建空閑任務(wù)。這個(gè)函數(shù)在本節(jié)開(kāi)頭截圖中沒(méi)有截取出來(lái)(屏幕高度有限),其實(shí)這個(gè)函數(shù)也是屬于系統(tǒng)必須初始化的函數(shù)??臻e函數(shù)其實(shí)就是系統(tǒng)把所創(chuàng)建的任務(wù)都處理完了,那些都掛起了,或刪除了,系統(tǒng)空閑沒(méi)事做了,它就會(huì)來(lái)執(zhí)行這個(gè)空閑任務(wù)。

空閑任務(wù)在統(tǒng)計(jì)中起到一定作用,所謂統(tǒng)計(jì),就是我們都知道的CPU占用率,空閑統(tǒng)計(jì)的越多,CPU空閑越多,那么CPU占用率就越低?!緩腃PU使用率應(yīng)該很容易理解為什么要?jiǎng)?chuàng)建空閑任務(wù)】


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

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

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

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

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

https://yunpan.cn/cByHFxCfpaIbh訪問(wèn)密碼 4437

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

https://yunpan.cn/cByHum5BStkEK訪問(wèn)密碼 00a6

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

https://yunpan.cn/cByHrMmkekIar訪問(wèn)密碼 da90

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

https://yunpan.cn/cByHx47jehTgX訪問(wèn)密碼 5a04

本文所講述部分注釋修改為中文:

https://yunpan.cn/cMGZKfnVVb2Li訪問(wèn)密碼 49c2

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    PC強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制(一):C#的EtherCAT總線初始化(下)

    通過(guò)使用配置工具導(dǎo)出ZAR文件進(jìn)行EtherCAT總線初始化
    的頭像 發(fā)表于 02-05 10:00 ?921次閱讀
    PC強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制(一):C#的EtherCAT總線<b class='flag-5'>初始化</b>(下)

    MCU工程初始化,到底該不該交給工具?

    背景 工程初始化重復(fù)性高,但出錯(cuò)成本大。工程師常問(wèn):交給工具是不是會(huì)丟失掌控? 工具可做的事 時(shí)鐘樹、引腳復(fù)用、外設(shè)配置 工程生成、代碼模板套用 參數(shù)校驗(yàn)和約束檢查 工程師仍需做的事 特殊業(yè)務(wù)邏輯
    的頭像 發(fā)表于 01-29 10:18 ?140次閱讀
    MCU工程<b class='flag-5'>初始化</b>,到底該不該交給工具?

    掌握 LuatIO:GPIO 復(fù)用模式初始化配置全流程解析

    在使用 LuatIO 進(jìn)行嵌入式應(yīng)用開(kāi)發(fā)時(shí),合理配置 GPIO 的復(fù)用功能是實(shí)現(xiàn)外設(shè)控制的前提。本文全面解析 GPIO 引腳由普通 IO 轉(zhuǎn)換為復(fù)用功能引腳的初始化流程,包括時(shí)鐘使能、模式選擇、速度
    的頭像 發(fā)表于 01-23 15:28 ?1106次閱讀
    掌握 LuatIO:GPIO 復(fù)用模式<b class='flag-5'>初始化</b>配置全流程解析

    EtherCAT總線初始化步驟

    EtherCAT(Ethernet for Control Automation Technology)是一種高性能的工業(yè)以太網(wǎng)通信協(xié)議,廣泛應(yīng)用于工業(yè)自動(dòng)領(lǐng)域。其初始化過(guò)程是確保系統(tǒng)穩(wěn)定運(yùn)行
    的頭像 發(fā)表于 12-22 10:10 ?575次閱讀
    EtherCAT總線<b class='flag-5'>初始化</b>步驟

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

    可能會(huì)有限制。 接下來(lái)是模塊的初始化。內(nèi)核會(huì)執(zhí)行模塊的初始化函數(shù),通常是用module_init宏定義的函數(shù)。這個(gè)
    發(fā)表于 11-25 06:59

    深入了解系統(tǒng)調(diào)用API:探索操作系統(tǒng)底層的關(guān)鍵接口

    ,也無(wú)法使用內(nèi)核函數(shù)。當(dāng)用戶進(jìn)程必須訪問(wèn)內(nèi)核或使用某個(gè)內(nèi)核函數(shù)時(shí),就得使用系統(tǒng)
    的頭像 發(fā)表于 11-03 09:20 ?698次閱讀

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)34:初始化功能驗(yàn)證與分析2

    系統(tǒng)模型中, 待測(cè)設(shè)計(jì)應(yīng)能夠正確地配置橋設(shè)備模型和 NVMe 設(shè)備模型的配置空間。 圖2 PCIe 初始化測(cè)試仿真波形一 PCIe 初始化開(kāi)始執(zhí)行后, 首先配置位于總線號(hào) 0, 設(shè)
    發(fā)表于 10-09 11:31

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)33:初始化功能驗(yàn)證與分析

    BAR 空間。(1) 系統(tǒng)初始化功能測(cè)試結(jié)果系統(tǒng)初始化正常功能仿真波形如圖1所示, 系統(tǒng)初始化
    發(fā)表于 10-08 08:02

    microros rtthread移植初始化rclc_support_init無(wú)法通過(guò)怎么解決?

    源碼分下如下圖,代碼編譯啥的都是正確的 這個(gè)初始化函數(shù)調(diào)用時(shí)串口會(huì)發(fā)出一串?dāng)?shù)據(jù),數(shù)據(jù)如下圖
    發(fā)表于 09-10 07:28

    GraniStudio:IO初始化以及IO資源配置例程

    IO資源配置.gsp文件,點(diǎn)擊打開(kāi),完成導(dǎo)入。 2.功能說(shuō)明 實(shí)現(xiàn)連接格拉尼控制器IO塊以及配置輸入輸出IO點(diǎn)。 2.1通過(guò)初始化IO算子連接格拉尼控制器IO塊,導(dǎo)入工程自動(dòng)進(jìn)行連接。 2.2 通過(guò)IO配置算子輸出配置的IO表。 第一次使用GS軟件時(shí)操作步驟如下: (1)
    的頭像 發(fā)表于 08-22 17:34 ?934次閱讀
    GraniStudio:IO<b class='flag-5'>初始化</b>以及IO資源配置例程

    GraniStudio:初始化例程

    1.文件運(yùn)行 導(dǎo)入工程 雙擊運(yùn)行桌面GraniStudio.exe。 通過(guò)引導(dǎo)界面導(dǎo)入初始化例程,點(diǎn)擊導(dǎo)入按鈕。 打開(kāi)初始化例程所在路徑,選中初始化.gsp文件,點(diǎn)擊打開(kāi),完成導(dǎo)入。 2
    的頭像 發(fā)表于 08-22 16:45 ?891次閱讀
    GraniStudio:<b class='flag-5'>初始化</b>例程

    定義IO初始化結(jié)構(gòu)體

    由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對(duì)IOPORT模塊進(jìn)行初始化時(shí)需要根據(jù)情況配置它們。因此我們定義一個(gè)IOPORT初始化的結(jié)構(gòu)體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此該結(jié)構(gòu)體類型的變量可以包含IOPORT的相關(guān)
    的頭像 發(fā)表于 07-16 16:26 ?1407次閱讀

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)之七:系統(tǒng)初始化

    直接采用PCIe實(shí)現(xiàn)NVMe功能,它的系統(tǒng)初始化流程主要分為鏈路訓(xùn)練、PCIe 初始化和 NVMe 初始化, 分別實(shí)現(xiàn) PCIe鏈路連接、 PCIe 設(shè)備枚舉配置和 NVMe 設(shè)備配置
    發(fā)表于 07-04 09:14

    IM 系列設(shè)備過(guò)載保護(hù)機(jī)制下界面初始化中斷的底層邏輯與解決方案

    ,系統(tǒng)立即啟動(dòng)保護(hù)策略。而界面初始化過(guò)程依賴于設(shè)備穩(wěn)定的供電環(huán)境和充足的系統(tǒng)資源,當(dāng)過(guò)載保護(hù)機(jī)制觸發(fā)時(shí),者的關(guān)聯(lián)被打破,導(dǎo)致界面初始化中斷
    的頭像 發(fā)表于 06-27 09:58 ?541次閱讀

    cyusb3014插入usb2.0接口后,軟件調(diào)用cyapi.lib中的哪些函數(shù)完成初始化、讀寫操作?

    cyusb3014,插入usb2.0接口后,軟件調(diào)用cyapi.lib中的哪些函數(shù)完成初始化、讀寫操作?
    發(fā)表于 05-29 07:14