AVR-GCC 关于reti()
扫描二维码
随时随地手机看文章
用过汇编的同学知道,在汇编语言中,指令reti是用来从中断服务程序中返回的。然后在winavr中我们用C遍了这样一段程序:
#include
……
ISR(USART_RXC_vect)
{
uart_putc('a');
while(!(UCSRA&(1< char dummy = UDR; flag = !flag; uart_putc_hex(flag); reti(); } …… int main(void) { uart_init(); uart_putstring("startingrn");//send data to PC sei(); while(1) { …… } } 运行程序发现,只要你从串口助手向单片机发送字符,都会输出一条: “starting” 这就说明了,每次从中断返回的时候,程序被重启了。被谁重启的呢,经过调试发现,是reti()重启的。我晕,原来它不只是简单的从中断返回,而且重启了整个程序。这一点要谨记啊。