AVR-GCC 關(guān)于reti()
用過匯編的同學(xué)知道,在匯編語言中,指令reti是用來從中斷服務(wù)程序中返回的。然后在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) { …… } } 運(yùn)行程序發(fā)現(xiàn),只要你從串口助手向單片機(jī)發(fā)送字符,都會(huì)輸出一條: “starting” 這就說明了,每次從中斷返回的時(shí)候,程序被重啟了。被誰重啟的呢,經(jīng)過調(diào)試發(fā)現(xiàn),是reti()重啟的。我暈,原來它不只是簡單的從中斷返回,而且重啟了整個(gè)程序。這一點(diǎn)要謹(jǐn)記啊。