본문 바로가기
코스웨어/14년 스마트컨트롤러

2014년 5월 8일 업무일지 허수웅 [출석번호 22번]

by 알 수 없는 사용자 2014. 5. 8.
728x90
반응형

 ATMega 128

 

컴퓨터에서는 Interrupt<=>Polling  두개는 반대 개념이다.

Polling은 while/for 문을 통하여 계속 반복시키는 것으로 단점이 반복하고 있는 일을 끝내기 전까지는 다른 일을 처리하지 못한다.

Interrupt는 실행중인 프로그램을 일시 중단하고 다른 프로그램을 끼워 넣어 실행하는 것이다.

 

Interrupt (방해하다, 중단시키다)

H/W에서 부르는 명칭이 Interrupt

S/W에서는 OS에 따라 부르는 명칭이 다른데 Java에서는 이벤트, Window에서는 메세지, 리눅스에서는 시그널이라고 부른다.

인터럽트를 표현하는 방식으로는 인터럽트 약자 INT로 나타내거나 IRQ(Interrupt Request)로 나타내기도 한다. 

ATmega 데이터시트에서 Interrupt를 보게되면

표가 나오는데 젤 왼쪽부터 서열로 명령의 번호를 나타내고, 두번째가 주소 그 명령이 있는 주소이며, 세번째가 어떤명령인지에 대한 명령의 이름이며, 네번째가 그 명령에 대한 설명이 나와있다.

인터럽트는 Flash 메모리에 존재하며 주소와 명령의 이름으로 구성된 것을 Vector Table이라고 한다. Intel 에서는 Code 영역에 해당한다.

 인터럽트에 대한 명령은 점프 명령으로 구성되어 인터럽트가 걸리게 되면 그 인터럽트의 명령이 가지는 함수의 주소로 점프를 통하여 이동하여 그 함수를 수행한 뒤 돌아온다.

ATmega칩과 일부칩은 진입점(Entry Point)으로 0번지를 수행하는데 여기서는 crtm128.o 파일이 Entry code로 먼저 수행하는 파일이다.

존재하지 않을 경우 에러가 발생하는 것을 확인할 수 있다.

 

map파일

make를 통하여 컴파일을 하게되면 main.map이라는 파일이 생성되는 것을 확인할 수 있다. 

map파일은 링크되는 프로그램에 대한 다음 정보가 포함된 텍스트 파일이다.

- 파일의 기본 이름인 모듈 이름

- 파일 시스템이 아니라 프로그램 파일 헤더의 타임스탬프

- 프로그램의 그룹목록. 각 그룹의 시작 주소, 길이, 그룹 이름 및 클래스가 함께 표시

- 공용 기호 목록. 각 주소, 기호 이름, 플랫 주소, 기호가 정의된 .obj파일이 함께 표시

- 진입점

main.map을 보게 되면

메모리 영역의 정보가 나와있는데

Intel에선 code영역인 text의 시작주소(0번지)와 크기(128Kbyte) 권한(실행과 읽기)을 알 수 있다.

밑으로 내려가다 보면 

 

가장 먼저 초기화 Entry code인 crtm128.o를 볼 수 있고 다음으로 벡터 , 우리가 선언한 main과, 나머지 사용하는 함수들을 볼 수 있다.

그러나 main.map에는 이렇게 나와 있으나 이대로 수행되는 것은 아니다. AVR을 통하여 소스를 넣어주게 되면 벡터가 가장 위로 올라가서 수행이 이루어 진다.

함수선언하는 방법을 이용하여 인터럽트 소스를 구성하면

먼저 INT.c를 만들어 함수의 모습을 구성하는데 칩의 납땜되어 사용할 수 있는 부분 중 하나인 INT7 Interrupt를 사용하기 위해  

헤더 파일을 구성하기 위해 INT.h를 만든 뒤

외부로 만들어 인터럽트를 사용하기 위해

4개의 레지스터를 데이터시트를 통하여define 해주면

인터럽트 함수의 원형에는 위 처럼 추가적으로 적어주어야 하는데 보면 인터럽트를 사용하며 외부 호출 가능으로 설정한다.

오늘은 기본 구성만...

 


 

도서관리 LinkedList

 

LinkedList.c    

파일에 책에 대한 정보를 저장하여 사용하기 위해 함수 open,close,read,write 를 이용했다. 함수에 인자로 사용되는 int 부분을 여러곳에서 사용하기 때문에 전역변수 int형 변수 iFile을 만들어주나 다른곳에서 사용 못하도록 static을 붙여준다.

메인함수에서 Head에 동적할당 받던 부분을 수정하여 전역변수로 사용하여 함수에서 사용되고 있다. 다른곳에서 사용할 수 없도록 static을 붙여준다.

 

LinkedList.h  

LinkedList.c에 open함수의 2번째 인자를 사용하기 위하여 fcntl.h 헤더파일을 추가 해주어야 한다.

 

main.c    

 

출력장면

 

생성파일

Book.db      

 

생성파일을 .bin으로 확장자를 바꿔 비쥬얼로 보게되면

|로 책 하나의 정보씩 경계를 나타낸 부분이 아스키로 7C인 것을 확인할 수 있으며 입력한 정보가 오른쪽에 보이는 것을 확인할 수 있다. cmalloc으로 할당을 받아 쓰레기 값들은 전부 .으로 표시되는 것도 확인 가능하다.

잘못된 부분이 있으면 지적해주시면 감사하겠습니다.

728x90