版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第5章中斷服務(wù)程序設(shè)計(jì),中斷服務(wù)程序(ISR)是嵌入式應(yīng)用系統(tǒng)獲取各種事件的基本手段,而“事件”是實(shí)時(shí)性問 題的討論基礎(chǔ)和時(shí)間計(jì)算的起點(diǎn)。ISR的設(shè)計(jì)質(zhì)量直接影響到系統(tǒng)的實(shí)時(shí)性指標(biāo)和操作系統(tǒng)的工作效率。,5.1 中斷優(yōu)先級安排,為不同的中斷服務(wù)程序安排不同的優(yōu)先級,在允許中斷嵌套的情況下,最高優(yōu)先級的中斷總是能夠得到及時(shí)響應(yīng)。,5.1.1 中斷的優(yōu)先級資源,中斷的優(yōu)先級資源就是CPU的中斷系統(tǒng)。以ARM7體系的CPU為例,最多可以有32個(gè)中斷資源。 每個(gè)具體的中斷源可以將其設(shè)定為FIQ,使其具有最高優(yōu)先級,但FIQ最好是分配給唯一的中斷源,否則就失去意義;也可以設(shè)定為向量IRQ,使其具有中等優(yōu)
2、先級,但向量IRQ的總數(shù)不能超過16個(gè),這些中斷源優(yōu)先級的高低按向量編號從0(最高)到15(最低)排序;如果中斷源的個(gè)數(shù)超過17個(gè),則剩余的中斷源只能設(shè)定為非向量IRQ,其優(yōu)先級最低。操作系統(tǒng)本身必須使用一個(gè)定時(shí)器中斷源來作為系統(tǒng)節(jié)拍中斷,它是操作系統(tǒng)工作的基礎(chǔ)。,只要沒有關(guān)閉中斷,中斷服務(wù)程序可以中斷任何任務(wù)的運(yùn)行,故可以將中斷服務(wù)程序看成比最高優(yōu)先級(0級)的任務(wù)還要優(yōu)先的“任務(wù)”。,5.1.2 中斷優(yōu)先級安排原則,中斷源是系統(tǒng)及時(shí)獲取異步事件的主要手段,其優(yōu)先級安排原則如下: 緊迫性:觸發(fā)中斷的事件允許耽誤的時(shí)間越短,設(shè)定的中斷優(yōu)先級就越高。例如脈沖峰值數(shù)據(jù)采樣時(shí)耽誤的時(shí)間越短,采樣結(jié)果
3、就越真實(shí)。緊迫性為最高原則。 關(guān)鍵性:觸發(fā)中斷的事件越關(guān)鍵(重要),設(shè)定的中斷優(yōu)先級就越高。 頻繁性:觸發(fā)中斷的事件發(fā)生越頻繁,設(shè)定的中斷優(yōu)先級就越高。頻繁事件的間隔時(shí)間比較短,如不及時(shí)處理有可能遺漏。,快捷性:在前三項(xiàng)條件相近時(shí),ISR處理越快捷(耗時(shí)短),設(shè)定的中斷優(yōu)先級就越高。在發(fā)生中斷嵌套時(shí),耗時(shí)短的ISR嵌套在耗時(shí)長的ISR里時(shí)對耗時(shí)長的ISR的完成時(shí)間影響不明顯,而耗時(shí)長的ISR嵌套在耗時(shí)短的ISR里時(shí)對耗時(shí)短的ISR的完成時(shí)間影響很明顯。 中斷服務(wù)程序的功能應(yīng)該盡量簡單,只要將獲取的異步事件通信給關(guān)聯(lián)任務(wù)即可,后續(xù)處理交由關(guān)聯(lián)任務(wù)完成。,5.2 不受操作系統(tǒng)管理的中斷服務(wù)程序,在
4、正常情況下,ISR應(yīng)該接受操作系統(tǒng)的管理,因?yàn)楹芏嗳蝿?wù)是靠ISR觸發(fā)的。但在兩種情況下ISR不受操作系統(tǒng)管理:一種情況是沒有必要;另一種情況是操作系統(tǒng)根本就沒有對該ISR進(jìn)行管理。,某些控制系統(tǒng)需要在掉電時(shí)將各種現(xiàn)場動態(tài)數(shù)據(jù)保存起來,以便下次上電時(shí)恢復(fù)原樣。在這類系統(tǒng)中配備了掉電檢測單元,在電源電壓開始下降時(shí)及時(shí)觸發(fā)掉電中斷(配備最高優(yōu)先 級),在掉電ISR中將各種現(xiàn)場動態(tài)數(shù)據(jù)保存起來,然后使系統(tǒng)進(jìn)入掉電狀態(tài),只有再次復(fù)位時(shí)系統(tǒng)才能開始重新運(yùn)行。由于掉電ISR運(yùn)行之后系統(tǒng)不再運(yùn)行任何程序,故掉電ISR沒有必要受操作系統(tǒng)管理。,實(shí)時(shí)操作系統(tǒng)c/os - II移植到ARM7體系的CPU上時(shí),沒有對
5、FIQ進(jìn)行處理,即 FIQ是不受操作系統(tǒng)管理的。選用FIQ來響應(yīng)實(shí)時(shí)性要求最高的高速采樣操作是一個(gè)有效措施,保護(hù)現(xiàn)場的工作量很小(FIQ專有的8個(gè)寄存器不需要保護(hù))。在工程模板的系統(tǒng)啟動文件Startups中,已經(jīng)把匯編代碼部分處理好了。用戶只需要用C語言編寫快速中斷服務(wù)函數(shù)FIQ_Exception()即可,不需要考慮保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場的問題。,由于沒有操作系統(tǒng)介入,F(xiàn)IQ的lSR無法與關(guān)聯(lián)任務(wù)進(jìn)行通信,所獲取的信息不能及時(shí)得到關(guān)聯(lián)任務(wù)的處理,故只能以原始形式保存在一個(gè)緩沖區(qū)內(nèi),等待以后進(jìn)行離線處理。其典型的例子是高速數(shù)據(jù)采集系統(tǒng)。,5.3 受操作系統(tǒng)管理的中斷服務(wù)程序,實(shí)時(shí)操作系統(tǒng)/C/O
6、S - II移植到ARM7體系的CPU上時(shí),對IRQ進(jìn)行了管理,其ISR代碼的編寫必須遵循一定的規(guī)則。,5. 3.1 中斷服務(wù)程序的結(jié)構(gòu),受實(shí)時(shí)操作系統(tǒng)管理的ISR與不受實(shí)時(shí)操作系統(tǒng)管理的ISR有很大區(qū)別,體現(xiàn)在以下3個(gè)時(shí)段。 (1)進(jìn)入中斷:除了保護(hù)現(xiàn)場外,還需要調(diào)用“進(jìn)入中斷”服務(wù)函數(shù),用來通知實(shí)時(shí)操作系統(tǒng),使實(shí)時(shí)操作系統(tǒng)掌握當(dāng)前中斷的嵌套深度。 (2)運(yùn)行功能代碼:在這部分代碼中,除了完成本ISR的實(shí)質(zhì)功能的代碼外,還包含了對系統(tǒng)通信服務(wù)函數(shù)的調(diào)用,實(shí)現(xiàn)與其他任務(wù)進(jìn)行通信的功能。正是這種通信功能,使關(guān)聯(lián)任務(wù)得到同步信號或數(shù)據(jù),從而進(jìn)入就緒狀態(tài)。但在ISR中不允許調(diào)用延時(shí)函數(shù)和可能被掛起的
7、系統(tǒng)服務(wù)函數(shù)。,(3)退出中斷:必須執(zhí)行實(shí)時(shí)操作系統(tǒng)規(guī)定的“退出中斷”流程。首先根據(jù)中斷嵌套深度判斷被本次中斷所中斷的代碼是“任務(wù)級”還是“中斷級”,如果是“中斷級”,則返回被中斷的較低級的ISR;如果被中斷的代碼是“任務(wù)級”且不允許進(jìn)行任務(wù)調(diào)度,則返回被中斷的任務(wù)。,如果允許進(jìn)行任務(wù)調(diào)度,且出現(xiàn)了比被中斷的任務(wù)的優(yōu)先級更高的就緒任務(wù),便進(jìn)行任務(wù)切換;否則還是返回被中斷的任務(wù)。在中斷返回時(shí),如果沒有進(jìn)行任務(wù)切換,則恢復(fù)中斷進(jìn)入時(shí)保護(hù)的現(xiàn)場;如果進(jìn)行了任務(wù)切換,則現(xiàn)場被恢復(fù)成切換后的任務(wù)的現(xiàn)場(即這個(gè)任務(wù)在被掛起時(shí)的現(xiàn)場)。,受實(shí)時(shí)操作系統(tǒng)管理的ISR具有相同的結(jié)構(gòu),其進(jìn)入中斷和退出中斷的處理流
8、程完全相同,且與具體的CPU結(jié)構(gòu)有關(guān)。作為實(shí)時(shí)操作系統(tǒng)的用戶,如果要編寫全部ISR代碼,勢必觸動實(shí)時(shí)操作系統(tǒng)的內(nèi)核,這是非常危險(xiǎn)的。 為此,必須將ISR中與具體功能無關(guān)的代碼剝離出來,作為實(shí)時(shí)操作系統(tǒng)內(nèi)核的一部分,提供給實(shí)時(shí)操作系統(tǒng)的用戶。實(shí)時(shí)操作系統(tǒng)C/OS - 移植到ARM7體系的CPU上時(shí),這部分代碼用一個(gè)匯編宏實(shí)現(xiàn)(移植文件IRQ. inc),并提供C語言接口,用戶只需要用C語言編寫ISR的功能代碼部分即可。,5.3.2中斷句柄,為了使用ISR的匯編宏,每個(gè)受操作系統(tǒng)管理的ISR都必須按匯編宏要求的格式,在文件IRQ.S的尾部添加中斷句柄: XXXX_Handler HANDLER X
9、XXX_Excetion 其中: XXXX_Handler是ISR的起始地址,即匯編宏的起始地址,在初始化向量中斷控制器時(shí)作為中斷向量地址使用。用戶按實(shí)際中斷源來命名,即把其中的xxxx換為具體的中斷源名稱。,HANDLER是句柄關(guān)鍵詞,必須大寫,不能有錯(cuò)。 XXXX_Exception是用戶用C語言編寫的功能函數(shù)名,該函數(shù)供匯編宏調(diào)用。用戶可按實(shí)際中斷源來命名,即把其中的xxxx換為具體的中斷源名稱。 例如,我們要使用定時(shí)器1作為一個(gè)中斷源,用來控制某個(gè)周期性操作,則需要在文件IRQ.S的尾部添加如下中斷句柄: Timer1_Handler HANDLER Timer1_Exception,
10、5.3.3 配置和初始化中斷源,在一個(gè)中斷源開始工作之前,需要配置和初始化中斷源,使它接預(yù)定的參數(shù)和方式工作。這部分工作通常在系統(tǒng)上電硬件初始化時(shí)完成,也可以在某個(gè)任務(wù)運(yùn)行中完成。 中斷源工作參數(shù)配置:每個(gè)中斷源都有不同的工作參數(shù),必須在該中斷源開始工作之前按實(shí)際需要配置好。以定時(shí)器1中斷為例,讓定時(shí)器1產(chǎn)生周期為1 ms的中斷的參數(shù)配置如程序清單L5-4所示。,程序清單L5-4 配置中斷源定時(shí)器1,T1IR=0 xffffffff; /復(fù)位中斷源 T1TC =0 x00; /初始化定時(shí)計(jì)數(shù)器1 T1PR=0 x0; /設(shè)置定時(shí)器1的分頻器(不分頻) T1TCR=0 x01; /使能定時(shí)/計(jì)數(shù)
11、器1 T1MCR = 0 x03; /匹配時(shí)產(chǎn)生中斷并復(fù)位定時(shí)/計(jì)數(shù)器 T1MR0= (Fpclk1000); /匹配值為1ms,向量中斷控制器配置:為了使中斷信號和對應(yīng)的ISR聯(lián)系起來,還必須對向量中斷控制器進(jìn)行配置。對于通道號為X的中斷源xxxx,如果配置中斷優(yōu)先級為Y,則需要在向量中斷控制器的初始化函數(shù)里添加如程序清單L5-5所示代碼。,程序清單L5-5 配置向量中斷控制器,extern void XXXX_Handler(void);/聲明中斷源xxxx的中斷服務(wù)函數(shù)ISR VICVecAddrrY= (INT32U)XXXX_Handler; /將ISR入口地址填入向量寄存器Y VI
12、CVectCntlY =(0 x20 | x);/向量中斷方式,通道號為X,在運(yùn)行過程中,隨時(shí)可用如程序清單L5-6所示代碼來啟動和關(guān)閉通道號為X的中斷源。 程序清單L5-6 控制中斷源的工作 VICIntEnable=1X; /使能中斷源X產(chǎn)生中斷 VIClntEnClr=1x; /禁止中斷源x產(chǎn)生中斷,以定時(shí)器1(通道號x=5)中斷為例,配置優(yōu)先級Y=2時(shí)需要將如程序清單L5-7所示代碼加入向量中斷控制器的初始化函數(shù)里。 程序清單L5-7 為定時(shí)器1配置向量中斷控制器 extern void Timer1_Handler(void); /聲明定時(shí)器1的中斷服務(wù)函數(shù)(ISR) VICVect
13、Addr2=(INT32U)Timerl_Handler; /將ISR入口地址填入向量寄存器2 VICVectCntl2 = (0 x20 | 0 x05); /向量中斷方式,中斷源為定時(shí)器1,在運(yùn)行過程中,隨時(shí)可用如程序清單L5-8所示代碼來啟動和關(guān)閉定時(shí)器1的中斷源: 程序清單L5-8 控制定時(shí)器1的中斷 VICInrEnable =15;/使能定時(shí)器1產(chǎn)生中斷 VICIntEnClr =15;/禁止定時(shí)器1產(chǎn)生中斷,5.3.4 設(shè)計(jì)與關(guān)聯(lián)任務(wù)的通信手段,ISR的主要功能是響應(yīng)異步事件,該異步事件將觸發(fā)一系列操作。ISR設(shè)計(jì)的基本原則是盡可能簡短,以便其他異步事件也能夠得到及時(shí)響應(yīng)。 異步
14、事件包含數(shù)據(jù)信息時(shí)就需要進(jìn)行數(shù)據(jù)采集(如A/D轉(zhuǎn)換),在ISR中進(jìn)行數(shù)據(jù)采集可以獲得最好的數(shù)據(jù)質(zhì)量(及時(shí)并準(zhǔn)確),但增加了ISR的負(fù)擔(dān),使ISR代碼加長。在關(guān)聯(lián)任務(wù) 中進(jìn)行數(shù)據(jù)采集時(shí),可以最大限度地減輕ISR的負(fù)擔(dān),簡化ISR的代碼,但也有可能影響數(shù)據(jù) 采集的質(zhì)量(采集時(shí)刻有一些延誤)。,ISR與關(guān)聯(lián)任務(wù)的通信方式有兩種基本類型:信號(信號量)型和數(shù)據(jù)(消息)型。當(dāng)使用信號量進(jìn)行通信時(shí),ISR只完成發(fā)送信號量的工作,表示事件已經(jīng)發(fā)生,通過信號量的同步功能觸發(fā)關(guān)聯(lián)任務(wù),所有具體工作均由關(guān)聯(lián)任務(wù)完成;當(dāng)使用數(shù)據(jù)進(jìn)行通信時(shí),ISR需要完成對異步事件的信息采集工作,然后使用消息郵箱(或消息隊(duì)列)將數(shù)據(jù)
15、發(fā)送給關(guān)聯(lián)任務(wù),由關(guān)聯(lián)任務(wù)完成后續(xù)數(shù)據(jù)處理工作。,到底使用哪種方式,需要根據(jù)實(shí)際情況來決定。 觸發(fā)ISR的事件不包含數(shù)據(jù):不需要對事件進(jìn)行信息采集(如A/D轉(zhuǎn)換)。例如報(bào)警信號觸發(fā)了外部中斷,該ISR只需要觸發(fā)關(guān)聯(lián)任務(wù)即可,后續(xù)各項(xiàng)操作由各個(gè)關(guān)聯(lián)任務(wù)完成。在這種情況下,ISR使用信號量與關(guān)聯(lián)任務(wù)進(jìn)行通信。 觸發(fā)ISR的事件是包含數(shù)據(jù)的低頻事件:將數(shù)據(jù)采集的工作放在關(guān)聯(lián)任務(wù)中完成,產(chǎn)生的時(shí)刻延誤與采樣周期相比可以忽略不計(jì),對采樣數(shù)據(jù)的質(zhì)量沒有什么影響。在這種情況下,ISR使用信號量與關(guān)聯(lián)任務(wù)進(jìn)行通信,從而簡化了ISR。一個(gè)示例如程序清單L5-10所示。,觸發(fā)ISR的事件是包含數(shù)據(jù)的中高頻事件:數(shù)
16、據(jù)采集的工作放在關(guān)聯(lián)任務(wù)中完成時(shí),產(chǎn)生的時(shí)刻延誤與采樣周期相比不能忽略不計(jì),對采樣數(shù)據(jù)的質(zhì)量有可察覺的影響。 在這種情況下,數(shù)據(jù)采集的工作應(yīng)該放在ISR中完成,由ISR使用消息郵箱與關(guān)聯(lián)任務(wù)進(jìn)行通信。關(guān)聯(lián)任務(wù)從消息郵箱中得到消息的數(shù)據(jù),并完成后續(xù)處理工作。一個(gè)示例如程序清單L5-11所示。,觸發(fā)ISR的事件是包含數(shù)據(jù)的非周期“高頻”事件:對于非周期“高頻”事件,其最短事件間隔可能小于一個(gè)事件數(shù)據(jù)處理的耗時(shí),如果使用消息郵箱進(jìn)行通信,就可能出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。 在這種情況下,數(shù)據(jù)采集的工作應(yīng)該放在ISR中完成,由ISR使用具有數(shù)據(jù)緩沖功能的消息隊(duì)列與關(guān)聯(lián)任務(wù)進(jìn)行通信。關(guān)聯(lián)任務(wù)從消息隊(duì)列中得到消息的
17、數(shù)據(jù),并完成后續(xù)處理工作。一個(gè)示例見第10章的程序清單L10-3。,5.3.5 編寫中斷服務(wù)程序的功能函數(shù),用戶中斷服務(wù)程序的C語言函數(shù)部分結(jié)構(gòu)如程序清單L5-9所示。 程序清單L5-9 ISR的C函數(shù)結(jié)構(gòu) void XXXX_Exception(void) /由匯編宏調(diào)用的c語言函數(shù) OS_ENTER_CRITICAL(); /關(guān)中斷 清除中斷源; 通知中斷控制器中斷結(jié)束; OS_EXIT_ CRITICAL(); /開中斷 用戶中斷處理代碼; ,在移植操作系統(tǒng)時(shí)編寫的匯編宏會加入到所有受管理的ISR中,因此,該匯編宏本身不能包含具體的中斷源信息,涉及具體中斷源的操作代碼必須由用戶完成,故用
18、戶編寫的C函數(shù)中除了功能代碼外,首先要完成“清除中斷源”和“通知中斷控制器中斷結(jié)束”的工作。這部分工作安排在臨界代碼端(不允許中斷嵌套),以保證順利完成。,當(dāng)執(zhí)行到“清除中斷源”時(shí),本次中斷已經(jīng)獲得響應(yīng),故應(yīng)該將中斷源清除;否則,ISR結(jié)束后有可能再次響應(yīng),造成一次事件多次響應(yīng)的后果。如果中斷源為外部電位信號,則必須配合硬件手段進(jìn)行清除。如果中斷源為芯片內(nèi)部某功能部件,則可通過相應(yīng)代碼進(jìn)行清除。以定時(shí)器1中斷為例,當(dāng)使用TIMR0進(jìn)行匹配中斷時(shí),代碼T1IR=0 x01就可以完成清除中斷 標(biāo)志的工作。,“通知中斷控制器中斷結(jié)束”由代碼VICVectAddr=0來完成。執(zhí)行這條代碼后,中斷控制器
19、開始準(zhǔn)備下一次的中斷工作。 “用戶中斷處理代碼”為ISR的功能代碼,內(nèi)容由用戶根據(jù)需要編寫,原則是盡可能簡潔、高效,不允許調(diào)用任何可能使自己“掛起”的系統(tǒng)服務(wù)函數(shù)。,下面的例子為一個(gè)采樣周期為10 ms的低速數(shù)據(jù)采集程序。采樣周期由定時(shí)器1來控制,使用信號量與采樣任務(wù)進(jìn)行通信,采樣操作在采樣任務(wù)中完成,采樣過程由按鍵啟動,采樣數(shù)據(jù)保存在全局?jǐn)?shù)組中。由于定時(shí)器1的中斷為IRQ,所以必須為其添加中斷句柄,并按程序清單L5-5對向量中斷控制器進(jìn)行配置。,低速采樣的程序流程圖如圖5-2所示,程序清單L5-10 低速采樣示例,# includeconfig. h #define KEY (120) /P
20、020為按鍵控制I/O # define TaskStk 100 /定義任務(wù)堆棧長度 OS_ STK TaskKeyStkTaskStk; /定義按鍵任務(wù)的堆棧 OS_STK TaskSampStkTaskstk; /定義采樣任務(wù)的堆棧 void TaskKey (void* pdata); /聲明按鍵任務(wù),因?yàn)檫@段代碼在主函數(shù)的后面 void TaskSamp (void *pdata); /聲明低速采樣任務(wù),因?yàn)檫@段代碼在按鍵任務(wù)函數(shù)的后面 OS_EVENT *Sem; /定義信號量指針 INT16U Samp200; /定義保存采樣結(jié)果的數(shù)組,void Show(INT16U*a,INT
21、16Un) /顯示波形函數(shù) INT16U i; GUI_ClearSCR(); /清屏 for(i=0;in;i+) /顯示波形 GUI_Point( i, 240 - ai * 240/3000, RED);/高度 240點(diǎn)相當(dāng)于 3000 mV ,int main (void) /將main()函數(shù)設(shè)置為整型是為了防止編譯警告 OSInit(); OSTaskCreate (TaskKey,(void* )0, Return 0; ,void TaskKey (void* pdata) /按鍵任務(wù) pdata = pdata; TargetInit(); /系統(tǒng)電路初始化 GUI_Init
22、ialize(); /初始化LCM(液晶屏 ) PINSELl=0 x00400000; /設(shè)置P0.27連接到AIN0 *進(jìn)行ADC模塊設(shè)置,其中xn表示第n位設(shè)置為x(若x超過一位,則向高位順延)*,ADCR=(10) | /SEL=l,選擇通道0 (Fpclk1000000-1)8) | /即轉(zhuǎn)換時(shí)鐘為1MHz (016) | /BURST=0 , 軟件控制轉(zhuǎn)換操作 (017) | /CLKS=0,使用11clock轉(zhuǎn)換 (121) | /PDN=1,正常工作模式(非掉電轉(zhuǎn)化模式) (022) | /TEST1:0=00,正常工作模式(非測試模式) (124) | /START=1,直接
23、啟動ADC轉(zhuǎn)換 (027); | /EDGE=0,引腳下降沿觸發(fā)轉(zhuǎn)換,T1IR= 0 xffffffff; /復(fù)位中斷源 T1TC=0 x00; /初始化定時(shí)器1 T1PR=0 x00; /設(shè)置定時(shí)器1的分頻器(不分頻) T1TCR=0 x01; /使能定時(shí)器1 T1MCR=0 x03; /匹配時(shí)產(chǎn)生中斷并復(fù)位定時(shí)器1 T1MR0=Fpclk/100; /定時(shí)時(shí)間為10ms,Sem=OSSemCreate(0); / 創(chuàng)建信號量 while(1) OSTimeDly (2); /延時(shí) if(IO0PINKEY)!=0)continue; /未按鍵,再延時(shí) else /按下按鍵 while(IO
24、0PIN /創(chuàng)建采樣任務(wù) ,void TaskSamp(void * pata) /低速采樣任務(wù) INT8U i,err; INT32U Temp; /臨時(shí)變量 pdata=pdata; VICIntEnable=15; /打開定時(shí)器1的中斷,開始采樣,for(i=0;i16); /保存采樣結(jié)果 VICIntEnClr=15 ; /禁止定時(shí)器1產(chǎn)生中斷 show(Samp,200); /顯示采樣信號的波形 OSTaskDel (OS_PRIO_SELF); /刪除自己 ,void Timer1_Exception(void) /T1中斷服務(wù)函數(shù) OS_ENTER_CRITICAL(); /關(guān)中
25、斷 TlIR= 0 x01; /清除中斷源 VICVetAddr=0; /通知中斷控制器中斷結(jié)束 OS_EXIT_CRITICAL(); /開中斷 OSSemPost(Sem); /發(fā)送信號量 ,下面的例子為一個(gè)采樣周期為200 s的中速數(shù)據(jù)采集程序,采樣周期由定時(shí)器1來控制,采樣操作在定時(shí)器1的ISR中完成,使用消息郵箱與采樣任務(wù)進(jìn)行通信,采樣過程由按鍵啟動,采樣數(shù)據(jù)保存在全局?jǐn)?shù)組中。由于定時(shí)器1的中斷為IRQ,所以必須為其添加中斷句柄,并按程序清單L5-5對向量中斷控制器進(jìn)行配置。中速采樣的程序流程圖如圖5 3所示,程序代碼如程序清單L5 -11所示。,# includeconfig.h
26、/文件config.h包含了includes.h和一些系統(tǒng) 配置文件 #define KEY (120) /PO20為按鍵控制I/O #define TaskStk 100 /定義任務(wù)堆棧長度 OS_STK TaskKeyStkTaskStk; /定義按鍵任務(wù)的堆棧 OS_STK TaskSampStkTaskStk; /定義采樣任務(wù)的堆棧 void TaskKey (void* pdata); /按鍵任務(wù) void TaskSamp (void *pdata); /中速采樣任務(wù) OS_EVENT * Mybox; / 定義消息郵箱指針 INT16U Samp200; /定義保存采樣結(jié)果的數(shù)組,void Show(INT16U *a,INT16U n) /顯示波形函數(shù) INTl6U i; GUI_ClearSCR(); /清屏 for(i=0,in; i+) /顯示波形 GUI_Point(i,240 -ai*240/3000,RED);高度240點(diǎn)相當(dāng)于 3000mV ,int_ main (void) . OSInit(); OSTaskCreate (TaskKey,(void*)O, ,void TaskKey(void* pdata) 按鍵
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度循環(huán)借款資產(chǎn)證券化合同3篇
- 二零二五版木工技術(shù)改造與升級合同4篇
- 2025版大學(xué)生家庭離婚協(xié)議范本:子女撫養(yǎng)權(quán)與財(cái)產(chǎn)分割方案4篇
- 二零二五年度專業(yè)代理開票協(xié)議書8篇
- 2025年度國際貿(mào)易結(jié)算票據(jù)質(zhì)押融資協(xié)議4篇
- 2025年中國百合加工行業(yè)市場深度分析及發(fā)展趨勢預(yù)測報(bào)告
- 2025年中國全麻包行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 2025年中國粗雜糧及粗雜糧加工市場競爭格局及未來投資前景預(yù)測報(bào)告
- 二零二五年度租賃汽車長租服務(wù)合同范本正規(guī)范本13篇
- 二零二五年度便利店加盟品牌使用權(quán)轉(zhuǎn)讓合同范本3篇 - 副本
- 湖北省黃石市陽新縣2024-2025學(xué)年八年級上學(xué)期數(shù)學(xué)期末考試題 含答案
- 硝化棉是天然纖維素硝化棉制造行業(yè)分析報(bào)告
- 央視網(wǎng)2025亞冬會營銷方案
- 《00541語言學(xué)概論》自考復(fù)習(xí)題庫(含答案)
- 《無砟軌道施工與組織》 課件 第十講雙塊式無砟軌道施工工藝
- 江蘇省南京市、鹽城市2023-2024學(xué)年高三上學(xué)期期末調(diào)研測試+英語+ 含答案
- 2024新版《藥品管理法》培訓(xùn)課件
- 《阻燃材料與技術(shù)》課件 第7講 阻燃橡膠材料
- 爆炸物運(yùn)輸安全保障方案
- 江蘇省南京市2025屆高三學(xué)業(yè)水平調(diào)研考試數(shù)學(xué)試卷(解析版)
- 移動商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)五 引發(fā)用戶共鳴外部條件的把控
評論
0/150
提交評論