99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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鏈表?!癘S_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ù)棧的增長(zhǎng)方向“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é)者提供的例程都是去掉了許多不必要的功能,精簡(jiǎn)了官方的代碼,對(duì)初學(xué)者一看就明白,以簡(jiǎn)單明了的工程供大家學(xué)習(xí)。

筆者提供的實(shí)例工程都是在板子上經(jīng)過多次測(cè)試并沒有問題才上傳至360云盤,歡迎下載測(cè)試、參照學(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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2953

    瀏覽量

    68404
  • ucos2
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

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

    關(guān)注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

    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 ?80次閱讀

    STM32CubeMX用于STM32配置和初始化C代碼生成

    電子發(fā)燒友網(wǎng)站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費(fèi)下載
    發(fā)表于 02-26 17:32 ?677次下載

    EE-359:ADSP-CM40x啟動(dòng)時(shí)間優(yōu)化和器件初始化

    電子發(fā)燒友網(wǎng)站提供《EE-359:ADSP-CM40x啟動(dòng)時(shí)間優(yōu)化和器件初始化.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 16:33 ?0次下載
    EE-359:ADSP-CM40x啟動(dòng)時(shí)間優(yōu)化和器件<b class='flag-5'>初始化</b>

    EE-88:使用21xx編譯器在C中初始化變量

    電子發(fā)燒友網(wǎng)站提供《EE-88:使用21xx編譯器在C中初始化變量.pdf》資料免費(fèi)下載
    發(fā)表于 01-13 15:54 ?0次下載
    EE-88:使用21xx編譯器在C中<b class='flag-5'>初始化</b>變量

    OMAP5912多媒體處理器初始化參考指南

    電子發(fā)燒友網(wǎng)站提供《OMAP5912多媒體處理器初始化參考指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-17 16:20 ?0次下載
    OMAP5912多媒體處理器<b class='flag-5'>初始化</b>參考指南

    STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

    STM32F407微控制器單元(MCU)與SD NAND的結(jié)合提供了強(qiáng)大的存儲(chǔ)解決方案。然而,不斷電初始化失效問題可能會(huì)導(dǎo)致系統(tǒng)穩(wěn)定性和數(shù)據(jù)完整性受損。我們將STM32F407與SD NAND集成時(shí)可能遇到的初始化問題,并提供專
    的頭像 發(fā)表于 12-11 10:51 ?955次閱讀
    STM32F407 MCU使用SD NAND?不斷電<b class='flag-5'>初始化</b>失效解決方案

    segger編譯器初始化問題

    的圖; 2.第二張圖是該變量在文件中的所有操作,第一行是初始化,該行代碼在初始化部分最后一個(gè),執(zhí)行完就是主循環(huán)了; 3.第2,3行也是對(duì)變量的賦值,在主循環(huán)中; 4.第4行已注釋; 5
    發(fā)表于 12-09 18:06

    請(qǐng)問LMX2595配置時(shí)如何進(jìn)行初始化

    您好,查閱手冊(cè)說初始化按照1.r0的rest置為1;2.r0的reset置為1;3.按照寄存器表格配置寄存器;4.fcal_en置為1的順序來初始化。請(qǐng)問在第三步中,按照寄存器表配置寄存器,這些
    發(fā)表于 11-12 06:51

    基于旋轉(zhuǎn)平移解耦框架的視覺慣性初始化方法

    精確和魯棒的初始化對(duì)于視覺慣性里程計(jì)(VIO)至關(guān)重要,因?yàn)椴涣嫉?b class='flag-5'>初始化會(huì)嚴(yán)重降低姿態(tài)精度。
    的頭像 發(fā)表于 11-01 10:16 ?971次閱讀
    基于旋轉(zhuǎn)平移解耦框架的視覺慣性<b class='flag-5'>初始化</b>方法

    TMS320C6000 McBSP初始化

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000 McBSP初始化.pdf》資料免費(fèi)下載
    發(fā)表于 10-26 10:10 ?1次下載
    TMS320C6000 McBSP<b class='flag-5'>初始化</b>

    如何在i.MX RT微控制器上初始化LWIP協(xié)議棧

    在i.MX RT微控制器上初始化LWIP協(xié)議棧是一個(gè)復(fù)雜但有趣的過程,它涉及多個(gè)步驟和關(guān)鍵組件的配置.
    的頭像 發(fā)表于 10-12 11:48 ?847次閱讀
    如何在i.MX RT微控制器上<b class='flag-5'>初始化</b>LWIP協(xié)議棧

    視頻引擎初始化失敗怎么回事

    視頻引擎初始化失敗是一個(gè)常見的技術(shù)問題,它可能由多種原因引起,包括軟件沖突、硬件問題、驅(qū)動(dòng)程序問題、系統(tǒng)設(shè)置錯(cuò)誤等。要解決這個(gè)問題,需要對(duì)可能的原因進(jìn)行詳細(xì)的分析和診斷。 1. 軟件沖突 1.1
    的頭像 發(fā)表于 09-18 18:18 ?2879次閱讀

    瀚海微SD NAND應(yīng)用之SD協(xié)議存儲(chǔ)功能描述2 初始化命令

    初始化和識(shí)別過程: 總線激活后,主機(jī)啟動(dòng)卡初始化和識(shí)別過程。 初始化過程從SD SEND OP COND (ACMD41)開始,通過設(shè)置其操作條件和OCR中的HCS位。HCS (Host
    的頭像 發(fā)表于 07-22 10:54 ?731次閱讀
    瀚海微SD NAND應(yīng)用之SD協(xié)議存儲(chǔ)功能描述<b class='flag-5'>2</b> <b class='flag-5'>初始化</b>命令