티스토리 뷰

심화

변수는 어디에?

Just4Fun 2016. 4. 20. 21:36

PB0핀에 LED를 하나 연결하고 다음과 같은 코드를 작성하였다.

코드를 보드에서 실행 시키면 연결된 LED가 1초에 한번씩 10번을 깜빡이고 멈출것이다.  위의 코드에서 "loop_count"라는 변수가 어떻게 정의되고 사용되었는지를 잘 보기 바란다.

그리고, 다음의 각 코드들에서도 loop_count가 어떻게 사용되는지 비교해 보자.






위의 모든 코드들은 보드에서 모두 동일한 결과를 보여준다.  그러나, loop_count 변수는 조금씩 다르게 정의되고 사용되었다.  단순히 코드에서의 차이점 이외에 눈에 보이지 않는, 프로그램이 동작되는 내부적으로 loop_count 변수가 어떻게 사용되고 있는지 코드를 보고 예상할 수 있어야 한다.

계속하여 반복되는 얘기지만, 일반 컴퓨터에서 수행되는 어플리케이션 프로그램과 임베디드 프로그램의 차이점을 어느정도는 알고 있는것이 좋다.

어플리케이션 프로그램을 만들때에는 프로그램 자체에만 집중하여 원하는 대로 동작시켜 원하는 결과를 얻어내면 된다.  하지만, 임베디드 시스템에서는 변수하나 선언할 때에도 주의를 기울여야 하고, 특정 코드를 특정 주소에서 실행될 수 있도록 만들어야 한다.  입문편 인터럽트 설명글에서 인터럽트가 발생하면 하드웨어적으로 설정된 주소에서 프로그램이 수행된다고 하였다.  그 주소에 인터럽트를 처리할 수 있는 코드가 존재하여야 프로그램이 제대로 수행될 수 있다.  그렇게 되기 위해서 프로그래머는 코드와 변수를 마음대로 적재 적소에 배치할 수 있는 방법을 알아야만 된다는 뜻이다.

그리고 컴퓨터 어플리케이션 프로그램을 작성할 때 사용가능한 메모리의 크기를 염려하지 않아도 되고, 소켓통신을 위해서 이더넷 통신프로그램을 직접 구현할 필요는 없다.  하지만 임베디드 시스템, 특히 AVR과 같은 8비트 MCU로 프로그램을 동작시키기 위해서는 사용 가능한 자원을 최대한 효율적으로 운용하여야 한다.  또한 아주 사소한 하드웨어라도 직접 프로그램하여 구동시킬줄 알아야 한다.

위에서 제시한 예제 프로그램을 하나씩 컴파일한 후 Debug 폴더에 생성된 .lss 파일과 .map 파일을 열어서 loop_count가 어떻게 할당되고 사용되는지 분석해 보기 바란다.


심화 과정 목차

'심화' 카테고리의 다른 글

random 함수  (4) 2016.06.12
EABI(Embedded Application Binary Interface)  (0) 2016.04.23
엔디안(Endian)  (0) 2016.04.23
변수는 여기에!  (6) 2016.04.23
심화 과정 목차  (0) 2016.02.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함