找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9367|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

ucosii中的systick和OSTimeDly

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51024 發(fā)表于 2014-8-10 12:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    OSTimeDly(x)函數(shù)和SYSTick系統(tǒng)時鐘,這兩個為整個系統(tǒng)的關(guān)鍵點,同時也是我開始學習uC/OS-ii到現(xiàn)在碰到的最難理解的問題,可能是一直都處于裸機奔跑狀態(tài),對OS還是感覺到很陌生,一時間很難去接收這樣一個非常偉大的東西。

    首先是systick的介紹,systick為系統(tǒng)時鐘,作為uC/OS-ii的嘀嗒時鐘,也許有人會問什么是嘀嗒時鐘?就是這個時鐘不會停止,一直在運行,它好像是uC/OS-ii的心臟一樣,保證它不會死掉,可能又有人問,一般的單片機不是有時鐘嘛,代碼一樣在運行,為什么要要這么個玩意---嘀嗒時鐘!我開始學習uC/OS-ii的時候也是這種感覺,當時沒有人去講解,自己不停的在那里想,看書啥的,后來通過寫一個2個任務(wù)的代碼就明白了這個嘀嗒時鐘的重要性,如果系統(tǒng)中移植了OS,那么就得把OS和用戶應(yīng)用程序代碼(也就是任務(wù))作為2個部分看待,所以我們可以看作系統(tǒng)需要兩個時鐘,我是這么理解的,具體是怎么樣的,在以后的博文中會細細說來!
    假如我們將systick設(shè)置為10ms(根據(jù)處理器的clock而定),也就是每10ms的時候會進入systick中斷,systick這個功能可由一般的定時器取代,在這個中斷服務(wù)程序中會執(zhí)行OSTimeTick和OSIntExit兩個函數(shù)(可能結(jié)合源代碼看)。
    在介紹這兩個函數(shù)之前需要先對OSTimeDly(x)進行相應(yīng)的說明,OSTimeDly(x)為系統(tǒng)延時,假如在某個任務(wù)中對其進行調(diào)用,表示這個任務(wù)已經(jīng)由運行狀態(tài)轉(zhuǎn)換到等待狀態(tài)了(任務(wù)比較常規(guī)的狀態(tài)為等待、就緒和運行這3個,另外2個:休眠和中斷相對那3個狀態(tài)而言顯得就不是這么突出了),并且會做一次任務(wù)調(diào)度(什么是調(diào)度?不用糾結(jié)很多,就是把處于就緒態(tài)的任務(wù)通過某一算法轉(zhuǎn)移到運行態(tài)),使就緒態(tài)中(所有的任務(wù)通過OSTaskCreate()函數(shù)使其處于就緒狀態(tài))最高優(yōu)先級的任務(wù)處于運行狀態(tài),同時會將該任務(wù)TCB中的OSTCBDly參數(shù)設(shè)置為x(注意是全局變量),系統(tǒng)任務(wù)的狀態(tài)轉(zhuǎn)移如下圖1所示,這個轉(zhuǎn)移圖非常重要,如果還沒有意識到它的重要性,那么表示看書看的還不夠,還得繼續(xù):


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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表