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

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

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

UCOS2_STM32移植詳細(xì)過程(匯總文章)

UCOS2系統(tǒng)內(nèi)核講述(一)_總體描述

UCOS2系統(tǒng)內(nèi)核講述(二)_初始化調(diào)用函數(shù)

UCOS2系統(tǒng)內(nèi)核講述(三)_TCB任務(wù)控制塊

上一篇文章講述了關(guān)于TCB(Task Control Block)任務(wù)控制塊數(shù)據(jù)結(jié)構(gòu)體的內(nèi)容。本文學(xué)習(xí)與應(yīng)用、也與系統(tǒng)內(nèi)核緊密相關(guān)的一個函數(shù)“OSTaskCreateExt”創(chuàng)建任務(wù)。

OSTaskCreateExt這個函數(shù)是我們的應(yīng)用程序所調(diào)用的函數(shù),在我們所移植的軟件工程中,main函數(shù)就調(diào)用了OSTaskCreateExt函數(shù),顯而易見,理解它的功能及其參數(shù)是多么重要。

本文還是結(jié)合前面移植好、可以運(yùn)行的源代碼(可直接下載運(yùn)行的程序)來進(jìn)行講述關(guān)于最新版本UCOS2系統(tǒng)內(nèi)核部分代碼(圍繞源代碼來講述)。

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

Ⅱ、OSTaskCreateExt參數(shù)詳情

創(chuàng)建任務(wù)的函數(shù)有兩個:

OSTaskCreate:以前老版本UCOS系統(tǒng)創(chuàng)建任務(wù)的函數(shù),有4個參數(shù)。

OSTaskCreateExt:新版本UCOS系統(tǒng),在“OSTaskCreate”的基礎(chǔ)上增加了一些功能參數(shù),有9個參數(shù)。其中4個參數(shù)是和老版本一樣(為了兼容老版本)。在新版本的UCOS系統(tǒng)上,我們一般都使用這個函數(shù)創(chuàng)建任務(wù),因此,下面我們講述“OSTaskCreateExt”函數(shù)中每一個參數(shù)的意思。

下面截圖是截取os_task.c文件,在OSTaskCreateExt函數(shù)上面有關(guān)于每一個參數(shù)的注釋(我在源代碼中已經(jīng)把主要意思修改為中文了,結(jié)合main函數(shù)傳遞的參數(shù)理解):


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

task從命名上可以理解到,他的意思就是“任務(wù)”。

【代碼的命名很重要,不管是函數(shù)名還是變量名。好程序的命名一般都是比較規(guī)范的,理解起來自然也就不費(fèi)勁。】

這個參數(shù)是一個指向(參數(shù)為“void *p_arg”,返回值為“void”的函數(shù))的指針。簡單一點(diǎn)就是指向函數(shù)的指針。因此。傳遞的參數(shù)是一個函數(shù)。

在main.c調(diào)用OSTaskCreateExt中我們傳遞的參數(shù)是“AppTaskStart”,就是我們應(yīng)用程序的名字。

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

p_arg傳遞參數(shù)的指針,是一個任意類型的參數(shù)。

當(dāng)我們需要傳遞某些參數(shù)給函數(shù)時,就可以通過該參數(shù)進(jìn)行傳遞。

在main.c調(diào)用OSTaskCreateExt中我們傳遞的參數(shù)是“(void*) 0”,也就是傳遞一個“空指針”給函數(shù)(因為我們沒有參數(shù),就傳遞一個空指針)。

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

ptos:指向任務(wù)堆棧棧頂?shù)闹羔槨?/p>

這個參數(shù)和“第六個參數(shù)pbos”對應(yīng),需要根據(jù)棧的增長方向“OS_STK_GROWTH”來決定。具體見os_cpu.h文件中OS_STK_GROWTH的宏定義,如下圖:


由于我們定義OS_STK_GROWTH為1,增長方向是從高地址往低地址增長,因此,在main.c調(diào)用OSTaskCreateExt中我們傳遞的參數(shù)是“TaskStartStk[TASK_START_STK_SIZE - 1]”,也就是棧的高地址為棧頂。

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

prio:任務(wù)的優(yōu)先級。

這個參數(shù)很好理解,前面也講述過,優(yōu)先級具有唯一性,優(yōu)先級決定該任務(wù)指向的優(yōu)先權(quán)利(優(yōu)先級數(shù)值越低,優(yōu)先級越高)。

我們創(chuàng)建的四個任務(wù)中傳遞的參數(shù)分別宏定義如下圖:


主任務(wù)優(yōu)先級最高(最先執(zhí)行),其他三個次任務(wù)優(yōu)先級依次降低。

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

id:任務(wù)的ID。

這個參數(shù)比較簡單,也就是給每一個創(chuàng)建的任務(wù)分配一個ID編號。相當(dāng)于一篇文章每一章節(jié)都有編號的意思。

我們在創(chuàng)建的任務(wù)中以“優(yōu)先級”作為編號,所以在參數(shù)中,我們看到連續(xù)兩個參數(shù)都是“優(yōu)先級”。

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

pbos:指向任務(wù)堆棧棧底的指針。

這個參數(shù)結(jié)合“第三個參數(shù)ptos”理解,類似的原理,和棧的增長方向“OS_STK_GROWTH”有關(guān)。

根據(jù)棧的增長方向“OS_STK_GROWTH”為從高地址往低地址增長,所以,在main.c調(diào)用OSTaskCreateExt中我們傳遞的參數(shù)是TaskStartStk[0].

7.第七個參數(shù)stk_size

stk_size:任務(wù)堆棧大小。

這個參數(shù)與app_cfg.c文件中定義的“堆棧變量”有關(guān),我們需要傳遞的大小就是堆棧數(shù)組的大小值。

8.第八個參數(shù)pext

pext: 指向用戶提供的內(nèi)存(指針)。

這個參數(shù)是用作 TCB 擴(kuò)展的參數(shù),初學(xué)者使用不到這個參數(shù),暫時可以不用去理解。

9.第九個參數(shù)opt

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

這個參數(shù)用戶創(chuàng)建任務(wù)時需要處理一些額外信息(操作)的參數(shù)?!具@個參數(shù)比較重要,會處理一些信息,在下一章節(jié)重點(diǎn)講述一下關(guān)于該參數(shù)調(diào)用的“OS_TaskStkClr”】

Opt參數(shù)在創(chuàng)建任務(wù)是主要的三個,在OSTaskCreateExt函數(shù)體上面的注釋中已經(jīng)提出來了,如下圖:

OS_TASK_OPT_STK_CHK:檢測參數(shù)是否可用

OS_TASK_OPT_STK_CLR:清除堆棧(清除創(chuàng)建任務(wù)時使用的堆棧)

OS_TASK_OPT_SAVE_FP:保存浮點(diǎn)指針(在進(jìn)行上下文切換時)

參數(shù)是宏定義在ucos_ii.h中,如下圖:


也就是調(diào)用了某一個宏定義,那個宏定義的功能就使能了。

在main.c調(diào)用OSTaskCreateExt中我們傳遞的參數(shù)是“OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR”,進(jìn)行參數(shù)檢查和堆棧清除。

Ⅲ、創(chuàng)建任務(wù)時的堆棧

創(chuàng)建任務(wù)的函數(shù)體中有幾個函數(shù)是比較重要的,本姐講述下圖中紅色標(biāo)記函數(shù)(藍(lán)色部分是重點(diǎn),在下一篇文章重點(diǎn)講述):


1.OS_TaskStkClr

OS_TaskStkClr:創(chuàng)建任務(wù)時清除堆棧。

這個函數(shù)需要在os_cfg.h使能OS_TASK_STAT_STK_CHK_EN這個參數(shù)。


在上面截圖中可以看到opt參數(shù)選項需要使能:OS_TASK_OPT_STK_CHK和OS_TASK_OPT_STK_CLR,也就是參數(shù)檢查和堆棧清除。

清除棧的順序與棧的增長方向有關(guān)??吹皆创a就知道清除堆棧,其實就是在初始時清空一下堆棧空間。

2.OSTaskStkInit

OSTaskStkInit:初始化創(chuàng)建任務(wù)的堆棧。


這個函數(shù)位于os_cpu_c.c文件中,前面移植UCOS時提到了一下該函數(shù)。

從源代碼中可以看得出來,其實這個函數(shù)主要的一個參數(shù)就是“ptos”棧頂,我們需要分配并保存堆棧。

Ⅳ、實例工程下載

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

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

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

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

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

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

https://yunpan.cn/cMIv8haYBL73y訪問密碼 e07e

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

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

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ī)問題,請聯(lián)系本站處理。 舉報投訴
  • 宏定義
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    9412
  • ucos2
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

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

    關(guān)注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Linux內(nèi)核伙伴系統(tǒng)內(nèi)存申請函數(shù)詳解:從原理到實戰(zhàn)

    在 Linux 內(nèi)核中,內(nèi)存管理是整個系統(tǒng)穩(wěn)定運(yùn)行的基石,而伙伴系統(tǒng)(Buddy System) 作為內(nèi)核物理內(nèi)存分配的核心機(jī)制,更是驅(qū)動開發(fā)、內(nèi)核
    的頭像 發(fā)表于 02-10 16:58 ?3631次閱讀
    Linux<b class='flag-5'>內(nèi)核</b>伙伴<b class='flag-5'>系統(tǒng)</b>內(nèi)存申請函數(shù)詳解:從原理到實戰(zhàn)

    Linux系統(tǒng)內(nèi)核參數(shù)調(diào)優(yōu)實戰(zhàn)指南

    Linux 內(nèi)核參數(shù)調(diào)優(yōu)是系統(tǒng)性能優(yōu)化的核心環(huán)節(jié)。隨著云原生架構(gòu)的普及和硬件性能的飛速提升,默認(rèn)的內(nèi)核參數(shù)配置往往無法充分發(fā)揮系統(tǒng)潛力。在高并發(fā) Web 服務(wù)、大數(shù)據(jù)處理、容器化部署等
    的頭像 發(fā)表于 01-28 14:27 ?441次閱讀

    【瑞薩FPB-RA6E2試用】環(huán)境配置及基礎(chǔ)任務(wù)代碼示例

    安裝,這里建議前文講述的RA和Zephyr可以分開創(chuàng)建文件夾,單獨(dú)創(chuàng)建一個Zephyr,方便后續(xù)對薩瑞芯片的開發(fā) 在這里我們選擇第個方式,在本地創(chuàng)
    發(fā)表于 01-24 20:47

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗】Linux內(nèi)核開發(fā)基礎(chǔ)

    感謝電子發(fā)燒友論壇提供的《Linux設(shè)備驅(qū)動開發(fā)(第2版)》閱讀機(jī)會,測評將從Linux內(nèi)核開發(fā)基礎(chǔ)、Linux內(nèi)核平臺抽象和設(shè)備驅(qū)動程序、發(fā)揮硬件潛力以及嵌入式領(lǐng)域內(nèi)的多種內(nèi)核子系統(tǒng)
    發(fā)表于 01-12 22:45

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗】+讀內(nèi)核處理的核心輔助函數(shù)

    防塵薄膜包裝,拿在手上很有分量。 本書上架于異步社區(qū),屬于社區(qū)的精品IT圖書,由中國工信出版集團(tuán)、人民郵電出版社出版,印刷清晰,排版合理。本書共大篇,即第1篇,Linux內(nèi)核開發(fā)基礎(chǔ);第2
    發(fā)表于 01-10 22:08

    大模型驅(qū)動的發(fā)射任務(wù)智能調(diào)度分系統(tǒng)軟件平臺的應(yīng)用與未來發(fā)展

    功能、應(yīng)用案例及未來趨勢個維度進(jìn)行系統(tǒng)闡述。 ? ?應(yīng)用案例 ? ?北京華盛恒輝科技和北京五木恒潤科技推出的大模型驅(qū)動的發(fā)射任務(wù)智能調(diào)度分系統(tǒng),廣泛適用于各行業(yè)等領(lǐng)域,可出色完成大模
    的頭像 發(fā)表于 12-19 14:50 ?301次閱讀

    什么是嵌入式操作系統(tǒng)

    、嵌入式操作系統(tǒng)的定義 嵌入式操作系統(tǒng)是專門為資源受限的嵌入式設(shè)備(比如 STM32 單片機(jī)、物聯(lián)網(wǎng)模塊、工業(yè)控制器)設(shè)計的微型操作系統(tǒng),核心作用是:管理硬件資源、調(diào)度多任務(wù)、提供標(biāo)
    發(fā)表于 12-09 10:33

    Linux-RT特點(diǎn)及簡單應(yīng)用

    處理器時間。這意味著實時任務(wù)可以在硬實時約束下運(yùn)行,從而保證任務(wù)的響應(yīng)時間和執(zhí)行時間。 固定優(yōu)先級調(diào)度:實時內(nèi)核調(diào)度器通常采用固定優(yōu)先級調(diào)度策略,其中任務(wù)的優(yōu)先級在
    發(fā)表于 12-05 07:37

    ucos與freertos哪個好?

    選擇uCOS或FreeRTOS取決于項目的具體需求和資源限制。 FreeRTOS的優(yōu)點(diǎn)包括: 更小的內(nèi)核ROM和RAM占用,特別是在RAM方面,適合資源受限的嵌入式系統(tǒng)。 支持協(xié)程
    發(fā)表于 12-05 07:13

    FreeRTOS 空閑任務(wù)

    FreeRTOS 中很多人會注意到為什么有一個叫IDLE task的任務(wù)占用了CPU百分之九十多的使用權(quán),但是這個任務(wù)并沒有自己手動創(chuàng)建。原因就是這個空閑任務(wù)
    發(fā)表于 12-04 07:35

    【HZ-T536開發(fā)板免費(fèi)體驗】—— linux創(chuàng)建線程

    任務(wù),并行是多個處理器或多核處理器同時執(zhí)行不同的任務(wù)。 Linux系統(tǒng)中進(jìn)行多線程編程時,會涉及到主線程和子線程的操作: 1)主線程是程序的執(zhí)行入口,它是程序中第一個創(chuàng)建的線程。
    發(fā)表于 09-01 21:31

    Task任務(wù):LuatOS實現(xiàn)“任務(wù)級并發(fā)”的核心引擎

    Task任務(wù)通過其強(qiáng)大的并發(fā)處理能力,使LuatOS能夠在單線程環(huán)境中模擬多線程執(zhí)行,通過協(xié)程的掛起與恢復(fù)機(jī)制,實現(xiàn)任務(wù)級的并行操作,顯著提升系統(tǒng)效能。 sys核心庫是LuatOS運(yùn)行框架庫,也是
    的頭像 發(fā)表于 08-28 13:49 ?510次閱讀
    Task<b class='flag-5'>任務(wù)</b>:LuatOS實現(xiàn)“<b class='flag-5'>任務(wù)</b>級并發(fā)”的核心引擎

    揭秘LuatOS Task:多任務(wù)管理的“智能中樞”

    Task任務(wù)作為LuatOS的核心組成部分,通過智能化的任務(wù)管理機(jī)制,實現(xiàn)任務(wù)創(chuàng)建、調(diào)度與協(xié)同運(yùn)行,讓復(fù)雜應(yīng)用得以高效并行處理,滿足實時場景下的嚴(yán)苛需求。 sys核心庫是LuatOS
    的頭像 發(fā)表于 08-28 13:48 ?643次閱讀
    揭秘LuatOS Task:多<b class='flag-5'>任務(wù)</b>管理的“智能中樞”

    同步任務(wù)開發(fā)指導(dǎo)

    {// 調(diào)用靜態(tài)類對象中實現(xiàn)的同步等待調(diào)用Handle.syncSet(num);return true;}// 步驟2: 創(chuàng)建任務(wù)并執(zhí)行async function asyncGet(): Promise
    發(fā)表于 06-19 07:57

    瑞薩RA8快速上手指南:Cortex-M85內(nèi)核瑞薩RA8開發(fā)環(huán)境搭建 并點(diǎn)亮一個LED

    因為Cortex-M內(nèi)核,瑞薩RA8系列單片機(jī)支持多種市面上常見的開發(fā)環(huán)境,像Keil MDK、IAR EWARM等,而本文講述的是瑞薩自家官方的IDE(e2 studio)。
    的頭像 發(fā)表于 03-17 14:35 ?1932次閱讀
    瑞薩RA8快速上手指南:Cortex-M85<b class='flag-5'>內(nèi)核</b>瑞薩RA8開發(fā)環(huán)境搭建 并點(diǎn)亮一個LED