gpt4 book ai didi

embedded - ISR 中过早出现 'return' 会发生什么?

转载 作者:行者123 更新时间:2023-12-04 02:03:39 24 4
gpt4 key购买 nike

我正在使用 AVR-GCC 4.9.2,我想知道如果我在 AVR 上的 ISR 中过早返回会发生什么?

ISR(USART_RXC_vect)
{
...
if(idx == BUFSIZE)
return;
...
}

请问 return翻译成 reti操作说明?或者我需要包含一个 reti()我?

我正在寻找幕后发生的事情的详细解释。

最佳答案

就像ISR(USART_RXC_vect)不仅仅是字面上的USART_INTERUPT_VECTOR:在汇编程序中,
return;不仅仅是字面上的ret或者reti在汇编程序中。

C/C++ 中的两条指令都将被翻译成多个汇编语句,并且在这两种情况下都取决于上下文。 ISR(){} 的上下文在这种情况下是完全单轨的,但它很可能还包括一些推送和存储 SREG。但是插入堆栈的次数将取决于函数中发生的情况。

任何 return; 也是如此在上下文中解释。在实际构建到子例程中的正常子例程的末尾(出于代码效率原因,许多有限使用的子例程被编译器“内联”)将成为 ret指令(在处理任何需要的 POP 和其他低级别清理之后)。在中断结束时,它实际上意味着“弹出您之前推送的所有内容(并恢复 SREG),然后弹出 reti”。

当您返回将被编译为通过平台系统传输该值的类型时,在包含 ret 之前操作说明。所以return;是一个非常上下文敏感的语句,你可以假设它会被正确解释,除非你做了非常奇怪的事情。但是那些奇怪的事情将是一个好的编译器(如 AVR-GCC)至少会警告的事情。

关于embedded - ISR 中过早出现 'return' 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020556/

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