女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

UCOS2系統內核講述(四)_ 創建任務

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

掃碼添加小助手

加入工程師交流群

Ⅰ、寫在前面

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

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

UCOS2系統內核講述(一)_總體描述

UCOS2系統內核講述(二)_初始化調用函數

UCOS2系統內核講述(三)_TCB任務控制塊

上一篇文章講述了關于TCB(Task Control Block)任務控制塊數據結構體的內容。本文學習與應用、也與系統內核緊密相關的一個函數“OSTaskCreateExt”創建任務。

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

本文還是結合前面移植好、可以運行的源代碼(可直接下載運行的程序)來進行講述關于最新版本UCOS2系統內核部分代碼(圍繞源代碼來講述)。

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

Ⅱ、OSTaskCreateExt參數詳情

創建任務的函數有兩個:

OSTaskCreate:以前老版本UCOS系統創建任務的函數,有4個參數。

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

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


1.第一個參數task

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

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

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

在main.c調用OSTaskCreateExt中我們傳遞的參數是“AppTaskStart”,就是我們應用程序的名字。

2.第二個參數p_arg

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

當我們需要傳遞某些參數給函數時,就可以通過該參數進行傳遞。

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

3.第三個參數ptos

ptos:指向任務堆棧棧頂的指針。

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


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

4.第四個參數prio

prio:任務的優先級。

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

我們創建的四個任務中傳遞的參數分別宏定義如下圖:


主任務優先級最高(最先執行),其他三個次任務優先級依次降低。

5.第五個參數id

id:任務的ID。

這個參數比較簡單,也就是給每一個創建的任務分配一個ID編號。相當于一篇文章每一章節都有編號的意思。

我們在創建的任務中以“優先級”作為編號,所以在參數中,我們看到連續兩個參數都是“優先級”。

6.第六個參數pbos

pbos:指向任務堆棧棧底的指針。

這個參數結合“第三個參數ptos”理解,類似的原理,和棧的增長方向“OS_STK_GROWTH”有關。

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

7.第七個參數stk_size

stk_size:任務堆棧大小。

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

8.第八個參數pext

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

這個參數是用作 TCB 擴展的參數,初學者使用不到這個參數,暫時可以不用去理解。

9.第九個參數opt

opt: 用戶操作選項參數。

這個參數用戶創建任務時需要處理一些額外信息(操作)的參數。【這個參數比較重要,會處理一些信息,在下一章節重點講述一下關于該參數調用的“OS_TaskStkClr”】

Opt參數在創建任務是主要的三個,在OSTaskCreateExt函數體上面的注釋中已經提出來了,如下圖:

OS_TASK_OPT_STK_CHK:檢測參數是否可用

OS_TASK_OPT_STK_CLR:清除堆棧(清除創建任務時使用的堆棧)

OS_TASK_OPT_SAVE_FP:保存浮點指針(在進行上下文切換時)

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


也就是調用了某一個宏定義,那個宏定義的功能就使能了。

在main.c調用OSTaskCreateExt中我們傳遞的參數是“OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR”,進行參數檢查和堆棧清除。

Ⅲ、創建任務時的堆棧

創建任務的函數體中有幾個函數是比較重要的,本姐講述下圖中紅色標記函數(藍色部分是重點,在下一篇文章重點講述):


1.OS_TaskStkClr

OS_TaskStkClr:創建任務時清除堆棧。

這個函數需要在os_cfg.h使能OS_TASK_STAT_STK_CHK_EN這個參數。


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

清除棧的順序與棧的增長方向有關。看到源代碼就知道清除堆棧,其實就是在初始時清空一下堆棧空間。

2.OSTaskStkInit

OSTaskStkInit:初始化創建任務的堆棧。


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

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

Ⅳ、實例工程下載

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

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

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

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

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

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

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

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

官網下載(需要賬號):

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

360云盤下載:

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

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

    關注

    0

    文章

    51

    瀏覽量

    9229
  • ucos2
    +關注

    關注

    0

    文章

    15

    瀏覽量

    3640
  • 操作系統內核

    關注

    0

    文章

    8

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    同步任務開發指導

    {// 調用靜態類對象中實現的同步等待調用Handle.syncSet(num);return true;}// 步驟2: 創建任務并執行async function asyncGet(): Promise
    發表于 06-19 07:57

    快速入門——LuatOS:sys庫多任務管理實戰攻略!

    在嵌入式開發中,多任務管理是提升系統效率的關鍵。本教程專為快速入門設計,聚焦LuatOS的sys庫,通過實戰案例帶你快速掌握多任務創建、調度與同步技巧。無論你是零基礎新手還是希望快速提
    的頭像 發表于 05-29 14:36 ?217次閱讀
    快速入門——LuatOS:sys庫多<b class='flag-5'>任務</b>管理實戰攻略!

    瑞薩RA8系列教程 | 基于 e2 studio 創建RA8工程

    該系列教程前面幾篇文章都是為開發做準備,本文正式進入開發階段,基于 e2 studio 創建RA8工程,并點亮一個LED。
    的頭像 發表于 04-03 17:14 ?403次閱讀
    瑞薩RA8系列教程 | 基于 e<b class='flag-5'>2</b> studio <b class='flag-5'>創建</b>RA8工程

    瑞薩RA8快速上手指南:Cortex-M85內核瑞薩RA8開發環境搭建 并點亮一個LED

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

    【第章 定時任務】手把手教你玩轉新版正點原子云

    【第章 定時任務】手把手教你玩轉新版正點原子云 承接上篇,除了報警聯動這個功能,原子云還有一個特色功能也是各開發者喜歡用的,定時任務功能。 【正點原子】云平臺:原子云(點擊登錄原子云) 前言
    發表于 03-13 10:19

    AGV監控與任務管理系統設計

    AGV在智能物流中核心,助力工業4.0和中國制造2025。AGV管理監控調度系統實時監控、任務管理、路徑規劃,確保高效便捷。AGV市場前景廣闊,解決人口紅利喪失、勞動力成本上升等問題,物流裝備業迎來機遇。
    的頭像 發表于 03-05 12:10 ?308次閱讀
    AGV監控與<b class='flag-5'>任務</b>管理<b class='flag-5'>系統</b>設計

    eIQ Time Series Studio工具使用攻略(三)-工程創建

    用戶打開TimeSeries Studio后,首先進入Home界面,如需創建用戶工程,需要在主界面找到“Tasks”模塊,然后選擇需要創建的算法項目: 點擊“AnomalyDetection
    的頭像 發表于 01-09 16:12 ?1555次閱讀
    eIQ Time Series Studio工具使用攻略(三)-工程<b class='flag-5'>創建</b>

    【「具身智能機器人系統」閱讀體驗】2.具身智能機器人的基礎模塊

    具身智能機器人的基礎模塊,這個是本書的第二部分內容,主要分為個部分:機器人計算系統,自主機器人的感知系統,自主機器人的定位系統,自主機器人的規劃與控制
    發表于 01-04 19:22

    Linux計劃任務介紹

    點定時備份數據。比如:11點開啟網站搶購接口,12點關閉網站搶購接口。 3.計劃任務主要分為以下兩種使用情況: 1.系統級別的定時任務: 臨時文件清理、系統信息采集、日志文件切割?
    的頭像 發表于 11-24 15:49 ?797次閱讀

    自動發電控制系統的基本任務

    自動發電控制系統(Automatic Generation Control,簡稱AGC)在電力系統中扮演著至關重要的角色,其基本任務可以歸納為以下幾個方面:   發電機輸出功率與總負荷功率匹配
    的頭像 發表于 10-03 15:03 ?1492次閱讀

    詳解linux內核的uevent機制

    事件”,當硬件事件發生時,內核會生成一個 uevent,并通過 netlink 套接字將其發送到用戶空間。用戶空間應用程序(例如 udev、mdev),可以監聽這些事件并采取相應的操作,例如加載適當的驅動程序或執行其他配置任務
    的頭像 發表于 09-29 17:01 ?1887次閱讀

    linux驅動程序如何加載進內核

    在Linux系統中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。 驅動程序的編寫 驅動程序的編寫是Linux驅動開發的基礎。在編寫驅動程序之前
    的頭像 發表于 08-30 15:02 ?1098次閱讀

    Linux內核測試技術

    Linux 內核是Linux操作系統的核心部分,負責管理硬件資源和提供系統調用接口。隨著 Linux 內核的不斷發展和更新,其復雜性和代碼規模也在不斷增加。因此,確保
    的頭像 發表于 08-13 13:42 ?1284次閱讀
    Linux<b class='flag-5'>內核</b>測試技術

    請問MODUS支持LINUX、FREERTOS、UCOS、Mbed、Android所有操作系統嗎?

    請問 MODUS 支持 LINUX、FREERTOS、UCOS、Mbed、Android 所有操作系統嗎?
    發表于 07-23 06:06

    xTaskCreate能否把堆棧上限調整為2K或者1k?

    RTOS SDK 的系統任務優先級為 15 ,創建任務的接?口 xTaskCreate 為 freeRTOS ?自帶接?口,使 ?用 xTaskCreate
    發表于 07-22 06:31