chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

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

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

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

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

Ⅱ、OS_TCBInit參數詳情

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

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

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

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

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

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

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

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


該函數位于“os_core.c”下面;

1.第一個參數prio

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

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

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

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

2.第二個參數ptos

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

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

3.第三個參數pbos

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

4.第四個參數id

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

5.第五個參數stk_size

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

6.第六個參數pext

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

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

7.第六個參數opt

opt:用戶操作選項參數。

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

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

Ⅲ、OS_TCBInit函數體內容描述

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

1.第一部分


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

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

if (ptcb != (OS_TCB *)0)

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

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

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

B.任務參數:

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

ptcb->OSTCBDelReq = OS_ERR_NONE;

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

2.第二部分


A.優(yōu)先級:

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

B.事件:

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

C.性能分析參數:

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

3.第三部分


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

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

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

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

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

Ⅳ、實例工程下載

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

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

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

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

    瀏覽量

    69737
  • ucos2
    +關注

    關注

    0

    文章

    15

    瀏覽量

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

    關注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    為什么使用以下命令初始化系統(tǒng)時鐘源時,HCLK的時鐘源無法切換到PLL?

    為什么使用以下命令初始化系統(tǒng)時鐘源時,HCLK的時鐘源無法切換到PLL?
    發(fā)表于 08-26 08:22

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

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

    GraniStudio:初始化例程

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

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

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

    定義IO初始化結構體

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

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

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

    IM系列設備過載故障:界面初始化終止的診斷流程與修復指南

    當 IM 系列設備出現過載故障導致界面初始化終止時,通常表現為設備啟動后操作界面無顯示、指示燈異常閃爍或初始化進度條停滯不前,同時可能伴隨設備運行異響或異常發(fā)熱。初步判斷時,可觀察設備是否有錯
    的頭像 發(fā)表于 06-28 09:47 ?989次閱讀

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

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

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

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

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

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

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

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