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)核講述(五) _初始化TCB詳情

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

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

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

UCOS2系統(tǒng)內(nèi)核講述(四)_創(chuàng)建任務(wù)

上一篇文章講述了關(guān)于函數(shù)“OSTaskCreateExt”創(chuàng)建任務(wù)函數(shù)體里面重要一些的內(nèi)容,本文接著上一張講述關(guān)于“OSTaskCreateExt”函數(shù)體里面調(diào)用的一個(gè)函數(shù)“OS_TCBInit”初始化任務(wù)控制塊,“OS_TCBInit”也是與系統(tǒng)內(nèi)核緊密相關(guān)的一個(gè)函數(shù)。

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

Ⅱ、OS_TCBInit參數(shù)詳情

在學(xué)習(xí)OS_TCBInit之前要明確一下,“OS_TCBInit”和“OS_InitTCBList”(OSInit下面調(diào)用的函數(shù)),從命名上看上去有點(diǎn)相似,但仔細(xì)看一下區(qū)別還是可以看到出來的。

“OS_InitTCBList”在前面文章有講述過(可以看我前面相關(guān)的文章),主要是初始化TCB鏈表。“OS_InitTCBList”函數(shù)體內(nèi)容相關(guān)于將TCB鏈表復(fù)位。

本文將的“OS_TCBInit”是在創(chuàng)建任務(wù)時(shí)初始化一個(gè)任務(wù)的TCB,要將優(yōu)先級(jí)、堆棧等信息初始化。“OS_TCBInit”函數(shù)體內(nèi)容相當(dāng)于對(duì)任務(wù)的TCB里面對(duì)應(yīng)的內(nèi)容落實(shí)到具體的參數(shù)上。

可以將“OS_TCBInit”和“OS_InitTCBList”區(qū)別比喻如下:

“OS_TCBInit”是將某一個(gè)整形變量初始話為0(復(fù)位值);

“OS_InitTCBList”是將某一個(gè)整形變量賦值為1(具體值);

從main函數(shù)跟蹤代碼可以找到“OS_TCBInit”函數(shù),如下動(dòng)畫:

“OS_TCBInit”函數(shù)的每一個(gè)參數(shù)在函數(shù)體源代碼上面都有注釋(我也將源代碼注釋修改為中文了,可以下載參看)。


該函數(shù)位于“os_core.c”下面;

1.第一個(gè)參數(shù)prio

prio看過UCOS系統(tǒng)的朋友應(yīng)該對(duì)整個(gè)參數(shù)不會(huì)陌生,它就是任務(wù)的優(yōu)先級(jí)。

這個(gè)參數(shù)是從“OSTaskCreateExt”函數(shù)參數(shù)中傳下來的(原封不動(dòng),一樣的參數(shù))。

注意:任務(wù)的優(yōu)先級(jí)數(shù)值越小,它的優(yōu)先級(jí)越高。比如:

Task1優(yōu)先級(jí)是1,Task2優(yōu)先級(jí)是2。則Task1優(yōu)先級(jí)高于Task2的優(yōu)先級(jí)。

2.第二個(gè)參數(shù)ptos

ptos這個(gè)參數(shù)和上一篇文章中OSTaskCreateExt創(chuàng)建任務(wù)中的ptos一樣,是指向棧頂?shù)闹羔?。?chuàng)建任務(wù)中利用“OSTaskStkInit”初始化堆棧得到棧頂?shù)闹羔榩sp,將該指針傳遞給OS_TCBInit函數(shù)的參數(shù)。

同樣說明一下:這個(gè)參數(shù)和“第三個(gè)參數(shù)pbos”對(duì)應(yīng),需要根據(jù)棧的增長方向“OS_STK_GROWTH”來決定。

3.第三個(gè)參數(shù)pbos

pbos這個(gè)參數(shù)和“第二個(gè)參數(shù)”一樣,是從上一層的OSTaskCreateExt創(chuàng)建任務(wù)中的ptob參數(shù)意思一樣,是指向棧底的指針。

4.第四個(gè)參數(shù)id

id這個(gè)參數(shù)不多說,和上文一樣的意思。

5.第五個(gè)參數(shù)stk_size

stk_size這個(gè)參數(shù)和上一篇文章也是一樣,這里再提示一下,它就是堆棧的大小,就是你分配堆??臻g(定義堆棧數(shù)組)的大小。

6.第六個(gè)參數(shù)pext

pext這個(gè)參數(shù)是指向用戶提供的內(nèi)存(指針)。

這個(gè)參數(shù)對(duì)初學(xué)者意義不大,可暫時(shí)不用去理解它,你把它理解為擴(kuò)展使用就是了。

7.第六個(gè)參數(shù)opt

opt:用戶操作選項(xiàng)參數(shù)。

上一篇文章已經(jīng)說的很詳細(xì),具體說明見上一篇文章。

到此,細(xì)心的會(huì)發(fā)現(xiàn),其實(shí)“OS_TCBInit”函數(shù)的參數(shù)基本是繼承“OSTaskCreateExt”函數(shù)的參數(shù)。從這里可以看得出“OS_TCBInit”函數(shù)才是創(chuàng)建任務(wù)重要的函數(shù)。

Ⅲ、OS_TCBInit函數(shù)體內(nèi)容描述

上一章節(jié)講述了“OS_TCBInit”的參數(shù),其實(shí)傳遞進(jìn)來的參數(shù)是保存在TCB鏈表里面的,用于保存一個(gè)任務(wù)重要的信息,具體如何實(shí)現(xiàn)就要看接下來的函數(shù)體說明(建議下載源代碼一起參考學(xué)習(xí))。

1.第一部分


A.鏈表節(jié)點(diǎn)及參數(shù):

OSTCBFreeList是當(dāng)前空閑TCB鏈表,相當(dāng)于每初始化一個(gè)任務(wù)就要將OSTCBFreeList指向下一個(gè)沒有使用的FreeList,保證在每次創(chuàng)建任務(wù)的時(shí)候有OSTCBFreeList可用。

if (ptcb != (OS_TCB *)0)

這個(gè)條件就是上面說的,判斷還有沒有空閑TCB鏈表,如果沒有空閑TCB鏈表就會(huì)返回“錯(cuò)誤”。

OSTCBFreeList = ptcb->OSTCBNext;指向下一個(gè)TCB鏈表。

下面來的就是其它參數(shù)賦值(堆棧、優(yōu)先級(jí)、任務(wù)狀態(tài)就緒等)。

B.任務(wù)參數(shù):

這里說的任務(wù)參數(shù)和上一篇文章說的不一樣,主要說的是傳遞下來的參數(shù)信息,歸位到對(duì)應(yīng)的空間,也就是參數(shù)賦值。

ptcb->OSTCBDelReq = OS_ERR_NONE;

這里有一個(gè)語句,就是任務(wù)可以刪除(當(dāng)我們使能了刪除任務(wù)功能,在創(chuàng)建任務(wù)之后就可以刪除創(chuàng)建的任務(wù))。

2.第二部分


A.優(yōu)先級(jí):

UCOS優(yōu)先級(jí)實(shí)現(xiàn)其功能具體的這部分是比較困難的,使用了“優(yōu)先級(jí)表”,而且查找優(yōu)先級(jí)的算法也相對(duì)來說比較困難,初學(xué)者暫時(shí)可以不用考慮,感興趣的朋友可以網(wǎng)上“UCOS優(yōu)先級(jí)調(diào)度算法”。

B.事件:

這個(gè)需要結(jié)合事件(信號(hào)量、消息郵箱等)來講述,我會(huì)在后面講述UCOS資源的事件中提及相關(guān)的信息。

C.性能分析參數(shù):

這個(gè)參數(shù)可以從注釋的意思來理解,“性能分析”意思就是對(duì)系統(tǒng)運(yùn)行的性能,CPU使用率等來理解。前面在講述OS_TaskIdle空閑任務(wù)時(shí)就看到,函數(shù)體里面有這么一條語句:OSIdleCtr++; 也就是統(tǒng)計(jì)空閑任務(wù)的計(jì)數(shù)次數(shù)。

3.第三部分


在上面上部分的“準(zhǔn)備”工作之后,這剩下的就是“就緒”工作了。

OSTCBInitHook(ptcb);和OSTaskCreateHook(ptcb);這兩個(gè)函數(shù)一般都是成對(duì)出現(xiàn),是用戶自己的HOOK函數(shù),用戶自己要實(shí)現(xiàn)某一些功能就寫在這里。

OSTCBPrioTbl[prio] = ptcb; 這條語句將該任務(wù)在TCB表中有一個(gè)對(duì)應(yīng)的位置。

ptcb->OSTCBNext = OSTCBList;和上面第一部分類似,指向TCB鏈表。

OSTaskCtr++;任務(wù)也有一個(gè)統(tǒng)計(jì)計(jì)數(shù)的變量。

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

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

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

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

UCOS基于STM32F0、F1、F3、F4系列實(shí)例工程源代碼(匯總):

https://yunpan.cn/cM9Fjv88cXbjI訪問密碼 048d

本文講述的部分注釋修改為中文(軟件工程源代碼):

https://yunpan.cn/ckKeBFx25VIEB訪問密碼 a9df

基于STM32平臺(tái)的UCOS源代碼工程(官方原始軟件工程)

官網(wǎng)下載(需要賬號(hào)):

https://www.micrium.com/downloadcenter/download-results/?searchterm=hm-stmicroelectronics&supported=true

360云盤下載:

https://yunpan.cn/cM9Gzv4drXqxv訪問密碼 c82c

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

    關(guān)注

    96

    文章

    2953

    瀏覽量

    70351
  • ucos2
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    3707
  • 操作系統(tǒng)內(nèi)核

    關(guān)注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

    linux系統(tǒng)下M.2硬盤調(diào)試和測試全指南:從初始化失敗到讀寫滿速,避坑就看這篇

    在嵌入式開發(fā)中,M.2 接口的 NVMe 硬盤憑借高速讀寫和小巧體積,成了 RK(瑞芯微)等平臺(tái)的 “性能擔(dān)當(dāng)”。但調(diào)試時(shí)總繞不開幾個(gè)坑:主機(jī)初始化失敗、硬盤掛載不上、測試后重啟翻車……
    的頭像 發(fā)表于 02-02 17:18 ?2175次閱讀
    linux<b class='flag-5'>系統(tǒng)</b>下M.<b class='flag-5'>2</b>硬盤調(diào)試和測試全指南:從<b class='flag-5'>初始化</b>失敗到讀寫滿速,避坑就看這篇

    國民技術(shù)發(fā)布N32Cube芯片配置與初始化代碼生成工具

    1月30日,國民技術(shù)(NSING)正式發(fā)布N32Cube——芯片配置與初始化代碼生成工具,讓時(shí)鐘、引腳與外設(shè)的配置一目了然、輕松上手!
    的頭像 發(fā)表于 02-02 15:26 ?586次閱讀
    國民技術(shù)發(fā)布N32Cube芯片配置與<b class='flag-5'>初始化</b>代碼生成工具

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

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

    EtherCAT總線初始化步驟

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

    瀚海微SD NAND TF卡硬件識(shí)別與初始化類問題探討

    在瀚海微SD NAND/TF卡的實(shí)際應(yīng)用中,硬件識(shí)別與初始化是保障設(shè)備正常運(yùn)行的首要環(huán)節(jié),該環(huán)節(jié)出現(xiàn)故障會(huì)直接導(dǎo)致存儲(chǔ)卡無法投入使用,尤其在工業(yè)控制、車載設(shè)備等關(guān)鍵場景中,可能引發(fā)設(shè)備停機(jī)、數(shù)據(jù)丟失
    的頭像 發(fā)表于 11-18 09:58 ?523次閱讀
    瀚海微SD NAND  TF卡硬件識(shí)別與<b class='flag-5'>初始化</b>類問題探討

    串口通信基石:Air8000下Modbus RTU串口初始化詳解!

    串口初始化是Modbus RTU通信穩(wěn)定可靠的關(guān)鍵起點(diǎn)。本篇深入剖析Air8000開發(fā)板串口參數(shù)配置、初始化代碼實(shí)現(xiàn)及調(diào)試要點(diǎn),結(jié)合master_rtu示例,分享實(shí)際操作中的經(jīng)驗(yàn)與避坑指南,讓您
    的頭像 發(fā)表于 10-28 16:33 ?1662次閱讀
    串口通信基石:Air8000下Modbus RTU串口<b class='flag-5'>初始化</b>詳解!

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

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

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

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

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

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

    GraniStudio:初始化例程

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

    MCU外設(shè)初始化:為什么參數(shù)配置必須優(yōu)先于使能

    在微控制器領(lǐng)域,初始化參數(shù)配置階段至關(guān)重要。此時(shí),雖無電源驅(qū)動(dòng),但微控制器在使能信號(hào)到來前,借初始化參數(shù)配置這一精細(xì)步驟,開啟關(guān)鍵準(zhǔn)備進(jìn)程。初始化參數(shù)配置如同物理坐標(biāo)錨定、邏輯指令部署、內(nèi)在秩序預(yù)設(shè)
    的頭像 發(fā)表于 08-13 10:38 ?799次閱讀

    定義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 ?1427次閱讀

    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è)備過載保護(hù)機(jī)制下界面初始化中斷的底層邏輯與解決方案

    一、過載保護(hù)機(jī)制與界面初始化的關(guān)聯(lián)基礎(chǔ) IM 系列設(shè)備的過載保護(hù)機(jī)制是保障設(shè)備安全運(yùn)行的核心功能,其通過傳感器實(shí)時(shí)采集設(shè)備運(yùn)行參數(shù),如電流、電壓、溫度、系統(tǒng)資源占用率等。一旦這些參數(shù)超出預(yù)設(shè)閾值
    的頭像 發(fā)表于 06-27 09:58 ?557次閱讀