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

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

UCOS2系統(tǒng)內核講述(五) _初始化TCB詳情

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

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

學習本文之前可以參看我前面的文章:

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

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

關于本文的更多詳情請往下看。

Ⅱ、OS_TCBInit參數(shù)詳情

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

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

本文將的“OS_TCBInit”是在創(chuàng)建任務時初始化一個任務的TCB,要將優(yōu)先級、堆棧等信息初始化?!癘S_TCBInit”函數(shù)體內容相當于對任務的TCB里面對應的內容落實到具體的參數(shù)上。

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

這個參數(shù)對初學者意義不大,可暫時不用去理解它,你把它理解為擴展使用就是了。

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

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

上一篇文章已經說的很詳細,具體說明見上一篇文章。

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

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

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

1.第一部分


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

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

if (ptcb != (OS_TCB *)0)

這個條件就是上面說的,判斷還有沒有空閑TCB鏈表,如果沒有空閑TCB鏈表就會返回“錯誤”。

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

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

B.任務參數(shù):

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

ptcb->OSTCBDelReq = OS_ERR_NONE;

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

2.第二部分


A.優(yōu)先級:

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

B.事件:

這個需要結合事件(信號量、消息郵箱等)來講述,我會在后面講述UCOS資源的事件中提及相關的信息。

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

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

3.第三部分


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

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

OSTCBPrioTbl[prio] = ptcb; 這條語句將該任務在TCB表中有一個對應的位置。

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

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

Ⅳ、實例工程下載

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

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

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

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

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

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

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

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

官網下載(需要賬號):

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

360云盤下載:

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

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

    關注

    96

    文章

    2953

    瀏覽量

    70308
  • ucos2
    +關注

    關注

    0

    文章

    15

    瀏覽量

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

    關注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    PC強實時運動控制(一):C#的EtherCAT總線初始化(下)

    通過使用配置工具導出ZAR文件進行EtherCAT總線初始化
    的頭像 發(fā)表于 02-05 10:00 ?929次閱讀
    PC強實時運動控制(一):C#的EtherCAT總線<b class='flag-5'>初始化</b>(下)

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

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

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

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

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

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

    EtherCAT總線初始化步驟

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

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

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

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

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

    NVMe高速傳輸之擺脫XDMA設計34:初始化功能驗證與分析2

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

    NVMe高速傳輸之擺脫XDMA設計33:初始化功能驗證與分析

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

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

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

    GraniStudio:初始化例程

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

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

    在微控制器領域,初始化參數(shù)配置階段至關重要。此時,雖無電源驅動,但微控制器在使能信號到來前,借初始化參數(shù)配置這一精細步驟,開啟關鍵準備進程。初始化參數(shù)配置如同物理坐標錨定、邏輯指令部署、內在秩序預設
    的頭像 發(fā)表于 08-13 10:38 ?789次閱讀

    定義IO初始化結構體

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

    NVMe高速傳輸之擺脫XDMA設計之七:系統(tǒng)初始化

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

    IM 系列設備過載保護機制下界面初始化中斷的底層邏輯與解決方案

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