在AVR微控制器中用於保存狀態寄存器sreg的機制是什麼? RETI
意味着這些位不在堆棧上。其中一個通用寄存器也是sreg或類似的東西?在AVR中斷中保留sreg
8
A
回答
11
這在每個AVR數據表中都有說明。例如在ATtiny2313 datasheet的第8頁上,它表示:
狀態寄存器在進入中斷例程時不會自動存儲,而在從中斷返回時不會自動存儲。這必須由軟件來處理。
您可以通過將其存儲在臨時寄存器實現這一目標:
interrupt:
in r16, SREG ; save SREG
...
out SREG, r16 ; restore SREG
reti
還要注意的是,如果你正在訪問未專門在此中斷程序中使用的寄存器,你需要保存那些,太。此外,你可以,如果你對寄存器是低SREG的價值推到堆棧:
interrupt:
push r16 ; save global registers on stack
push r17
push r18
in r16, SREG ; save SREG
push r16 ; do this if you want to use r16 in your interrupt routine
...
pop r16 ; do this if you pushed SREG above
out SREG, r16 ; restore SREG
pop r18 ; restore global registers
pop r17
pop r16
reti
更多信息看here。
1
或者
PUSH Rn
LDS Rn, SREG
PUSH Rn
和
POP Rn
STS SREG, Rn
POP Rn
似乎是有效的。
相關問題
- 1. ATMega AVR外部中斷
- 2. AVR上的軟件中斷
- 3. AVR外部中斷錯誤
- 4. 如何在Firebug中保留斷點
- 5. 在FLASH中保留一個數據數組(字體) - 在AVR GCC中編程
- 6. AVR C如何停止中斷
- 7. 在DotNetOpenAuth中提供SREG/AX的示例
- 8. 保留在`Text.Parsec.Token`評論斷詞
- 9. 如何在Firefox中刷新並保留斷點?
- 10. 截斷文本但在javascript中保留html
- 11. WCF診斷「logEntireMessage」保留在已部署的環境中
- 12. 如何在avr-gcc中不斷的工作?
- 13. JanRain OpenID在PHP的SREG?
- 14. 在VBA中保留ActiveSheet
- 15. 在UItableview中保留一行
- 16. 在UIWebView中保留Cookie?
- 17. 在V8中保留UINT64值
- 18. 保留mutliline在PowerShell中
- 19. 在sklearn中保留數據
- 20. 保留在Java中的Unicode
- 21. 在Rails中保留時區
- 22. 在EditText中保留內容
- 23. 在HttpClient中保留會話
- 24. 在ARC中保留週期
- 25. 在iframe中保留網站
- 26. 在NSDateFormatter中保留時區
- 27. 在YAML中保留新行
- 28. 在scrollviewer中保留位置
- 29. 在ArrayList中保留項目
- 30. Cookie保留在ASP.NET中
狀態寄存器不是通用寄存器。它駐留在I/O寄存器文件中,可以使用'in'和'out'指令進行訪問。 – 2012-01-18 09:28:36