久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

ucosii中的systick和OSTimeDly

作者:lskybs   來源:lskybs   點擊數:  更新時間:2014年07月29日   【字體:

    OSTimeDly(x)函數和SYSTick系統時鐘,這兩個為整個系統的關鍵點,同時也是我開始學習uC/OS-ii到現在碰到的最難理解的問題,可能是一直都處于裸機奔跑狀態,對OS還是感覺到很陌生,一時間很難去接收這樣一個非常偉大的東西。

 

    首先是systick的介紹,systick為系統時鐘,作為uC/OS-ii的嘀嗒時鐘,也許有人會問什么是嘀嗒時鐘?就是這個時鐘不會停止,一直在運行,它好像是uC/OS-ii的心臟一樣,保證它不會死掉,可能又有人問,一般的單片機不是有時鐘嘛,代碼一樣在運行,為什么要要這么個玩意---嘀嗒時鐘!我開始學習uC/OS-ii的時候也是這種感覺,當時沒有人去講解,自己不停的在那里想,看書啥的,后來通過寫一個2個任務的代碼就明白了這個嘀嗒時鐘的重要性,如果系統中移植了OS,那么就得把OS和用戶應用程序代碼(也就是任務)作為2個部分看待,所以我們可以看作系統需要兩個時鐘,我是這么理解的,具體是怎么樣的,在以后的博文中會細細說來!

    假如我們將systick設置為10ms(根據處理器的clock而定),也就是每10ms的時候會進入systick中斷,systick這個功能可由一般的定時器取代,在這個中斷服務程序中會執行OSTimeTick和OSIntExit兩個函數(可能結合源代碼看)。

    在介紹這兩個函數之前需要先對OSTimeDly(x)進行相應的說明,OSTimeDly(x)為系統延時,假如在某個任務中對其進行調用,表示這個任務已經由運行狀態轉換到等待狀態了(任務比較常規的狀態為等待、就緒和運行這3個,另外2個:休眠和中斷相對那3個狀態而言顯得就不是這么突出了),并且會做一次任務調度(什么是調度?不用糾結很多,就是把處于就緒態的任務通過某一算法轉移到運行態),使就緒態中(所有的任務通過OSTaskCreate()函數使其處于就緒狀態)最高優先級的任務處于運行狀態,同時會將該任務TCB中的OSTCBDly參數設置為x(注意是全局變量),系統任務的狀態轉移如下圖1所示,這個轉移圖非常重要,如果還沒有意識到它的重要性,那么表示看書看的還不夠,還得繼續:



圖1:uC/OS-ii狀態轉移圖

前面提到了systick中斷服務程序中的兩個函數OSTimeTickOSIntExit,每次進入systick中斷都會在函數OSTimeTick中對OSTCBDly(OSTCBDly為任務調用OSTimeDly(x)函數中的x)進行減1操作,當這個值減到0的時候,uC/OS-ii會將該任務由等待狀態PUSH到就緒狀態(注意這里不是任務切換),OSIntExit函數會獲得就緒表中優先級較高的任務的prio值,并且判斷具有這個prio值的任務是不是當初那個被中斷了的任務,如果不是則需要獲得這個新任務的TCB指針并且執行中斷級的任務切換使其處于運行狀態,如果是當初那個給中斷了的任務,則需要繼續執行這個任務,不會進行任務切換。

關閉窗口

相關文章

主站蜘蛛池模板: 欧美精品在线观看 | 九九综合九九 | 亚洲欧美精品在线观看 | 国产精品久久久久久久久久久久 | 一区二区三区国产在线观看 | 狠狠色综合欧美激情 | 91免费观看 | 日韩精品 电影一区 亚洲 | 国产伦精品一区二区三区照片91 | 久久久精品在线 | 毛片1| 久久久久国产 | 91精品国产92 | 免费99精品国产自在在线 | 久久一区二区精品 | 日韩三级 | 麻豆视频在线免费观看 | 在线观看电影av | 天天综合网天天综合色 | 日韩精品久久一区二区三区 | 国产一区欧美 | 成人国产一区二区三区精品麻豆 | 免费国产成人av | 国产人成精品一区二区三 | 亚洲欧美中文日韩在线 | 欧美一级二级视频 | 国产黄视频在线播放 | av黄色网| 国产精品成人一区二区三区 | 日韩av第一页 | 91精品午夜窝窝看片 | 91精品国产乱码久久久久久久久 | 日本精品久久久久 | 欧美在线小视频 | 免费成人高清在线视频 | 91视视频在线观看入口直接观看 | 中文字幕一区在线观看视频 | 久久岛国| 国产一级一级 | 午夜私人影院在线观看 | 久久精品二区亚洲w码 |