只需一步,快速開始
熱門: 51單片機(jī) | 24小時必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
在用c語言寫中斷程序時,當(dāng)使用using m切換寄存器組時,小弟有如下疑問或思考,不正確處望指點(diǎn):
一、如不加using語句時,也就是使用默認(rèn)的寄存器組0,R0~R7(對應(yīng)RAM內(nèi)00h~07h),當(dāng)中斷程序用到了其中的寄存器作參數(shù)傳遞時,R0~R7全部入棧,如調(diào)用printf()函數(shù);否則。不入棧。
二,若使用using 0,由于默認(rèn)的寄存器組就是0號,這是不是多余的呢?
三、若使用using 1,則此時R0~R7對應(yīng)于08h~0Fh,現(xiàn)在的R0~R7要不要入棧;另外堆棧指針也在此區(qū)域,會不會有沖突?
使用道具 舉報(bào)
51 的 4 組 R0--R7,使用時的確要注意,否則,帶來的后果不可思議!
如果,中斷之前是使用 RAM 0 組的,那么,在中斷里, R0--R7 如果沒有切換 RAM 0, R0--R7 也被使用,原來的數(shù)據(jù)就會被改寫, R0~R7 全部入棧則可以還原原來的數(shù)據(jù).
如果你進(jìn)入中斷后,切換了 RAM 0 到 RAM 1(2,3),這時, 原來的 R0~R7 不用入棧.中斷里使用的 R0--R7 雖然名稱相同,但是物理上 RAM 是不同的.
隨著中斷返回,狀態(tài)寄存器的 RS1,RS0 會出棧,(如果已經(jīng)入棧保護(hù)),那么,你無需中斷結(jié)束后切換 RAM 1 到 RAM 0 .-----中斷返回后會自動指向 RAM 0 .
僅供參考!
本版積分規(guī)則 發(fā)表回復(fù) 回帖后跳轉(zhuǎn)到最后一頁
小黑屋|51黑電子論壇 | 管理員QQ:125739409;技術(shù)交流QQ群281945664
Powered by 單片機(jī)教程網(wǎng)