娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年07月10日(星期三)

正在發生

2019年04月25日 | UCOSIII的5個系統任務及鉤子函數編寫

發布者:國寶集團 來源: eefocus關鍵字:UCOSIII  系統任務  鉤子函數 手機看文章 掃描二維碼
隨時隨地手機看文章

一、必須創建任務函數


空閑任務

特點:


     (1)、空閑任務是UCOSIII創建的第一個任務。


     (2)、空閑任務是UCOSIII必須創建的。

     (3)、空閑任務優先級總是為OS_CFG_PRIO_MAK-1。


     (4)、空閑任務中不能調用任何可使空閑任務進入等待態的函數!


OSinit()函數—>OS_IdleTaskInit()空閑任務創建函數-->OSTaskCreate()中OS_IdleTask就是空閑函數


void  OS_IdleTask (void  *p_arg)

{

    CPU_SR_ALLOC();

    (void)&p_arg;

                                          

    while (DEF_ON)

    {

        CPU_CRITICAL_ENTER();//進入臨界代碼保護區

        OSIdleTaskCtr++;//每進入一次空閑任務就加一

 

        #if OS_CFG_STAT_TASK_EN > 0u//大于0開啟統計任務

            OSStatTaskCtr++;//統計CPU使用頻率

        #endif

 

        CPU_CRITICAL_EXIT();//臨界代碼退出

        OSIdleTaskHook();  //鉤子函數                                  

     }

}

時鐘節拍任務

(1)時鐘節拍任務用來跟蹤任務延時和任務等待超時。


(2)任務函數為OS_TickTask(),是UCOSIII必須創建的一個任務,任務優先級用宏OS_CFG_TICK_TASK_PRIO來定義,


(3)一般時鐘節拍任務的任務應該設置一個相對較高的優先級,一般優先級設置為1.


-------------------------------------------------------------------------------------------------------------------------------------------------


二、自定義任務函數


1、統計任務


統計任務可用來統計CPU的使用率、各個任務的CPU使用率和各任務的堆棧使用情況,默認情況下統計任務是不會創建的。


如果要開啟統計任務的話需要做如下步驟:


    1.1、將宏OS_CFG_STAT_TASK_EN置1。


    1.2、必須在main函數創建的以一個任務也是唯一的一個應用任務里面調用函數OSStatTaskCPUUsageInit()。


    1.3、統計任務的優先級通過宏OS_CFG_STAT_TASK_PRIO來設置,一般設置OS_CFG_PRIO_MAX-2,也就是倒數第二個優先級。


2、定時任務


UCOSIII提供軟件定時器功能,定時任務是可選的,將宏OS_CFG_TMR_EN設置為1就會使能定時任務,


在OSInit()中將會調用函數OS_TmrInit()來創建定時任務。定時任務的優先級通過宏OS_CFG_TMR_TASK_PRIO定義,ALIENTEK默認將定時器任務優先級設置為2。


     2.1 中斷服務管理任務


當把os_cfg.h文件中的宏OS_CFG_ISR_POST_DEFERRED_EN置1就會使能中斷服務管理任務


當ISR(中斷服務函數)調用UCOSIII提供的“post”函數時,要發送的數據和發送的目的地都會存入一個特別的緩沖隊列中,當所有嵌套的ISR都執行完成以后UCOSIII會做任務切換,運行中斷服務管理任務,該任務會把緩存隊列中存放的信息重發給相應的任務。


這樣做的好處就是可以減少中斷關閉的時間,否則,在ISR中還需要把任務從等待列表中刪除,并把任務放入就緒表,以及做一些其他的耗時操作。


中斷服務管理任務的優先級永遠為0,不可更改!


鉤子函數

1、鉤子函數一般主要是用來擴展其他函數(任務)功能的,鉤子函數有如下幾個:


  (1)、OSIdleTaskHook(),空閑任務調用這個函數,可以用來讓CPU進入低功耗模式


  (2)、OSInitHook(),系統初始化函數OSInit()調用此函數。


  (3)、OSStatTaskHook(),統計任務每秒中都會調用這個函數,此函數允許你向統計任務中添加自己的應用函數。


  (4)、OSTaskCreateHook(),任務創建的鉤子函數。


  (5)、OSTaskDelHook(),任務刪除的鉤子函數。


  (6)、OSTaskReturnHook(),任務意外返回時調用的鉤子函數,比如刪除某個任務


  (7)、OSTaskSwHook(),任務切換時候調用的鉤子函數。


  (8)、OSTimeTickHook(),滴答定時器調用的鉤子函數。


注意:我們在編寫鉤子函數時不能直接在函數里對鉤子函數進行修改,而是修改在os_app_hooks.c里面對應的函數來針對修改


比如空閑任務函數的鉤子函數是OSIdleTaskHook();,就不能直接跳過去修改,而是在os_app_hooks.c找到對應函數進行修改,即是App_OS_IdleTaskHook()函數


void  OS_IdleTask (void  *p_arg)

{

    CPU_SR_ALLOC();

 

    (void)&p_arg;    /* Prevent compiler warning for not using 'p_arg'         */

 

    while (DEF_ON) 

    {

        CPU_CRITICAL_ENTER();

        OSIdleTaskCtr++;

 

#if OS_CFG_STAT_TASK_EN > 0u

        OSStatTaskCtr++;

#endif

 

        CPU_CRITICAL_EXIT();

 

        OSIdleTaskHook();/* Call user definable HOOK                            */

    }

}

    2.2、以鉤子函數OSIdleTaskHook()為例,講解一下鉤子函數的使用方法,實驗要求如下:


    當空閑任務每執行50000就通過串口打印字符串“Idle Task Running 50000 times!”


void  App_OS_IdleTaskHook (void)

{

       static int num;

       num++;

       if(num%50000==0)

       {

              printf("Idle Task Running 50000 times!rn");

       }

}

 

關鍵字:UCOSIII  系統任務  鉤子函數 引用地址:UCOSIII的5個系統任務及鉤子函數編寫

上一篇:UCOSIII中斷和時間管理
下一篇:UCOSIII時間片輪轉調度器

推薦閱讀

行業先驅未必都能成為引領者,但在互聯網電視領域,樂視卻具有這樣的雙重身份。在新興領域,引領者狀態的變化往往能夠帶來相應的多米諾效應,去年的“生態危機”不僅讓超級電視暫遠江湖,也使互聯網電視集體陷入頹勢。不過,從今年的414樂迷節來看,超級電視再次用高“體價比”宣告了對互聯網電視戰場的“回歸”,其品牌主體新樂視智家也在近期擬增資30億...
/* 初始化函數 */void SPI_FLASH_Init(void){ SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_HIGH, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT, 0x07); SPI_Cmd(ENABLE); GPIO_Init(SPI_CS , SPI_Pin_CS, GPIO_MODE_OU...
開發板獨立按鍵模塊電路圖如下:目的:通過控制獨立按鍵K1,使第一盞led發光/關閉P3口位準雙向io口,當K1按下時,P3^1口接地,電平為0。當K1按下時,由于獨立鍵盤的物理特性以及按下過程等因素的干擾,P3^1口電平變化與理想情況并不相符,出現“抖動”現象,如下圖所示:為消除按下抖動造成的影響,在led狀態改變之前,加入延時函數,判斷獨立按鍵K1是否真...
蘋果今天向公測人員發布了 iOS 和 iPadOS 14.6 的第一個 Beta 版本,用于測試目的,新軟件是在 Beta 提供給開發者一天后發布的。在 iOS 設備上安裝了來自公測網站的適當證書后,報名參加蘋果公測計劃的公測人員可以通過 OTA 下載新軟件的?更新。如果你已經在使用 iOS 14.5 的 RC 版本,蘋果已經增加了一個新的功能,讓你可以很容易地選...

史海拾趣

問答坊 | AI 解惑

龍芯中文資料

龍芯資料中文手冊! 看看國產IP核心,比價和arm的優缺點!支持國貨!好久沒上來了,看到大家的回復決定把售價改了!半買半送! [ 本帖最后由 tashanshi 于 2009-4-15 14:57 編輯 ]…

查看全部問答∨

《HT48Rxx I/O 型MCU在家庭防盜系統中的應用》

作  者: 吳孔松 編著    出 版 社: 北京航空航天大學出版社 出版時間: 2008-6-1 版  次: 1 頁  數: 321 開  本: 16開 內容簡介 本書以家庭防盜系統為主線,以Holtek公司的HT48R系列單片機為輔線,重點介紹HT48R系列的基 ...…

查看全部問答∨

這個電路能否理解成差分放大器?

一端輸入始終為零,一端輸入信號,那把它看成個雙端輸入的放大器行不行啊? …

查看全部問答∨

內存條能帶毒嗎?

為什么我加了個512的內存條之后,關機界面變了?…

查看全部問答∨

eboot.nb0大小問題

我正在學習bootloader, 想自己改寫個eboot試試。 可是生成的eboot.nb0大小為256k,實驗箱原來的是88k。 256k的可以燒進去但是啟動后沒有反應, 誰知道為什么寫進去了,卻沒反應么? …

查看全部問答∨

WinCE自帶數據庫應用問題

以下是自己寫的一段小程序,運行的時候總是不能進入到switch語句的分支內,即不會有Refreshing11!的提示。數據庫內已經存入數據,只是想在一個ClistCtrl控件中顯示其數據。 請問問題出在什么地方? void CTCPClientDlg::RefreshDB() {  & ...…

查看全部問答∨

招聘機頂盒軟件、硬件、系統等等相關職位(北京)

聯系我: lulu Tel: 01067100060 ext 601 Mobile: 15011402198 MSN: lulucai27@hotmail.com …

查看全部問答∨

stm8冷啟動和熱啟動的判斷

                                 熱啟動的時候想保持一個變量不變,但是又不能存在eeprom和FALSH中怎么辦啊?…

查看全部問答∨

PSoC4 Cortex-M0開發板不是今天公布嗎

怎么還沒有消息啊,今天不是5號嗎????…

查看全部問答∨

AGM1微動能發電模塊

AGM1微動能發電模塊 概述AGM1是一款具有超高性價比的微動能發電模塊。AGM1通過捕獲機械能,改變磁場磁通量,產生感應電流從而把機械能轉化為電能,為低功耗的無線發射模塊供電。配合我司的超低功耗無線發射模塊AGTX1,可以輕松構建無源無線發射模 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 尤溪县| 北宁市| 旌德县| 呈贡县| 忻城县| 新巴尔虎右旗| 永新县| 马山县| 天镇县| 泾源县| 武胜县| 和平区| 霞浦县| 张家界市| 三河市| 宁国市| 高青县| 新龙县| 历史| 岑溪市| 离岛区| 太仓市| 阳泉市| 闻喜县| 泽州县| 余干县| 奉节县| 贡山| 友谊县| 汤阴县| 衡山县| 马山县| 开封县| 定南县| 舞钢市| 兴山县| 炎陵县| 抚远县| 天峻县| 东丰县| 兴安盟|