色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-25 09:39 ? 次閱讀

Ⅰ、寫(xiě)在前面

學(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ū)別還是可以看到出來(lái)的。

“OS_InitTCBList”在前面文章有講述過(guò)(可以看我前面相關(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)畫(huà):

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


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

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

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

這個(gè)參數(shù)是從“OSTaskCreateExt”函數(shù)參數(shù)中傳下來(lái)的(原封不動(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ù)。

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

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

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

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

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

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

stk_size這個(gè)參數(shù)和上一篇文章也是一樣,這里再提示一下,它就是堆棧的大小,就是你分配堆棧空間(定義堆棧數(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)說(shuō)的很詳細(xì),具體說(shuō)明見(jiàn)上一篇文章。

到此,細(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)來(lái)的參數(shù)是保存在TCB鏈表里面的,用于保存一個(gè)任務(wù)重要的信息,具體如何實(shí)現(xiàn)就要看接下來(lái)的函數(shù)體說(shuō)明(建議下載源代碼一起參考學(xué)習(xí))。

1.第一部分


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

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

if (ptcb != (OS_TCB *)0)

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

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

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

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

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

ptcb->OSTCBDelReq = OS_ERR_NONE;

這里有一個(gè)語(yǔ)句,就是任務(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ì)來(lái)說(shuō)比較困難,初學(xué)者暫時(shí)可以不用考慮,感興趣的朋友可以網(wǎng)上“UCOS優(yōu)先級(jí)調(diào)度算法”。

B.事件:

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

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

這個(gè)參數(shù)可以從注釋的意思來(lái)理解,“性能分析”意思就是對(duì)系統(tǒng)運(yùn)行的性能,CPU使用率等來(lái)理解。前面在講述OS_TaskIdle空閑任務(wù)時(shí)就看到,函數(shù)體里面有這么一條語(yǔ)句: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)某一些功能就寫(xiě)在這里。

OSTCBPrioTbl[prio] = ptcb; 這條語(yǔ)句將該任務(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)過(guò)多次測(cè)試并沒(méi)有問(wèn)題才上傳至360云盤(pán),歡迎下載測(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訪問(wèn)密碼 048d

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

https://yunpan.cn/ckKeBFx25VIEB訪問(wèn)密碼 a9df

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

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

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

360云盤(pán)下載:

https://yunpan.cn/cM9Gzv4drXqxv訪問(wèn)密碼 c82c

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2945

    瀏覽量

    66774
  • ucos2
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

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

    關(guān)注

    0

    文章

    8

    瀏覽量

    2371
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    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ǔ)解決方案。然而,不斷電初始化失效問(wèn)題可能會(huì)導(dǎo)致系統(tǒng)穩(wěn)定性和數(shù)據(jù)完整性受損。我們將STM32F407與SD NAND集成時(shí)可能遇到的初始化問(wèn)題,并提供專
    的頭像 發(fā)表于 12-11 10:51 ?357次閱讀
    STM32F407 MCU使用SD NAND?不斷電<b class='flag-5'>初始化</b>失效解決方案

    segger編譯器初始化問(wèn)題

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

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

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

    TMS320C6000 McBSP初始化

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

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

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

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

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

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

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

    stm32f4跑ucos+emwin5.16 gui_init()初始化失敗的原因?

    我用stm32f4discovery 連了一塊ra8875的4.3寸屏幕, ucosii已經(jīng)移植成功了,但是移植emwin5。16的時(shí)候在gui初始化的時(shí)候就會(huì)進(jìn)入 HardFault_Handler(); 不知道是什么情況; 單獨(dú)跑emwin 也能跑,為什么和ucos
    發(fā)表于 05-17 12:33

    初始化IO口為外部中斷線的時(shí)候,最先初始化的會(huì)被后初始化的覆蓋掉為什么?

    初始化IO口為外部中斷線的時(shí)候,比如GPIOA6與GPIOB6先后初始化為外部中斷,最先初始化的會(huì)被后初始化的覆蓋掉,不知道是為什么?
    發(fā)表于 05-14 08:26

    使用STM32CubeIDE初始化STM32407的SPI1(PB3)初始化失敗的原因?怎么解決?

    使用STM32CubeIDE初始化STM32407的SPI1(PB3)初始化失敗,有人知道原因嗎?
    發(fā)表于 03-25 07:50

    字符型、指針型等變量等該如何初始化

     對(duì)于數(shù)值類型的變量往往初始化為0,但對(duì)于其他類型的變量,如字符型、指針型等變量等該如何初始化呢?
    的頭像 發(fā)表于 03-18 11:02 ?1509次閱讀

    【鴻蒙】小型系統(tǒng)LiteOS-A內(nèi)核

    對(duì)該芯片架構(gòu)的支持,這個(gè)工作較為復(fù)雜,不在這篇文章范圍內(nèi)。 基礎(chǔ)適配 LiteOS-A 提供系統(tǒng)運(yùn)行所需的系統(tǒng)初始化流程和定制配置選項(xiàng)。移植過(guò)程中,需要關(guān)注
    的頭像 發(fā)表于 02-29 16:16 ?1208次閱讀
    【鴻蒙】小型<b class='flag-5'>系統(tǒng)</b>LiteOS-A<b class='flag-5'>內(nèi)核</b>

    MCU單片機(jī)GPIO初始化該按什么順序配置?為什么初始化時(shí)有電平跳變?

    GPIO初始化時(shí)有時(shí)鐘配置、模式配置、輸出配置、復(fù)用配置,那么在編寫(xiě)初始化代碼時(shí),到底該按什么順序執(zhí)行呢?如果順序不當(dāng)那初始化過(guò)程可能會(huì)出現(xiàn)短暫的電平跳變。
    的頭像 發(fā)表于 02-22 11:07 ?1554次閱讀
    MCU單片機(jī)GPIO<b class='flag-5'>初始化</b>該按什么順序配置?為什么<b class='flag-5'>初始化</b>時(shí)有電平跳變?

    串口初始化一般是初始化哪些內(nèi)容

    串口初始化是指在使用串口進(jìn)行數(shù)據(jù)通信之前,對(duì)串口進(jìn)行一系列的設(shè)置和配置,以確保串口能夠正常工作。串口初始化的內(nèi)容主要包括以下幾個(gè)方面: 串口硬件設(shè)置:首先,需要確定要使用的串口是哪一個(gè),通常計(jì)算機(jī)
    的頭像 發(fā)表于 01-04 09:39 ?3231次閱讀
    主站蜘蛛池模板: A级毛片高清免费网站不卡| 日韩精品真人荷官无码| 日本高清片免费观看| 亚洲色图p| 成人中文字幕在线观看| 久久精品国产亚洲AV忘忧草蜜臀| 日本中文一区| 最近中文字幕无吗免费高清| 国产午夜免费视频片夜色| 欧美一区二区视频在线观看 | 天天干夜夜叭| 99影视久久电影网久久看影院| 精品久久久无码21P发布| 少女10声大哥喊退色狼| ava云直播| 恋孩癖网站大全在线观看| 亚洲蜜桃AV永久无码精品放毛片| 夫妻主vk| 胖老太与人牲交BBWBBW高潮| 在公交车上被JB草坏了被轮J了 | 超碰人人草在线视频| 麻豆乱码一卡二卡三卡视频| 亚洲欧美一区二区三区蜜芽| 国产VA精品午夜福利视频| 秋秋影视午夜福利高清| 19不插片免费视频| 久久re视频这里精品青| 亚洲2017久无码| 国产MD视频一区二区三区| 人妻中文字幕乱人伦在线| 91交换论坛| 久色视频网| 一色狗影院| 久久99国产精品无码AV| 亚洲精品乱码久久久久久中文字幕 | 99久久精品互换人妻AV| 久久伊人电影| 伊人久久综合热青草| 黄色片软件大全| 亚洲AV久久无码精品九号| 国产精品久久久久久久久久免费|