国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    瀏覽量

    3707
  • 操作系統內核

    關注

    0

    文章

    8

    瀏覽量

    2485
  • 調用函數
    +關注

    關注

    0

    文章

    11

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    PC強實時運動控制(一):C#的EtherCAT總線初始化(下)

    通過使用配置工具導出ZAR文件進行EtherCAT總線初始化
    的頭像 發表于 02-05 10:00 ?932次閱讀
    PC強實時運動控制(一):C#的EtherCAT總線<b class='flag-5'>初始化</b>(下)

    MCU工程初始化,到底該不該交給工具?

    背景 工程初始化重復性高,但出錯成本大。工程師常問:交給工具是不是會丟失掌控? 工具可做的事 時鐘樹、引腳復用、外設配置 工程生成、代碼模板套用 參數校驗和約束檢查 工程師仍需做的事 特殊業務邏輯
    的頭像 發表于 01-29 10:18 ?142次閱讀
    MCU工程<b class='flag-5'>初始化</b>,到底該不該交給工具?

    掌握 LuatIO:GPIO 復用模式初始化配置全流程解析

    在使用 LuatIO 進行嵌入式應用開發時,合理配置 GPIO 的復用功能是實現外設控制的前提。本文全面解析 GPIO 引腳由普通 IO 轉換為復用功能引腳的初始化流程,包括時鐘使能、模式選擇、速度
    的頭像 發表于 01-23 15:28 ?1118次閱讀
    掌握 LuatIO:GPIO 復用模式<b class='flag-5'>初始化</b>配置全流程解析

    EtherCAT總線初始化步驟

    EtherCAT(Ethernet for Control Automation Technology)是一種高性能的工業以太網通信協議,廣泛應用于工業自動領域。其初始化過程是確保系統穩定運行
    的頭像 發表于 12-22 10:10 ?576次閱讀
    EtherCAT總線<b class='flag-5'>初始化</b>步驟

    Linux內核模塊的加載機制

    可能會有限制。 接下來是模塊的初始化內核會執行模塊的初始化函數,通常是用module_init宏定義的函數。這個
    發表于 11-25 06:59

    深入了解系統調用API:探索操作系統底層的關鍵接口

    ,也無法使用內核函數。當用戶進程必須訪問內核或使用某個內核函數時,就得使用系統
    的頭像 發表于 11-03 09:20 ?698次閱讀

    NVMe高速傳輸之擺脫XDMA設計34:初始化功能驗證與分析2

    系統模型中, 待測設計應能夠正確地配置橋設備模型和 NVMe 設備模型的配置空間。 圖2 PCIe 初始化測試仿真波形一 PCIe 初始化開始執行后, 首先配置位于總線號 0, 設
    發表于 10-09 11:31

    NVMe高速傳輸之擺脫XDMA設計33:初始化功能驗證與分析

    BAR 空間。(1) 系統初始化功能測試結果系統初始化正常功能仿真波形如圖1所示, 系統初始化
    發表于 10-08 08:02

    microros rtthread移植初始化rclc_support_init無法通過怎么解決?

    源碼分下如下圖,代碼編譯啥的都是正確的 這個初始化函數調用時串口會發出一串數據,數據如下圖
    發表于 09-10 07:28

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

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

    GraniStudio:初始化例程

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

    定義IO初始化結構體

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

    NVMe高速傳輸之擺脫XDMA設計之七:系統初始化

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

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

    系統立即啟動保護策略。而界面初始化過程依賴于設備穩定的供電環境和充足的系統資源,當過載保護機制觸發時,者的關聯被打破,導致界面初始化中斷
    的頭像 發表于 06-27 09:58 ?541次閱讀

    cyusb3014插入usb2.0接口后,軟件調用cyapi.lib中的哪些函數完成初始化、讀寫操作?

    cyusb3014,插入usb2.0接口后,軟件調用cyapi.lib中的哪些函數完成初始化、讀寫操作?
    發表于 05-29 07:14