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

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

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

3天內不再提示

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

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-25 09:57 ? 次閱讀

Ⅰ、寫在前面

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

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

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

還是按照上一篇文章的思維(從外到內),本文(結合源代碼)進一步深入UCOS系統內核,我會將講述過的源代碼注釋修改為中文,提供給大家參考。

上一篇文章總體描述了一下整個工程“外圍”的代碼,本文將進一步“入圍”,進一步講述OSInit所調用的函數。

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

本文講述的內容不必深入理解,可以先做個了解。

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

Ⅱ、OSInit所調用的函數

上一篇文章大概講述了關于該函數的內容,本文將進一步講述OSInit系統初始化。

我將OSInit所調用的函數分為兩類:必須類和非必須類。


必須類:與系統、任務緊密相關的初始化。其實這些初始化就是對變量、結構體等賦予初始值。(如:系統運行標志位初始化暫停運行、最高優先級指向空等)它們的初始化位于系統內核os_core.c里面。

非必須類:這一類就是可以不調用來初始化的一類。從代碼可以看他們前面有一個預處理標志位【如:#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)】,這些標志位位于os_cfg.h(前面說過系統的裁剪),當我們不使用這些功能時,也就是系統裁剪掉了這些功能,它們就不會被初始化。

事件標志組、內存管理、消息隊列等這些就屬于非必須類,它們的初始化位于自身的.c文件里面(不位于os_core.c)。【如:OS_FlagInit位于os_flag.c文件里面】

下面講述一下必須類(非必須類在后面結合相關資源講述):

1.OS_InitMisc(必須類)

這個函數會被OSInit()調用來初始化各項變量。對紅色框內參數初始化數值,這些參數是系統必須的變量,類似于我們定義一個全局變量,初始的時候對它進行賦值。


2.OS_InitRdyList(必須類)

這個函數被OSInit()調用來初始化就緒表。這里說的就緒表其實指的是把一個一個任務排列成一個表,要將這個表初始化的意思。要執行響應任務就需要知道任務的優先級、任務控制塊、目前指向的任務等一系列信息


3.OS_InitTCBList(必須類)

這個函數會被OSInit()調用來初始化空閑TCB(任務控制塊)。這個初始化函數包含的信息是比較難的,也是系統比較重要的(后面會對TCB進行講述)。

所謂任務控制塊,就是控制任務相關變量數據信息各類的結構體的歸類,其結構體里面包含的信息是很多的。

理解TCB就需要對數據結構有一定的熟悉才行。


4.OS_InitEventList(必須類)

這個函數會被OSInit()調用來初始化空閑ECB(事件控制塊)。這個函數雖然我把它歸類到系統必須類這一塊,其實不完全正確。這里所說的事件,其實就是系統相關資源(消息隊列、郵箱、信號量、互斥信號量等)的一個或集。在ucos_ii.h中可以看到下面宏定義:

#define OS_EVENT_EN (((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u) || (OS_SEM_EN > 0u) || (OS_MUTEX_EN > 0u))

消息隊列、郵箱、信號量、互斥信號量等這些資源要被系統所調用,就需要進行初始化。系統把他們定義為事件,而使用是需要調用相關數據,系統就把他們定義為ECB(事件控制塊),有點類似于TCB(任務控制塊)。


5.OS_InitTaskIdle(必須類)

這個函數會被OSInit()調用來創建空閑任務。這個函數在本節開頭截圖中沒有截取出來(屏幕高度有限),其實這個函數也是屬于系統必須初始化的函數。空閑函數其實就是系統把所創建的任務都處理完了,那些都掛起了,或刪除了,系統空閑沒事做了,它就會來執行這個空閑任務。

空閑任務在統計中起到一定作用,所謂統計,就是我們都知道的CPU占用率,空閑統計的越多,CPU空閑越多,那么CPU占用率就越低。【從CPU使用率應該很容易理解為什么要創建空閑任務】


Ⅲ、實例工程下載

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

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

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

UCOS基于STM32F0系列實例:

https://yunpan.cn/cByHFxCfpaIbh訪問密碼 4437

UCOS基于STM32F1系列實例:

https://yunpan.cn/cByHum5BStkEK訪問密碼 00a6

UCOS基于STM32F3系列實例:

https://yunpan.cn/cByHrMmkekIar訪問密碼 da90

UCOS基于STM32F4系列實例:

https://yunpan.cn/cByHx47jehTgX訪問密碼 5a04

本文所講述部分注釋修改為中文:

https://yunpan.cn/cMGZKfnVVb2Li訪問密碼 49c2

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

    關注

    0

    文章

    15

    瀏覽量

    3557
  • 操作系統內核

    關注

    0

    文章

    8

    瀏覽量

    2368
  • 調用函數
    +關注

    關注

    0

    文章

    11

    瀏覽量

    2305
收藏 人收藏

    評論

    相關推薦

    STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

    STM32F407微控制器單元(MCU)與SD NAND的結合提供了強大的存儲解決方案。然而,不斷電初始化失效問題可能會導致系統穩定性和數據完整性受損。我們將STM32F407與SD NAND集成時可能遇到的初始化問題,并提供專
    的頭像 發表于 12-11 10:51 ?309次閱讀
    STM32F407 MCU使用SD NAND?不斷電<b class='flag-5'>初始化</b>失效解決方案

    segger編譯器初始化問題

    的圖; 2.第張圖是該變量在文件中的所有操作,第一行是初始化,該行代碼在初始化部分最后一個,執行完就是主循環了; 3.第2,3行也是對變量
    發表于 12-09 18:06

    HAL庫的函數調用示例

    、GPIO(通用輸入輸出)相關函數 GPIO初始化 c復制代碼GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_PIN_4
    的頭像 發表于 12-02 14:01 ?320次閱讀

    基于旋轉平移解耦框架的視覺慣性初始化方法

    精確和魯棒的初始化對于視覺慣性里程計(VIO)至關重要,因為不良的初始化會嚴重降低姿態精度。
    的頭像 發表于 11-01 10:16 ?324次閱讀
    基于旋轉平移解耦框架的視覺慣性<b class='flag-5'>初始化</b>方法

    TMS320C6000 McBSP初始化

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

    使用RTOS_SDK,在哪里初始化我的串口UART0?

    重復編譯初始化函數造成存儲空間的浪費?如果不這樣,我應該怎么直接調用libdriver.a中的初始化函數
    發表于 07-11 06:59

    調用串口的時候串口初始化函數中用了BOOL 型的變量,結果串口每次一發數據芯片就重啟,怎么解決?

    調用串口的時候串口初始化函數中用了BOOL 型的變量,結果串口每次一發數據芯片就重啟,試了很多次結果發現只要在platformIo中使用bool型的變量就會出現這個問題,不知道大家有沒有遇到過這種情況 [Codebox=cp
    發表于 06-26 06:48

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

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

    stm32定時器在初始化參數之前是否必須開啟對應時鐘?

    調用RT-thread的PWM組件,發現HAL_TIM_PWM_MspInit用的默認的,沒有任何操作的函數。這就導致在調用HAL_TIM_PWM_Init和HAL_TIM_Base_Init
    發表于 04-18 06:42

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

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

    【鴻蒙】小型系統LiteOS-A內核

    對該芯片架構的支持,這個工作較為復雜,不在這篇文章范圍內。 基礎適配 LiteOS-A 提供系統運行所需的系統初始化流程和定制配置選項。移植過程中,需要關注
    的頭像 發表于 02-29 16:16 ?1169次閱讀
    【鴻蒙】小型<b class='flag-5'>系統</b>LiteOS-A<b class='flag-5'>內核</b>

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

    GPIO初始化時有時鐘配置、模式配置、輸出配置、復用配置,那么在編寫初始化代碼時,到底該按什么順序執行呢?如果順序不當那初始化過程可能會出現短暫的電平跳變。
    的頭像 發表于 02-22 11:07 ?1528次閱讀
    MCU單片機GPIO<b class='flag-5'>初始化</b>該按什么順序配置?為什么<b class='flag-5'>初始化</b>時有電平跳變?

    如何在PSOC 6中初始化QSPI?

    、CYBSP_QSPI_SCK、QSPI_SS、QSPI_SS、SPI_BUS_FREQUENCY_HZ); 要初始化 QSPI,看起來它調用了巨大的代碼進行初始化,但失敗了: const
    發表于 01-26 07:48

    串口初始化一般是初始化哪些內容

    串口初始化是指在使用串口進行數據通信之前,對串口進行一系列的設置和配置,以確保串口能夠正常工作。串口初始化的內容主要包括以下幾個方面: 串口硬件設置:首先,需要確定要使用的串口是哪一個,通常計算機
    的頭像 發表于 01-04 09:39 ?3155次閱讀

    labview運行后如何初始化

    LabVIEW是一款強大的圖形編程軟件,在運行之前通常需要進行一些初始化操作。本文將詳細介紹LabVIEW運行前的初始化過程,并提供了一些常用的初始化方法。 創建新項目: 在LabV
    的頭像 發表于 12-28 17:24 ?2626次閱讀
    主站蜘蛛池模板: 欧美精品一区二区三区四区| 富婆夜店找黑人猛男BD在线| 91精品福利一区二区| 最美白虎逼| AAA级精品无码久久久国片| 把她带到密室调教性奴| 邓奴的视频IVK| 国产亚洲精品精品国产亚洲综合| 国产中文在线| 久久综合九色综合国产| 浓毛BWBWBWBWBW日本| 手机毛片在线观看| 亚洲欧美日韩精品自拍| 最新毛片网| 第一怡春院| 精品96在线观看影院| 男男女女爽爽爽视频免费| 色播播电影| 一二三四视频免费社区5| 51无码人妻精品1国产| 国产 亚洲 日韩 欧美 在线观看| 国产在线播放精品视频| 妈妈的朋友6未删减版完整在线 | 国内免费视频成人精品| 久久国产亚洲精品AV麻豆| 男人插女人逼逼| 無码一区中文字幕少妇熟女网站| 野花社区WWW韩国日本| xxxx69动漫| 韩国演艺圈悲惨在线| 免费精品国偷自产在线在线| 天美传媒在线观看免费完整版| 亚洲色大成网站www久久九九| 6080伦理久久亚洲精品| 国产高清视频在线观看97| 久久噜国产精品拍拍拍拍| 日本免费一区二区三区四区五六区 | 极品少妇高潮XXXXX| 欧美多毛的大隂道| 亚洲精品成人无码A片在线| 99视频国产在线|