VxWorks信號(hào)中斷和定時(shí)_第1頁(yè)
VxWorks信號(hào)中斷和定時(shí)_第2頁(yè)
VxWorks信號(hào)中斷和定時(shí)_第3頁(yè)
VxWorks信號(hào)中斷和定時(shí)_第4頁(yè)
VxWorks信號(hào)中斷和定時(shí)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VxWorks應(yīng)用設(shè)計(jì)中科信軟培訓(xùn)中心六、VxWorks中斷和定時(shí)器6.1中斷設(shè)備向CPU發(fā)送中斷,通知CPU發(fā)生了某些事件加載用戶自定義的程序,在中斷到達(dá)時(shí)執(zhí)行該程序中斷服務(wù)程序不是一個(gè)任務(wù)設(shè)備上的板上定時(shí)器是一個(gè)常見的中斷源,可以通過(guò)它來(lái)理解中斷

中斷處理舉例

中斷向量表handler中斷號(hào)硬件中斷↗ISR包裝代碼Handler:SaveregistercallroutineRestoreregisterRET↗用戶ISRmyISR(){…}↗

設(shè)置中斷處理程序VxWorks提供函數(shù)intConnect(),它允許將指定的C函數(shù)與任意中斷相聯(lián)系STATUSintConnect(){VOIDFUNCPTR*vector;/*要聯(lián)系的中斷向量*/VOIDFUNCPTR*routine;/*中斷發(fā)生時(shí)要調(diào)用的函數(shù)*/intparameter;/*傳遞給中斷處理函數(shù)的參數(shù)*/}該函數(shù)將指定的C函數(shù)與指定的中斷向量相聯(lián)系,函數(shù)的地址存放在這個(gè)中斷向量中。當(dāng)發(fā)生中斷時(shí),系統(tǒng)調(diào)用該函數(shù)。

中斷堆棧大多數(shù)體系結(jié)構(gòu)的CPU的ISR使用相同的中斷堆棧中斷堆棧在系統(tǒng)啟動(dòng)時(shí)分配堆棧大小由宏ISR_STACK_SIZE控制,默認(rèn)值在configAll.h中定義堆棧必須足夠大,以保證能夠處理系統(tǒng)最壞情況下的中斷嵌套ISR沒有任務(wù)控制塊(TCB),并且所有的ISR共享一個(gè)堆棧

VxWorks中斷處理流程保存CPU寄存器從中斷控制器讀中斷向量號(hào)順序調(diào)用該中斷服務(wù)程序通知中斷控制器中斷服務(wù)程序結(jié)束恢復(fù)CPU寄存器返回

中斷和優(yōu)先級(jí)

ISR的使用限制ISR執(zhí)行完成之前,其它任務(wù)不能執(zhí)行ISR中不能調(diào)用某些VxWorks函數(shù),尤其是,ISR不能被阻塞–不能調(diào)用semTake()–不能調(diào)用malloc(),free()–不能調(diào)用I/O系統(tǒng)函數(shù)(如printf())–不能調(diào)用使用浮點(diǎn)協(xié)處理器的程序非法指令或總線錯(cuò)導(dǎo)致硬件異常時(shí),該任務(wù)被掛起,其他任務(wù)繼續(xù)執(zhí)行如果ISR沒有context被掛起,vxworks將在低端內(nèi)存保存對(duì)異常的描述,并重啟系統(tǒng)

如何使用ISR保持ISR盡量短,因?yàn)镮SR–會(huì)延遲低或相同優(yōu)先級(jí)的中斷–延遲所有的任務(wù)–調(diào)試起來(lái)比較困難避免在ISR中使用浮點(diǎn)指針操作盡量將有些工作放到任務(wù)中去完成–持續(xù)時(shí)間長(zhǎng)的工作–不是非常重要的工作

中斷與任務(wù)間的通信共享存儲(chǔ)器和環(huán)緩沖區(qū)–ISR與任務(wù)共享變量、存儲(chǔ)器和環(huán)緩沖區(qū)信號(hào)量–ISR釋放信號(hào)量,任務(wù)等待接收信號(hào)量消息隊(duì)列–ISR發(fā)送消息,任務(wù)等待接收消息,如果消息隊(duì)列滿,該消息被丟棄管道–ISR向管道寫消息,任務(wù)讀消息

調(diào)試中斷中斷處理程序可以調(diào)用logMsg()向系統(tǒng)輸出診斷信息logMsg(“foo=%d\n”,foo,2,3,4,5,6)向tLogTask發(fā)送請(qǐng)求為我們實(shí)現(xiàn)printf()的功能和printf()相似,但必須注意–參數(shù)必須為4字節(jié)–函數(shù)有6個(gè)入口參數(shù)使用具有系統(tǒng)級(jí)調(diào)試的機(jī)制進(jìn)行調(diào)試–WDBAgent–emulator6.2定時(shí)器系統(tǒng)時(shí)鐘中斷服務(wù)程序看門狗定時(shí)器輔助時(shí)鐘定時(shí)器板上的定時(shí)器會(huì)周期性地中斷CPU定時(shí)器使得用戶自定義的程序可以周期性地執(zhí)行,這對(duì)下列情況非常有用–輪詢硬件–檢查系統(tǒng)錯(cuò)誤VxWorks提供對(duì)兩種定時(shí)器的相同的接口–系統(tǒng)時(shí)鐘–輔助時(shí)鐘

系統(tǒng)時(shí)鐘系統(tǒng)時(shí)鐘完成下列工作–增加ticks計(jì)數(shù)(使用tickGet()獲得計(jì)數(shù)值)–更新延時(shí)和超時(shí)計(jì)數(shù)器–檢查循環(huán)調(diào)度默認(rèn)的時(shí)鐘頻率是60HzsysClkRateSet()設(shè)置時(shí)鐘頻率sysClkRateGet()獲得時(shí)鐘頻率sysClkRateSet()通常在系統(tǒng)啟動(dòng)時(shí)進(jìn)行設(shè)置(VxSim方式下可以隨時(shí)設(shè)置)輔助時(shí)鐘相關(guān)函數(shù)sysAuxClkConnect()sysAuxClkRateGet()sysAuxClkRateSet()sysAuxClkEnable()sysAuxClkDisable()

看門狗定時(shí)器系統(tǒng)時(shí)鐘的一個(gè)用戶接口能夠使C程序在一個(gè)給定延時(shí)后開始執(zhí)行一旦延時(shí)超時(shí),指定的程序開始執(zhí)行作為系統(tǒng)ISR的一部分,要遵守ISR的編程要求

創(chuàng)建看門狗定時(shí)器創(chuàng)建一個(gè)看門狗定時(shí)器–WDOG_IDwdCreate()–返回wotchdogid或NULL或ERROR啟動(dòng)(或重啟)一個(gè)看門狗定時(shí)器STATUSwdStart(wdId,delay,pRoutine,parameter)wdId由wdCreate返回的watchdogIddelay要延時(shí)的tickspRoutine當(dāng)延時(shí)超時(shí)時(shí),要調(diào)用的程序parameter傳遞給程序的參數(shù)wdStart()可以在超時(shí)時(shí)運(yùn)行看門狗程序,要想周期性執(zhí)行,看門狗程序必須調(diào)用wdStart()自己重新啟動(dòng)

使用看門狗定時(shí)器使用看門狗定時(shí)器可以使一段程序周期性地執(zhí)行wdId=wdCreate();wdStart(wdId,DELAY_PERIOD,myWdIsr,0);voidmyWdIsr(param){doit(param);wdStart(wdId,DELAY_PERIOD,myWdIsr,0);}doit程序可以–輪詢某些硬件設(shè)備–解鎖某些任務(wù)–檢查系統(tǒng)是否出現(xiàn)錯(cuò)誤

停止看門狗定時(shí)器要取消原來(lái)已經(jīng)啟動(dòng)的看門狗定時(shí)器STATUSwdCancel(wdId)要?jiǎng)h除一個(gè)看門狗定時(shí)器(并取消原先啟動(dòng)的定時(shí)器)STATUSwdDelete(wdId)輪詢的實(shí)現(xiàn)任務(wù)級(jí)輪詢的實(shí)現(xiàn)

taskD

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論