gpt4 book ai didi

assembly - 在 AVR 中断中保留 sreg

转载 作者:行者123 更新时间:2023-12-02 19:24:00 26 4
gpt4 key购买 nike

AVR 微 Controller 中用于保存状态寄存器 sreg 的机制是什么? RETI 意味着这些位不在堆栈上。通用寄存器之一也是 sreg 或类似的东西吗?

最佳答案

每个 AVR 数据表中对此都有解释。例如 ATtiny2313 datasheet 的第 8 页它说:

The Status Register is not automatically stored when entering an interrupt routine and restored when returning from an interrupt. This must be handled by software.

您可以通过将其存储在临时寄存器中来实现此目的:

 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 .

关于assembly - 在 AVR 中断中保留 sreg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com