|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
淺談在uC/OCii中用C代替匯編寫中斷程序。 |
| 作者:masm311 欄目:嵌入式系統(tǒng) |
按照作者的要求,中斷程序要用匯編寫,其過程書里有介紹,舉例如: 匯編: 保存全部CPU寄存器; 調(diào)用OSIntEner(); 清中斷源; 重新開中斷; ......... 用戶代碼 系統(tǒng)服務(wù),如發(fā)送事件標(biāo)志(也可以是信號(hào)量、郵箱等,本人實(shí)驗(yàn)的是事件標(biāo)志) ......... 調(diào)用OSIntExit(); 恢復(fù)所有CPU積存器; 執(zhí)行中斷返回指令; 因?yàn)橐脜R編寫,所以本人感覺特麻煩,所以用C寫了個(gè)程序,如下: C: ......... 用戶代碼 系統(tǒng)服務(wù),如發(fā)送事件標(biāo)志(也可以是信號(hào)量、郵箱等,本人實(shí)驗(yàn)的是事件標(biāo)志) ......... 缺點(diǎn): 原來的程序在中斷服務(wù)完成后,立即任務(wù)切換,而用C寫的程序需要等到下個(gè)時(shí)鐘節(jié)拍到來時(shí)才做任務(wù)切換,所以事件響應(yīng)時(shí)間晚了大約不到一個(gè)時(shí)鐘節(jié)拍。 優(yōu)點(diǎn): 程序編寫時(shí)方便很多,尤其是對(duì)熟悉C而不太熟練匯編的人來說,可以加快編寫程序速度。 總的來說,本人在理論上還沒想到用C編寫中斷程序的隱患,實(shí)踐中暫時(shí)也沒發(fā)現(xiàn)問題。對(duì)于時(shí)間響應(yīng)不是很嚴(yán)的系統(tǒng),可以考慮使用,只是事件響應(yīng)推遲了一個(gè)時(shí)鐘節(jié)拍,一般來說是幾十ms。而作者的原意是響應(yīng)時(shí)間在uS或十uS級(jí)的,顯然對(duì)于很多系統(tǒng)是用不上的。 在uC/OSii中用C寫中斷程序要注意: 1、中斷程序中不能開中斷 2、中斷程序用不能調(diào)用涉及到任務(wù)切換的系統(tǒng)服務(wù)函數(shù) 3、中斷服務(wù)程序盡量短 初涉RTOS,水平有限,歡迎拍磚! |
| 2樓: | >>參與討論 |
| 作者: ketp 于 2005/12/29 15:31:00 發(fā)布:
不一定要用匯編 看看ZLG的移植,在ADS下可以直接用c寫。 |
|
| 3樓: | >>參與討論 |
| 作者: masm311 于 2005/12/29 22:22:00 發(fā)布:
自己拍自己! 這種做法得不償失,只是偷了一點(diǎn)懶而已,但時(shí)間響應(yīng)時(shí)間卻推遲了 正確打法應(yīng)該是: 匯編: 保存全部CPU寄存器; 調(diào)用OSIntEner(); 清中斷源; 重新開中斷; ......... 調(diào)用C函數(shù) ......... 調(diào)用OSIntExit(); 恢復(fù)所有CPU積存器; 執(zhí)行中斷返回指令; C: 中斷服務(wù)函數(shù) --------------------------------- ZLG的移植我還沒時(shí)間看,我猜測(cè)他的中斷服務(wù)程序也不可能全是C語言寫的,應(yīng)該是約定一個(gè)C函數(shù)名,此函數(shù)被匯編調(diào)用。 因?yàn)榧偃缛肅寫的,剛進(jìn)中斷時(shí),如何知道編譯器進(jìn)棧了哪些積存器?不知道這個(gè)在任務(wù)切換時(shí)就不知道如何出棧。難道PHLIPS的C中斷里保存全部的積存器?我想這是不可能的 |
|
| 4樓: | >>參與討論 |
| 作者: masm311 于 2005/12/29 22:29:00 發(fā)布:
另一點(diǎn)體會(huì),對(duì)于RAM緊張的系統(tǒng)! 在中斷服務(wù)程序里不要開中斷,因?yàn)橹袛嗲短滋M(fèi)RAM了。還是把中斷服務(wù)程序?qū)懙谋M量短,一般最多幾百應(yīng)該夠了,這樣對(duì)其他中斷響應(yīng)最多不過1MS,對(duì)于大多數(shù)的系統(tǒng)足夠用了。 這樣對(duì)緩解RAM資源還是有很的幫助的。 還是那句話,歡迎拍磚! |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |