AVR > 메인 함수에 무한루프가 없으면?

TODAY74 TOTAL2,933,531
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | AVR | 컴파일러 | 메인 함수에 무한루프가 없으면?

페이지 정보

작성자 키트 작성일2017-08-25 17:07 조회3,856회 댓글0건

본문

#include <avr/io.h>
//
int main(void){
    DDRA=1;
    PORTA=1;
    return 0;
}

테스트를 위해서 간단하게 작성 했습니다.
AVRstudio 4.18로 컴파일 했습니다.

Build started 9.7.2015 at 21:33:17
AVR Memory Usage
----------------
Device: atmega128
Program:    3110 bytes (2.4% Full)
(.text + .data + .bootloader)
Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)
Build succeeded with 0 Warnings...

이까짓 코드에 3110바이트가 왜 소요되는지 모르겠지만 어쨋거나 컴파일 오류없습니다.^^

디버깅(시뮬레이션) 모드로 진입해서 어셈블러 코드를 보면(View/Disassembler)



+000000D9:   F7D9        BRNE      PC-0x04        Branch if not equal
+000000DA:   940E00E0    CALL      0x000000E0     Call subroutine
+000000DC:   940C0496    JMP       0x00000496     Jump
+000000DE:   940C0000    JMP       0x00000000     Jump
@000000E0: main
---- 123123.c -------------------------------------------------------------------------------------
4:        int main(void){
+000000E0:   E081        LDI       R24,0x01       Load immediate
+000000E1:   BB8A        OUT       0x1A,R24       Out to I/O location
6:         PORTA=1;
+000000E2:   BB8B        OUT       0x1B,R24       Out to I/O location
8:        }
+000000E3:   E080        LDI       R24,0x00       Load immediate
+000000E4:   E090        LDI       R25,0x00       Load immediate
+000000E5:   9508        RET                      Subroutine return
8:        }
+000000E6:   922F        PUSH      R2             Push register on stack
+000000E7:   923F        PUSH      R3             Push register on stack
+000000E8:   924F        PUSH      R4             Push register on stack
+000000E9:   925F        PUSH      R5             Push register on stack

색칠한 부분이 메인함수입니다.
5.    DDRA=1; 이 코드는 빠져있습니다.(컴파일러가 공짜라서 약간의 버그가 있어도..이정도는 봐주죠^^)

메인함수 마지막에 어디로 리턴하는지 확인 하기 위해서 F11을 눌러서 싱글스텝을 실행 합니다.
함수 바로 위로 리턴합니다.

+000000D9:   F7D9        BRNE      PC-0x04        Branch if not equal
+000000DA:   940E00E0    CALL      0x000000E0     Call subroutine 메인함수를 여기서 호출하고
+000000DC:   940C0496    JMP       0x00000496     Jump  실행 후에 여기로 리턴 했습니다. 0x00000496으로 점프하는군요
+000000DE:   940C0000    JMP       0x00000000     Jump
@000000E0: main
//

+00000495:   9508        RET                      Subroutine return
+00000496:   94F8        CLI                      Global Interrupt Disable  인터럽트를 금지시키고
+00000497:   940C0611    JMP       0x00000611     Jump  0x00000611로 점프합니다. 이리저리 끌고 다니는군요..^^
+00000499:   3028        CPI       R18,0x08       Compare with immediate
//

+00000610:   9508        RET                      Subroutine return
+00000611:   94F8        CLI                      Global Interrupt Disable 한번 더 인터럽트를 금지시키고
+00000612:   CFFF        RJMP      PC-0x0000      Relative jump   제자리로 점프합니다. 여기서 영원히 멈추는^^
+00000613:   FFFF        ???                      Data or unknown opcode

//

댓글 0

조회수 3,856

등록된 댓글이 없습니다.

AVRHOME > AVR > 전체 목록

게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기