본문 바로가기

Hacked Brain/embeddedland.net

ARM7 강좌 [7] : Instruction Set(1) (출처 : 디지털 동호회) ---------------------------------------------------------------------- ARM7 강좌 [7] : Instruction Set(1) ---------------------------------------------------------------------- * ARM7 인스터럭션의 특징 AMR7은 32 Bit 코어입니다. 특징적인 것은 모든 명령어가 32Bit 하나의 Word로 구성된다는 것입니다. 8086의 경우엔 명령어에 따라 1바이트 명령 부터 5바이트 까지 있나요? 그런데, ARM7은 모든 명령어를 한 워드로 처 리 합니다. 일단은 명령어의 개수가 몇 안되고, 주소는 상대주소 방식을 사용하며, 심지어는 Immediate 상수값도 32비트 값은.. 더보기
ARM7 강좌 [6] : Exception(2) (출처 : 디지털 동호회) ---------------------------------------------------------------------- ARM7 강좌 [6] : Exception(2) ---------------------------------------------------------------------- * Exception Overview Exception을 처음부터 완전히 이해 할 필요가 있다고는 생각하지 않습니 다. 대부분의 것들이 그러하듯 우선은 이런게 뭐다 라고 파악만 하고 있 다면, 정작 필요할 경우에 다시 자세히 살펴보아도 좋을 것입니다. 그런 취지에서 Exception을 바라본다면, ARM 7 에는 여섯가지의 CPU 동작 모드를 지원한다는 사실과, 차후 MMU 같은것에도 그 동작모드가 관여한다.. 더보기
ARM7 강좌 [5] : Exception(1) (출처 : 디지털 동호회) 출처 : 디지털 동호회 ---------------------------------------------------------------------- ARM7 강좌 [5] : Exception(1) ---------------------------------------------------------------------- * Exception 우선 Exception이 무엇을 말하는지부터 정리해 보고자 합니다. 일반적으 는 인터럽트와 유사한 개념으로 사용합니다. 어떻게 보면 인터럽트 보다 는 조금 큰 개념이랄 수도 있고, 정확한 정의에 대해서는 말씀을 드리지 못하겠군요. 개념을 ARM7에서의 Exception으로 한정해서 말씀드리겠습니 다. 구체적으로 ARM7에는 FIQ(Fast Interrupt reQ.. 더보기
ARM7 강좌 [4] : 레지스터 (출처 : 디지털 동호회) 출처 : 디지털 동호회 ---------------------------------------------------------------------- ARM7 강좌 [4] : 레지스터 ---------------------------------------------------------------------- * ARM7의 레지스터 지난 강좌에서 ARM7에는 31개의 General Purpose 레지스터와 6개의Status 레지스터가 있다고 말씀드렸습니다. 물론 모두 32비트 레지스터 입니다. 그런데 ARM7의 어셈블러에서 사용하는 범용 레지스터 키워드는 r0 에서 r15 까지 16개 밖에는 되지 않습니다. 즉, 다시 말해서 사용자가 한번에 사용할 수 있는 레지스터는 16개 입니다. 그중에 몇개는 프로그.. 더보기
ARM7 강좌 [3] : ARM7의 구조 (출처 : 디지털 동호회) 출처 : 디지털 동호회 ---------------------------------------------------------------------- ARM7 강좌 [3] : ARM7의 구조 ---------------------------------------------------------------------- * ARM7의 구조 1. 레지스터 : ARM7에는 31개의 32Bit 레지스터가 있습니다. 또, 동작모드에 따르는 -여기서 동작모드는 Exception부분에서 자세히 다루겠습니다.- 6개의 Status 레지스터가 있습니다. 2. ALU : 32Bit 연산이 가능한 ALU가 제공됩니다. 그런데 특이한 것은 ALU의 한쪽 입력은 Barrel Shifter라는것이 연결되어 있어서 ALU의 인수 하.. 더보기
ARM7 강좌 2 개요 (출처 : 디지털 동호회) 출처 : 디지털 동호회 ---------------------------------------------------------------------- ARM7 강좌 [2] : 개요 ---------------------------------------------------------------------- * ARM7의 특징 ARM의 가장 큰 특징은 전력을 조금만 소모한다는 것입니다. 일설에 의하 면, ARM을 설계할 때, 요즘 CPU를 설계하는 방법처럼 VHDL등을 사용한 것 이 아니라 일일이 회로를 그려가면서 했다는 설도 있습니다. 사실이야 어 떻든, ARM의 저전력 설계기술은 널리 알려진 사실입니다. 이런 이유 때문 에, ARM CPU는 상대적으로 전력이 중요하게 여겨지는 휴대용 단말기에 많 이 채.. 더보기
부트로더의 기본 구현 1 저 자 : 유영창 출판일 : 2003년 12월호 부트로더의 주 임무는 커널이 동작할 수 있는 환경을 구성하고 커널을 시작하는 것이다. 정의는 간단하지만 프로세서를 정상적으로 동작시켜야 하기 때문에 그리 만만한 일이 아니다. PXA255 프로세서에서 동작하는 이지부트 프로그램은 두 부분으로 나눠져 있다. 최소한의 환경 설정을 하는 start 프로그램 부분이 있으며, 커널이 부팅하도록 지원하고 개발의 편리함을 제공하는 main 프로그램이 있다. start 프로그램은 모두 ARM 어셈블러로 구성돼 있고 스택이 없기 때문에 다중 호출도 하지 못하는 가장 열악한 환경의 프로그램이다. 이번 호에는 이지부트의 시작점인 start.S를 집중적으로 살펴보고자 한다. 연+재+순+서 1회 2003.10 | 임베디드 프로그래.. 더보기
보드를 살려보자-6 저 자 : 유영창 출판일 : 2003년11월호 == Makefile 리눅스에서 동작하는 gcc는 기본적으로 make 유틸리티를 사용하여 컴파일한다. RAD 툴을 사용하던 프로그래머라면 이 make 유틸리티가 다소 어렵게 느껴질지 모르지만 리눅스 프로그래머거나 기존 펌웨어 프로그래머라면 항상 접하는 유틸리티이다. 리눅스에서 사용되는 make 유틸리티는 매우 유용한 도구이고 개념만 익히고 나면 쉽다는 것을 알 수 있다. make 유틸리티는 기본적으로 Makefile이라는 이름을 갖는 파일을 필요로 한다. 이 Makefile이 바로 컴파일에 관련된 모든 조건을 기록해 놓는 파일이다. 보통 이 Makefile은 구성이 비슷하기 때문에 한번 자신만의 구성을 만들면 이후에 조금씩 수정해서 쓰면 된다. make에 관.. 더보기
보드를 살려보자-5 저 자 : 유영창 출판일 : 2003년11월호 == start.S 어셈블러 에서 가장 먼저 보이는 것은 (1)인데, 이렇게 선언되면 이후 코드의 어드레스 영역이나 기타 조건은 링커 스크립트에 선언된 .text라는 선언에 영향을 받는다. 일반적으로는 프로그램 코드 영역을 의미한다. 하드웨어 리셋이 발생하면 ARM은 0x00000000번지의 명령을 수행한다. 이 번지는 링커 스크립트에 의해서 _start 라벨에 맵핑된다. 좀더 정확히 말하면 링커 스크립트에서 .text에 대해 0x00000000번지에 할당되어 있기 때문이고 _start 라벨이 가장 먼저 기술되었기 때문이다. 이 _start가 0x00000000번지이기 때문에 이 라벨 이후에 인터럽트 벡터 테이블이 들어간다. 그래서 각 벡터 테이블이 수행할 .. 더보기
ARM 부트로더 제작기 보드를 살려보자-1 저 자 : 유영창 출판일 : 2003년11월호 임베디드 시스템에서 하드웨어 설계가 끝나고 제작 후 샘플 보드가 나왔을 때 가장 먼저 하는 것이 보드에 대한 검증이다. 필자가 다니는 회사에서는 이것을 ‘보드 살리기’라는 말로 표현한다. 이 보드 살리기는 운이 좋으면 바로, 운이 나쁘면 언제 끝날지 모르는 피 말리는 시간이 필요하다. 이런 현상이 발생하는 이유는 문제의 원인이 하나가 아니고 여러 가지가 혼재하기 때문이다. 어떤 문제를 해결하는 가장 빠른 방법은 문제의 종류를 구분하는 것이다. 그런데 이 경우에는 이 자체도 매우 어렵다는 것이다. 하드웨어 문제인가? 소프트웨어 문제인가? 때문에 보드 살리기에 필요한 과정을 살펴보고 부트로더와의 관계를 살펴보자. 연+재+순+서 1회 2003.10 | 임베디드 프.. 더보기
임베디드 프로그래머와 부트로더-5 저 자 : 유영창 출판일 : 2003년 10월호 == ARM 프로세서 PXA255는 앞서 언급했듯 ARM 계열이다. 삼성이나 다른 회사에서 만든 프로세서가 ARM 코어를 라이선스한 것과는 다르게 아예 설계 자체를 사서 인텔 자사의 기술을 더한 프로세서이다. 그러나 결국은 이것도 개발자 입장에서 보면 ARM의 한 계열로 봐도 무방하다. 이 프로세서를 이해하면 ARM 코어를 사용하는 다른 프로세서들도 어느 정도 이해가 가능하다 그렇다면 ARM이란 것은 어떤 것일까? 아무래도 이 연재가 ARM용 부트로더를 작성하기 위한 것이므로 ARM 프로세서에 대해 모르고 갈 수는 없다. 그래서 ARM에 대해 잠깐 살펴보자. 우리가 알고 있는 펜티엄은 인텔에서 제작하고 있는 프로세서이다. 하지만 ARM에서 만든 ARM 프로.. 더보기
임베디드 프로그래머와 부트로더-4 저 자 : 유영창 출판일 : 2003년 10월호 == 상태 표시·메시지 표출·명령 입력 및 처리 기능 보드를 시험하는 과정에서 진행된 위치나 상태를 알려주는 기능은 거의 필수적이다. 예전에 동료 한 사람이 펌웨어 프로그램에 자칭 청진기 기능이라고 하는 메모리나 기타 상태를 보여 주는 기능을 항상 넣어 놓고 프로그램을 디버그했다. 당시에는 에뮬레이터가 일반화되어 있지 않기 때문에 이런 기능을 넣어야 했다. 지금도 상황에 따라 이런 기능을 넣어야 프로그램 디버깅이 편하다. 초기에 시리얼 디바이스 초기화가 힘든 상태에서는 LED를 점멸시키거나 LED를 이용해 진행 표시를 한다. 이후 시리얼 디바이스가 초기화되면 시리얼 디바이스를 이용해 프로그램 상태나 기타 메시지를 표출한다. 또한 특정한 문자열을 입력받은 후.. 더보기
임베디드 프로그래머와 부트로더-3 저 자 : 유영창 출판일 : 2003년 10월호 == 리눅스 커널의 구동 환경 앞서 잠깐 언급했지만 임베디드 시스템에서 리눅스 커널이 원활하게 동작하기 위한 최소 조건이 있다고 했다. 물론 절대적인 것은 아니지만 필자의 현장 경험상 다음과 같은 조건은 충족돼야 한다. ◆ 32비트 프로세서 ◆ 8MB 램(일반적으로 SDRAM을 사용한다) ◆ 8MB 롬(일반적으로 플래시를 사용한다) ◆ 시리얼 포트 1개 이 정도 사양만 있어도 리눅스 커널이 동작한다. 더 이하 사양의 시스템에 리눅스 커널을 올려 동작시킬 수도 있지만 응용 프로그램이 조금만 커져도 문제가 발생하고 프로그램 작성시 상당한 주의를 요한다. 여기에 한 가지 더 조건을 붙인다면 MMU(Memory Management Unit) 즉 메모리 관리 장치의.. 더보기
임베디드 프로그래머와 부트로더-2 저 자 : 유영창 출판일 : 2003년 10월호 == 임베디드 시스템 개발자의 고민 필자가 다니는 회사의 한 개발자는 처음 배운 프로세서가 32비트 원칩 프로세서이다. 특정한 장비 개발 건으로 8비트 원칩을 다룰 일이 생겼는데 프로세서 매뉴얼을 보더니만 씨익 웃고서 “정말 간단한 구조를 가졌네요” 하는 것이다. 필자는 조금 놀랐다. 왜냐하면 예전에 8비트 원칩을 보고 매우 복잡하다는 생각을 많이 했기 때문이었다. 물론 이전에는 Z-80이나 6502 같은 좀더 단순한 프로세서만 보다가 8비트 원칩을 보았기 때문이기도 하다. 문제는 필자와 같이 기존 8비트 원칩 프로세서를 다루던 개발자들이 32비트 원칩 프로세서를 보면 매우 복잡해 보인다는 것이다. 8비트 원칩 프로세서가 다루던 4MHz와는 차원이 다르게 .. 더보기
임베디드 프로그래머와 부트로더-1 임베디드 프로그래머와 부트로더-1 저 자 : 유영창 출판일 : 2003년 10월호 필자는 이 세상에 PC라는 시스템이 나오기 전에는 임베디드 시스템이라는 구별이 따로 없었던 것으로 기억한다. 또 한 가지 ‘펌웨어’라는 단어도 별로 사용하지 않았다. 그러다가 PC가 나온 후 어느 정도 시간이 지나면서 임베디드 시스템이라는 말이 사용되기 시작했고 또한 펌웨어라는 단어를 접하게 되었다. 임베디드(embedded)를 인터넷의 야후 사전에서 찾아보면 이렇게 나온다. embed[imbd, em-] vt. (-ded; -ding) [1] 깊숙이 박다, 파묻다 [2] (마음 속 등에) 깊이 간직하다((in)) [3]【언어수학】 끼워 넣다 임베디드 시스템을 통상적으로는 내장 시스템이라고 말한다. 하지만 필자는 PC 이외.. 더보기