音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

如何用c語言實(shí)現(xiàn)中斷響應(yīng)后保護(hù)現(xiàn)場前關(guān)中斷

作者:huanhuan03 欄目:單片機(jī)
如何用c語言實(shí)現(xiàn)中斷響應(yīng)后保護(hù)現(xiàn)場前關(guān)中斷
大家都知道當(dāng)中斷響應(yīng)后,一般要先關(guān)中斷,再現(xiàn)場保護(hù),用匯編時可以自己控制操作,那么用c語言如何實(shí)現(xiàn)這一部分呢?在中斷響應(yīng)函數(shù)中寫入ES=0已經(jīng)來不及了?該如何處理。
還有恢復(fù)現(xiàn)場時也如此,應(yīng)該先恢復(fù)現(xiàn)場然后再開中斷,可在c中都相反,該如何處理?
焦急啊,愁啊 

2樓: >>參與討論
javie
寫一個函數(shù)
 
3樓: >>參與討論
hiberhe
C51中處理中斷其實(shí)很簡單的
c51中,中斷函數(shù)的生成與一般函數(shù)的生成不一樣,編譯器會保存和恢復(fù)現(xiàn)場的(如ACC,B,DTPR,...),看一下手冊和反匯編代碼就知道了。

如果你要關(guān)中斷,那么直接用EA=0之類就可以了。但是本身的標(biāo)志沒有必要去清,比如在串口中斷服務(wù)程序中,沒有必要去ES=0,你要做的是趕緊處理完,越快越好,然后走人!

建議樓主看一下中斷處理那部分,其實(shí)非常簡單,注意中斷處理與匯編類似,沒有參數(shù),沒有返回值,注意自己的全局變量使用上的保護(hù)等就好了。

另外,如果你想在指行某個函數(shù)時,關(guān)中斷,在c51中有#disable之類的預(yù)處理語句。

4樓: >>參與討論
computer00
一般來說,C語言寫的中斷,編譯器會自動生成保護(hù)現(xiàn)場的代碼
所以你不用保護(hù)現(xiàn)場,只負(fù)責(zé)寫處理的代碼就行。

除非你要弄操作系統(tǒng),任務(wù)切換時,就需要程序來負(fù)責(zé)保護(hù)現(xiàn)場。

5樓: >>參與討論
huanhuan03
不是要保護(hù)現(xiàn)場
我不是要保護(hù)現(xiàn)場;保護(hù)現(xiàn)場的時候?yàn)榱送暾_的保護(hù)現(xiàn)場,最好先禁止所有中斷,保護(hù)好現(xiàn)場后可以再次關(guān)中斷,在匯編時我們可以在中斷入口處先禁止所有中斷,然后再保護(hù)現(xiàn)場,可在C中,中斷響應(yīng)函數(shù)只要響應(yīng)中斷即先保護(hù)現(xiàn)場,然后再執(zhí)行中斷函數(shù)中的語句,例如下邊的例子

  void int4 (void) interrupt 4
{ES=0;  
RI=0;
an_center();
SM2=1;
ES=1;//與中心站通信完畢允許中斷

}
串行口中斷函數(shù),編譯后出現(xiàn)的語句是先保護(hù)現(xiàn)場然后執(zhí)行ES=0;執(zhí)行完之后先開中斷然后恢復(fù)現(xiàn)場,這和我們所要求的先禁止中斷之后保護(hù)現(xiàn)場,先恢復(fù)現(xiàn)場之后開中斷剛好相反,如何解決這個問題呢?

6樓: >>參與討論
computer00
那只好用匯編語言來寫中斷服務(wù)程序了。
不知道是否可以設(shè)置編譯器,讓編譯器不自動生成現(xiàn)場保護(hù)的代碼?

7樓: >>參與討論
javie
那要看是什么編譯器了
 
8樓: >>參與討論
AIRWILL
想來想去沒有這個必要
 
9樓: >>參與討論
javie
沒有什么必要啊?
 
10樓: >>參與討論
huanhuan03
我用的是keil
我用的是KEIL,應(yīng)該有人遇到過這種情況吧。
不知道中斷服務(wù)函數(shù)的入口程序在哪里,更改那個程序應(yīng)該是可以的阿

11樓: >>參與討論
huanhuan03
找到了
#pragma disable放在中斷函數(shù)之前即可,看其編譯后的語句很好

12樓: >>參與討論
夏蟲
不知道為什么要這么用
要是怕別的中斷有干擾,那就設(shè)置優(yōu)先級嘛

13樓: >>參與討論
awey
51中的中斷又不能嵌套,不知這么做有什么必要?
在一個中斷服務(wù)執(zhí)行過程中,不管ES值是什么,新的中斷都不能響應(yīng)。

14樓: >>參與討論
農(nóng)民講習(xí)所
保護(hù)是后續(xù)中斷(嵌套)的職責(zé)
就如果在主程序里面不需要保護(hù)現(xiàn)場,而在中斷中需要一樣,中斷的保護(hù)是相對主程序而言的。如果有嵌套發(fā)生,嵌套中斷的保護(hù)是相對低級中斷而言的。所以不需要關(guān)閉中斷,即使在低級中斷保護(hù)現(xiàn)場時被高等級中斷了,也沒關(guān)系,因?yàn)楦叩燃壷袛嘁矔鐾瑯拥氖虑椤?br>
不然,高等級中斷為什么要保護(hù)現(xiàn)場?

ES=0是沒必要寫的,硬件已經(jīng)自動屏蔽了自身中斷,就是說自身中斷重入不會發(fā)生。

15樓: >>參與討論
computer00
也許樓主是不想讓別的中斷源打斷他的中斷服務(wù)程序?
 
16樓: >>參與討論
soho
我也認(rèn)為沒必要
1. 自身中斷不會重入;
2. 低優(yōu)先中斷是否及時響應(yīng),還得看高優(yōu)先的是否在執(zhí)行,你跟誰搶幾個指令的時間?
所以,要想中斷快,設(shè)為高優(yōu)先.

17樓: >>參與討論
lyhui1976
樓上有理
 
18樓: >>參與討論
zzwj5120
樓上的還是先回去看看書再問,根本不必關(guān)中斷
用KEIL C51的時候注意不要使用using 0
否則編譯器生成的中斷代碼不會將R0-R7保存,
這是KEIL C51編譯器的一個bug

19樓: >>參與討論
linwei1234
C應(yīng)該和編譯器有關(guān)吧!
 
20樓: >>參與討論
567
多此一舉
 
21樓: >>參與討論
cock
從EA=0來判斷51系列,進(jìn)入中斷后就不再響應(yīng)同級中斷,無須關(guān)中斷!
 
22樓: >>參與討論
tyhtal
沒有特殊要求,不用考慮
 
23樓: >>參與討論
Harvard
附和一聲
我也覺得沒有必要,要不要編譯器做甚!除非使用RTOS

24樓: >>參與討論
tzfzephyr
你的意思是?
你怕其他的任務(wù)打擾這個中斷??
C語言中處理這些是有優(yōu)先級的,沒事。如果這個任務(wù)優(yōu)先級高后面的只能排隊(duì)。

25樓: >>參與討論
sun8990
應(yīng)該不用
應(yīng)該不用吧

26樓: >>參與討論
qianjin
中斷響應(yīng)時,什么情況下要進(jìn)行現(xiàn)場保護(hù)?如何保護(hù)?
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
keil怎么編譯這個程序的(8051的芯片)
請問delay程式中$的作用 謝謝!
詢問一個關(guān)于電機(jī)的問題
弱弱的問一個Keil C51的問題,請幫幫新手-_-||
哪位高手用過電容式接近開關(guān)的,請進(jìn)來幫忙一下,好么,十分感謝
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號