AVR용 어플리케이션을 개발하는 프로그래머라면 대부분 C언어를 주로 사용할 것이다. AVR이외에 ARM이나 다른 CPU를 가지고 개발할 때는, 특히 리눅스를 포팅하거나 boot code를 만들때에는 C언어 뿐만 아니라 어셈블 프로그램도 같이 개발 하여야 한다. 하나의 컴퓨터 언어를 사용하여 개발 할때는 전혀 고려 대상이 아니었지만, 서로 다른 언어를 사용하여 프로그램을 개발할 때에는 각각의 언어에서 사용하는 함수와 변수, 입력 인자(input argument)와 리턴 값을 어떤식으로 전달할 것인지 미리 약속을 하여야 한다. 이러한 약속을 ABI(Application Binary Interface)라고 하고, 특히 임베디드 시스템에서 사용하는 약속을 EABI(Embedded Application Binar..
이번 글에서는 엔디안(Endian)에 대해서 간단히 설명하도록 하겠다.이미 엔디안이 무엇인지 알고 있을 수도 있고, 들어본적은 있지만 정확히 무엇인지 모르고 있을 수도 있고, 첨 들어보는 경우도 있을수 있겠다.엔디안이라는 단어는 "걸리버 여행기"에서 처음 나왔다. 소인국 사람들 중에 달걀을 깰때 뭉툭한 곳(Big-Endian)부터 깨는 사람들이 있는 반면, 뾰족한 곳(Little-Endian)부터 깨는 사람들이 있어서 서로 자신의 방법이 맞다고 주장하는 글에서 유래되었다.이런 상황이 컴퓨터 분야에서도 재현 되었다.그럼 컴퓨터에서의 엔디언이 무엇인지 예를 들어 설명하도록 하겠다.wxyz라는 숫자가 있다고 가정하자. 이 숫자가 십진수라면 w는 천의 자리 수가 되고, x는 백의 자리, y는 십의 자리, z는 ..
이전 글에서 예제로 나온 코드들에서 'loop_count'가 프로그램 안에서는 어디에 존재하고 어떻게 접근하는지 하나씩 분석해 보도록 하겠다. 변수를 어디에 정의해서 어떻게 사용하든지 원하는 동작만 하면 되는거 아닌가? 라고 생각할 수도 있겠지만 프로그램의 구조를 알고 있어야 문제가 발생했을 때 훨씬 쉽게 그 문제를 해결할 수 있는 지름길로 갈수 있기 때문이다. C로 만든 코드를 보드에서 실행 하였을 때, 절대로 눈에 보이는 c코드대로 CPU가 동작되지 않는다. 정확한 동작을 이해하기 위해서는 반드시 어셈블 코드를 분석하여야 한다. 어셈블 코드를 분석할 때 map 파일을 참조하면 많은 도움을 받을 수 있다. 이번 글에서는 각각의 코드를 빌드한 후 생성되는 .lss 파일과 .map 파일을 열어서 'loop..