如果在中斷服務(wù)函數(shù)ISR中使用寄存器,那么必須處理好using的使用問(wèn)題:
1、中斷服務(wù)函數(shù)使用using指定與主函數(shù)不同的寄存器組(主函數(shù)一般使用Register bank 0)。
2、中斷優(yōu)先級(jí)相同的ISR可用using指定相同的寄存器組,但優(yōu)先級(jí)不同的ISR必須使用不同的寄存器組,在ISR中被調(diào)用的函數(shù)也要使用using指定與中斷函數(shù)相同的寄存器組。用reentranr指明可重入函數(shù)。
3、如果不用using指定,在ISR的入口,C51默認(rèn)選擇寄存器組0,這相當(dāng)于中斷服務(wù)程序的入口首先執(zhí)行指令:
MOV PSW #0
這點(diǎn)保證了,沒(méi)使用using指定的高優(yōu)先級(jí)中斷。可以中斷使用不同的寄存器組的低優(yōu)先級(jí)中斷。
4、使用using關(guān)鍵字給中斷指定寄存器組,這樣直接切換寄存器組而不必進(jìn)行大量的PUSH和POP操作,可以節(jié)省RAM空間,加速M(fèi)CU執(zhí)行時(shí)間。寄存器組的切換,總的來(lái)說(shuō)比較容易出錯(cuò),要對(duì)內(nèi)存的使用情況有比較清晰的認(rèn)識(shí),其正確性要由你自己來(lái)保證。特別在程序中有直接地址訪問(wèn)的時(shí)候,一定要小心謹(jǐn)慎!至于“什么時(shí)候要用到寄存器組切換”,一種情況是:當(dāng)你試圖讓兩個(gè)(或以上)作業(yè)同時(shí)運(yùn)行,而且它們的現(xiàn)場(chǎng)需要一些隔離的時(shí)候,就會(huì)用上了。在ISR或使用實(shí)時(shí)操作系統(tǒng)RTOS中,寄存器非常有用。
寄存器組使用的原則:
1、8051的最低32個(gè)字節(jié)分成4組8寄存器。分別為寄存器R0到R7。寄存器組由PSW的低兩位選擇。在ISR中,MCU可以切換到一個(gè)不同的寄存器組。對(duì)寄存器組的訪問(wèn)不可位尋址,C51編譯器規(guī)定使用using或禁止中斷的函數(shù)(#pragma dISAble)均不能返回bit類型的值。
2、主程序(main函數(shù))使用一組,如bank 0;低中斷優(yōu)先級(jí)的所有中斷均使用第二組,如bank 1;高中斷優(yōu)先級(jí)的所有中斷均使用再另外一組,如bank 2。顯然,同級(jí)別的中斷使用同一組寄存器不會(huì)有問(wèn)題,因?yàn)椴粫?huì)發(fā)生中斷嵌套;而高優(yōu)先級(jí)的中斷則要使用與低優(yōu)先級(jí)中斷不同的一組,因?yàn)橛锌赡艹霈F(xiàn)在低優(yōu)先級(jí)中斷中發(fā)生高優(yōu)先級(jí)中斷的情況。編譯器會(huì)自動(dòng)判斷何時(shí)可使用絕對(duì)寄存器存取。
3、在ISR中調(diào)用其它函數(shù),必須和中斷使用相同的寄存器組。當(dāng)沒(méi)用NOAREGS命令做明確的聲明,編譯器將使用絕對(duì)寄存器尋址方式訪問(wèn)函數(shù)選定(即用using或REGISTERBANK指定)的寄存器組,當(dāng)函數(shù)假定的和實(shí)際所選的寄存器組不同時(shí),將產(chǎn)生不可預(yù)知的結(jié)果,從而可能出現(xiàn)參數(shù)傳遞錯(cuò)誤,返回值可能會(huì)在錯(cuò)誤的寄存器組中。
舉一例子:當(dāng)需要在中斷內(nèi)和中斷外調(diào)用同一個(gè)函數(shù),假定按照程序的流程控制,不會(huì)出現(xiàn)函數(shù)的遞歸調(diào)用現(xiàn)象,這樣的調(diào)用會(huì)不會(huì)出現(xiàn)問(wèn)題?若確定不會(huì)發(fā)生重入情況,則有以下兩種情況:
1、如果ISR和主程序使用同一寄存器組(主程序缺省使用BANK 0,若ISR沒(méi)有使用using為其指定寄存器區(qū),則缺省也使用BANK 0),則不需其他設(shè)置。
2、如果ISR和主程序使用不同的寄存器組(主程序缺省使用BANK 0,ISR使用using指定了其他BANK),則被調(diào)用函數(shù)必須放在:
#pragma NOAREGS
#pragma AREGS
控制參數(shù)對(duì)中,指定編譯器不要對(duì)該函數(shù)使用絕對(duì)寄存器尋址方式;或者也可在Options->C51,選中“Dont use absolute register aCCesses”,使所有代碼均不使用絕對(duì)寄存器尋址方式(這樣,執(zhí)行效率將稍有降低)。不論以上的哪一種情況,編譯器均會(huì)給出重入警告,需手工更改OVERLAY參數(shù),做重入說(shuō)明。
3、還有一種辦法:如果被調(diào)用函數(shù)的代碼不是很長(zhǎng),還是將該函數(shù)復(fù)制一份,用不同的函數(shù)名代替,這種情況適合ROM有足夠多余的空間。
因此,對(duì)using關(guān)鍵字的使用,如果沒(méi)把握,寧可不用,交給編譯系統(tǒng)自己去處理好了。
#pragma disable
在函數(shù)前聲明,只對(duì)一個(gè)函數(shù)有用,該函數(shù)調(diào)用過(guò)程中,將不可被中斷。
遞歸或可重入函數(shù)指定
在主程序和中斷程序都調(diào)用的函數(shù)容易出現(xiàn)問(wèn)題,用寄存器傳遞參數(shù),內(nèi)部變量在RAM中,函數(shù)重入時(shí)候,會(huì)破壞上次的數(shù)據(jù),用下面兩種方法解決函數(shù)重入問(wèn)題:
在相應(yīng)的函數(shù)前,加“#pramga disable”聲明,只允許主程序或者中斷之一調(diào)用該函數(shù);
將該函數(shù)說(shuō)明為可重入:VOID func(para..) reentrant;
指定存儲(chǔ)模式
由small comPACt及l(fā)arge說(shuō)明,例如:
void fun1(void) small { }
提示:small說(shuō)明的函數(shù)內(nèi)部變量全部使用內(nèi)部RAM。關(guān)鍵的經(jīng)常性的耗時(shí)的
地方可以這樣聲明,以提高運(yùn)行速度。
上一篇:在C51程序設(shè)計(jì)中變量的空間分配幾個(gè)方法
下一篇:C51在程序設(shè)計(jì)中的頭文件用法
推薦閱讀
史海拾趣
為了進(jìn)一步拓展市場(chǎng)和提高競(jìng)爭(zhēng)力,電子智鏈開(kāi)始尋求與其他企業(yè)建立生態(tài)合作關(guān)系。公司與多家電子制造設(shè)備供應(yīng)商、原材料供應(yīng)商和物流服務(wù)商建立了戰(zhàn)略合作關(guān)系,共同打造了一個(gè)覆蓋電子產(chǎn)業(yè)全鏈條的生態(tài)圈。這一合作模式不僅為客戶提供了更加全面和高效的解決方案,還促進(jìn)了整個(gè)電子產(chǎn)業(yè)的協(xié)同發(fā)展。
隨著半導(dǎo)體技術(shù)的興起,富士通敏銳地捕捉到了這一領(lǐng)域的巨大潛力。公司開(kāi)始加大在半導(dǎo)體研發(fā)方面的投入,致力于開(kāi)發(fā)出具有自主知識(shí)產(chǎn)權(quán)的半導(dǎo)體產(chǎn)品。經(jīng)過(guò)不懈的努力,富士通在半導(dǎo)體領(lǐng)域取得了多項(xiàng)重大突破,不僅提升了自身的技術(shù)實(shí)力,也為全球半導(dǎo)體產(chǎn)業(yè)的發(fā)展做出了積極貢獻(xiàn)。如今,富士通已成為全球領(lǐng)先的半導(dǎo)體制造商之一,其產(chǎn)品在各個(gè)領(lǐng)域都得到了廣泛應(yīng)用。
在國(guó)內(nèi)市場(chǎng)站穩(wěn)腳跟后,AUREL公司開(kāi)始積極拓展國(guó)際市場(chǎng)。公司積極參加國(guó)際電子展會(huì)和技術(shù)交流活動(dòng),與海外企業(yè)建立了廣泛的合作關(guān)系。同時(shí),公司還針對(duì)不同國(guó)家和地區(qū)的市場(chǎng)需求,推出了定制化的產(chǎn)品和服務(wù)。這些舉措使得AUREL公司的品牌影響力逐漸擴(kuò)大,國(guó)際市場(chǎng)份額不斷攀升。
面對(duì)數(shù)字化浪潮的沖擊,Hitachi Metals積極擁抱變革,致力于數(shù)字化轉(zhuǎn)型。公司推出了全球級(jí)別的物聯(lián)網(wǎng)平臺(tái)Lumada,該平臺(tái)能夠?yàn)榭蛻籼峁钠髽I(yè)擴(kuò)建、價(jià)值核查到設(shè)備和系統(tǒng)管理的全方位解決方案。Lumada平臺(tái)的成功應(yīng)用不僅提升了日立金屬自身的運(yùn)營(yíng)效率和管理水平,還為客戶帶來(lái)了顯著的價(jià)值增長(zhǎng)。通過(guò)Lumada平臺(tái),日立金屬與全球范圍內(nèi)的合作伙伴建立了更加緊密的聯(lián)系,共同推動(dòng)電子行業(yè)的數(shù)字化轉(zhuǎn)型進(jìn)程。
背景:GarrettCom始創(chuàng)于1989年,專注于工業(yè)網(wǎng)絡(luò)通信產(chǎn)品的研發(fā)與制造。在那個(gè)工業(yè)自動(dòng)化初具規(guī)模的年代,GarrettCom憑借其卓越的產(chǎn)品質(zhì)量和創(chuàng)新的解決方案,迅速在市場(chǎng)中嶄露頭角。公司推出的工業(yè)以太網(wǎng)交換機(jī)和路由器等產(chǎn)品,以其高穩(wěn)定性和可靠性,贏得了眾多工業(yè)客戶的信賴。
發(fā)展:隨著工業(yè)自動(dòng)化程度的不斷提升,GarrettCom不斷加大研發(fā)投入,推出了一系列適應(yīng)惡劣工業(yè)環(huán)境的產(chǎn)品。這些產(chǎn)品不僅滿足了工業(yè)自動(dòng)化對(duì)通信穩(wěn)定性的嚴(yán)苛要求,還推動(dòng)了工業(yè)通信技術(shù)的進(jìn)步。通過(guò)不斷的技術(shù)創(chuàng)新和市場(chǎng)拓展,GarrettCom逐步確立了其在工業(yè)通信領(lǐng)域的領(lǐng)先地位。
從笨重的調(diào)頻無(wú)線電話,走向最新的集觸摸屏、MP3攝像頭等的iPhone ,無(wú)線通信器是怎么演變過(guò)來(lái)的?請(qǐng)看: 1940年,高爾文公司(后來(lái)成為摩托羅拉)的工程師開(kāi)發(fā)了SCR536型便攜式調(diào)頻無(wú)線步話機(jī),并被廣泛運(yùn)用于第二次世界大戰(zhàn)。 1943年,高爾 ...… 查看全部問(wèn)答∨ |
本帖最后由 paulhyde 于 2014-9-15 04:24 編輯 單片機(jī)紅外遙控最全的資料,包含很多當(dāng)前電視遙控專用芯片的解碼方式,C語(yǔ)言和匯編語(yǔ)言編寫(xiě)的解碼范例程序,看完了你就會(huì)了 … 查看全部問(wèn)答∨ |
第四講 利用Boost和Buck-Boost實(shí)現(xiàn)LED驅(qū)動(dòng) 管我們是否要控制輸出電壓或輸出電流,Boost調(diào)節(jié)器都要比Buck調(diào)節(jié)器更難設(shè)計(jì)。持續(xù)導(dǎo)通狀態(tài)(CCM)Boost轉(zhuǎn)換器中的平均感應(yīng)電流等于負(fù)載電流(LED電流)乘以1/(1-D),這里D是占空度。Boost電壓調(diào)節(jié)器需要設(shè)計(jì)者考慮到輸入電壓的限制來(lái)保證電感的正 ...… 查看全部問(wèn)答∨ |
越來(lái)越發(fā)現(xiàn)這個(gè)硬件板塊該分細(xì)點(diǎn)了 大家有沒(méi)有發(fā)現(xiàn),這個(gè)“硬件設(shè)計(jì)”板塊太籠統(tǒng)了,能分細(xì)點(diǎn)更好。 單片機(jī)、FPGA、模電 和EDA軟件應(yīng)用,都出現(xiàn)在這,特別亂,感覺(jué)。 其實(shí)另外也有一個(gè)單片機(jī)\\工控 板塊嗎?居然還有一個(gè)其他硬件開(kāi)發(fā),哎,太亂了。 嵌入開(kāi)發(fā)居然WINCE ...… 查看全部問(wèn)答∨ |
LCD能顯示Logo圖片, 之后什么也不顯示了, 我估計(jì)可能是FrameBuffer配置錯(cuò)了, 如何解決. 掌微的A3 CPU, wince5.0, EBoot能正常運(yùn)行,NK也已運(yùn)行(Logo圖片以文件的形式包含在NK.Bin中), LCD能顯示Logo圖片, 之后什么也不顯示了, 我估計(jì)可能是FrameBuffer配置錯(cuò)了. 請(qǐng)問(wèn)如何檢查下 WinCE 代碼里面對(duì)LCD控制器有沒(méi)有錯(cuò)誤的配置? 如何檢查 ...… 查看全部問(wèn)答∨ |
[第一次發(fā)帖] 文件系統(tǒng)過(guò)濾驅(qū)動(dòng)問(wèn)題 文件系統(tǒng)過(guò)濾驅(qū)動(dòng) 在IRP_MJ_CREATE中攔截住對(duì)文件訪問(wèn)的IRP之后,暫時(shí)不向下傳遞這個(gè)IRP,也不返回任何參數(shù),而是等一定時(shí)間之后再處理這個(gè)IRP,那么在這個(gè)時(shí)間之內(nèi)系統(tǒng)會(huì)不會(huì)有第二個(gè)IRP傳過(guò)來(lái)? 還有,如果必須處理這個(gè)IRP才會(huì)有下一個(gè)IRP傳過(guò)來(lái),那么 ...… 查看全部問(wèn)答∨ |
今天到電子市場(chǎng)找了一下,幾乎都是12.5p負(fù)載電容的32768晶振,只有一家有少量,負(fù)載電容是6p,20ppm的晶振要價(jià)是12.5p晶振的5倍,而且從外觀上也看不出來(lái),也沒(méi)有測(cè)試方法能測(cè)出負(fù)載電容是6p還是12.5p。賣晶振的老板在這行干了10幾年,一說(shuō)到6 ...… 查看全部問(wèn)答∨ |
|
ATMEL的ARM Cortex M3開(kāi)發(fā)板交換或者出售 開(kāi)發(fā)板簡(jiǎn)介如下:EM-AT91SAM3U開(kāi)發(fā)板是英蓓特公司新推出的一款基于ATMEL公司AT91SAM3U系列處理器(Cortex-M3內(nèi)核 V2版)的全功能評(píng)估板。主頻高達(dá)96MHz,該評(píng)估版含有的高速USB2.0(480MHZ),音頻輸入,音頻輸出,SD卡接口,2.8\'TFT ...… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- 多點(diǎn)觸摸感應(yīng)技術(shù)給人機(jī)界面帶來(lái)的改變
- H.265:網(wǎng)絡(luò)視頻的高清時(shí)代
- 大聯(lián)大友尚集團(tuán)推出基于ST產(chǎn)品的工業(yè)PLC方案
- 電視棒工作原理很簡(jiǎn)單 有網(wǎng)絡(luò)就能變身智能電視
- 牛B的手勢(shì)操控是如何煉成的
- Bourns 擴(kuò)展符合 AEC-Q200 標(biāo)準(zhǔn)車規(guī)級(jí)電流檢測(cè)電阻產(chǎn)品線
- 基于G.729壓縮語(yǔ)音流隱蔽通信系統(tǒng)設(shè)計(jì)方案
- 觸摸控制器如何滿足大屏觸控設(shè)備抗噪新需求?
- Bourns 擴(kuò)展半屏蔽功率電感產(chǎn)品組合,推出具更高最大感值新系列
- 指紋門禁常見(jiàn)問(wèn)題解決方法
- 分享你遇到的那些bug和解決技巧,贏萬(wàn)圣節(jié)小驚喜!
- 逛安富利新能源技術(shù)創(chuàng)新云會(huì)展 贏好禮!
- 電源技術(shù)專輯第2期:從零開(kāi)始 DIY 雙向高效 DC-DC!
- 【西門逛中發(fā)】之初識(shí)中發(fā)
- 萬(wàn)用表:越拆越開(kāi)心,越評(píng)越精彩!
- 答題有好禮 | 是德科技《優(yōu)化物聯(lián)網(wǎng)設(shè)備電池續(xù)航時(shí)間的4個(gè)技巧》
- 直播已結(jié)束|TI 嵌入式直播周帶您直擊工業(yè)應(yīng)用
- 【已結(jié)束】有獎(jiǎng)直播【TI 全新CC2340無(wú)線 MCU,助力低功耗藍(lán)牙應(yīng)用】
- STM32按鍵控制開(kāi)關(guān)燈
- STM32實(shí)戰(zhàn)1:按鍵點(diǎn)亮LED小燈
- STM32學(xué)習(xí)之路-按鍵中斷測(cè)試(外部中斷)
- STM32(二)之GPIO操作(2)——通過(guò)按鍵控制LED燈的開(kāi)關(guān)
- STM32_按鍵中斷
- 網(wǎng)絡(luò)分析儀通道超差故障如何維修?
- 示波器探頭價(jià)格的主要決定因素
- 知識(shí)普及-示波器探頭自校準(zhǔn)及補(bǔ)償操作步驟
- 差分探頭-電流探頭-示波器探頭-PRBTEK使用說(shuō)明
- PRBTEK柔性電流探頭CP9000(S/L)操作方法及測(cè)量注意事項(xiàng)
- PCB走線寬度變化產(chǎn)生的反射
- uC/OS-II官方STM32版本修改后在萬(wàn)利的STM32開(kāi)發(fā)板上運(yùn)行
- 三星自己背鍋:Note7爆炸根源在電池設(shè)計(jì)與制造存問(wèn)題
- 電噴富康LPG雙燃料轎車的使用保養(yǎng)2
- 功率場(chǎng)效應(yīng)管的驅(qū)動(dòng)研究
- 分享一個(gè)來(lái)自清華的畢業(yè)設(shè)計(jì):usb接口設(shè)計(jì)
- 求助:MAX712快速充電以及電流設(shè)定
- wince c# 求替代 datagrid 的自定義控件或源碼.
- 有獎(jiǎng)直播:多款MSP430 ™ 片上Sigma-Delta ADC助力高精度信號(hào)檢測(cè)應(yīng)用 進(jìn)行中!
- 單片機(jī)測(cè)脈搏