임베디드 레시피 Chapter 8. Debug
·
Embedded
지금까지 다뤘던 모든 내용 (Chapter 1~7)을 기반으로 디버깅을 하는 방법에 대해서 배우는 챕터입니다.디버깅하는 대상 시스템은• High exception vector를 사용합니다. EVT와 bootloader는 `0xFFFF_0000`번지에 있습니다.• 쉬운 시스템 예제를 위해    • ISR을 IRQ mode가 아닌 SYS mode에서 수행합니다.    • 사용자 애플리케이션도 SVC mode에서 수행합니다.• R13_SYS는 `0x00FE_E730`에서 시작합니다. 1. Reset exception1.1. 예제 1Reset exception이 발생했습니다. 당시의 context를 확인해 보니 다음과 같았습니다. 무엇이 원인일지 천천히 살펴봅시다.먼저 PC가 `0xFFFF_0000`, High..
임베디드 레시피 Chapter 7. Device control
·
Embedded
작은 것부터 큰 것까지 순서대로 register 제어 → memory 제어 → memory controller 제어 → LCD(peripheral device)를 제어하는 방법에 대해서 배워봅시다. 1. Device control1.1. Device를 control 하는 방법Device를 control 한다는 것은 임베디드 시스템 엔지니어로서 당연히 마음 설레고 즐거운 일입니다. Device는 보통 peripheral device, MCU 외부에 핀을 통해 달려있는 IC를 의미합니다. 통신방법은 어렵지 않습니다. 정해진 규칙에 따라 특정 핀에 신호를 어느 타이밍에 인가하고 일정시간 유지했다 땜으로써 peripheral device와 통신하는데 이러한 timing, bus interface는 datashe..
임베디드 레시피 Chapter 6. RTOS & Kernel
·
Embedded
1. Kernel 용어에 대해1.1. OS의 등장OS 등장배경을 간단하게 요약하면 다음과 같습니다.당시 개발자는 프로그램 자체 기능뿐만 아니라 프로그램이 온전하게 메모리에 올라가기 위해 필요한 일련의 복잡하고 까다로운 작업을 컴파일 단계부터 시작해서 스스로 해야만 했습니다.시간이 지나 대부분 프로그램들에 공통점이 있다는 점을 알게됩니다. 모든 SW는 키보드로 입력받고 모니터에 출력하는 등 I/O를 수행한다는 공통점이 있었습니다.메모리에 I/O 기능을 포함한 SW를 자동으로 로드하고 실행해 모니터에 출력하는 환경을 구축한 것이 OS의 시초입니다.즉, 태초의 OS는 DOS형태로 실행만 해주면 자동으로 메모리에 올려 실행하고 I/O를 가능하게 만들어주는 형태였습니다.1.2. Kernel vs OS정확하게 경계..
임베디드 레시피 Chapter 5. SW ② 스택
·
Embedded
Chapter 5의 아래 부분은 요약 및 정리에서 생략하도록 합니다.[※] Context와 AAPCS (Chapter 2에서 이미 설명했습니다.)[※] Pointer와 배열은 ~ Stack과 heap에 대한 소고 (p.365~385) (기초 CS 내용입니다.)[※] 함수가 불렸을 때 일어나는 일(p.395) (기초 CS 내용이고 본문에 설명이 잘 돼있습니다.) 임베디드 시스템에서 stack도 heap도 모두 초기화되지 않은 메모리상 (.bss 영역) 연속된 전역변수 배열이라 생각합시다. 그리고 스택은 높은주소에서 낮은주소로 아래를 향해 자라나는 full descending stack입니다. 예를 들어, stack[2000]이 있다고 하면, stack[1999] -> stack[1998] ... -> st..
임베디드 레시피 Chapter 4. ARM ② Assembly와 Bootloader
·
Embedded
교재(임베디드레시피)는 구체적인 문법을 설명하고 있지 않습니다. 또한, GNU gcc 기반이 아닌, ARM의 ADS를 기반으로 설명하시고 있습니다. 따라서, 어셈블리 문법에 대한 내용만큼은 다른 책을 보며 함께 공부하는 것이 좋을 것 같습니다.제가 참고했던 ARM 어셈블리 문법 기초를 배우는 링크와 파일입니다. (링크1)  (링크2)1. ARM Assembly1.1. ADS와 GNU GCC위 그림은 ARM의 ADS와 GNU 진영의 gcc 두 컴파일러의 어셈블리로, 보시다시피 문법과 구조가 거의 같습니다. Directive가 소문자 또는 대문자로 쓰인다던지, 맨 앞에 `.` 온점이 들어간다던지, 주석으로 `@`를 쓰냐 `;`를 쓰냐 정도의 미세한 차이가 있습니다. GNU ARM 어셈블리의 구조는 다음과 같..
임베디드 레시피 Chapter 3. SW ① 컴파일부터 로드
·
Embedded
1. Little endian과 Big endian프로세서가 메모리를 이해하는 순서 및 저장하는 방식은 Little endian과 Big endian 두 가지로 나뉩니다.이 방식을 이해하지 못하면, SW 디버깅이 불가능하므로 꼭 이해해야 합니다.[ 외우기 쉬운 표현법 1 ]Little endian: 낮은 주소에 낮은 바이트부터 읽으며 저장하는 방식Big endian: 낮은 주소에 높은 바이트부터 읽으며 저장하는 방식[ 외우기 쉬운 표현법 2 ]Little endian: LSB부터 읽으면서 저장하는 방식Big endian: MSB부터 읽으면서 저장하는 방식[ 외우기 쉬운 표현법 3 ]사람이 컴퓨터를 만듦 → 사람은 컴퓨터의 형님임 → 사람은 big brother, 컴퓨터는 little brotherLitt..
임베디드 레시피 Chapter 2. ARM
·
Embedded
본문에서는 ARM의 종류, 버전, 특징에 대한 상세한 얘기는 다루지 않고 중요한 부분만 배웁니다.ARM 프로세서의 동작방식을 이해하면, 전체 컴퓨터구조 및 다른 여러 프로세서에 대해서도 자신감이 붙습니다.ARM 공부는 마치 대중목욕탕 뜨거운 물과 같습니다. 아이들은 발끝 몇 번 담가보고 도망가는 너무 뜨거운 물이라도 어른들은 ‘시원하다’며 아무렇지도 않은 얼굴로 곧바로 들어갑니다. 마찬가지로 ARM은 잘 모르는 사람에게는 어디서부터 시작해야 할지 막막한 세상이지만, 막상 한 번 알고 나면 별거 아닙니다.ARM은 RISC 머신입니다. RISC는 명령어 길이가 고정돼있고, 명령어 종류가 많지 않고, Addressing 방법이 적어서 chip 복잡도가 낮고 크기도 작아지고, 전력소비도 줄어듭니다. Hard w..
임베디드 레시피 Chapter 1. HW ② 컴퓨터구성
·
Embedded
1. 논리회로논리적인 순서로 데이터를 제어해 digital 신호를 input으로 넣었을 때 원하는 output을 만들어내는 회로 사람들이 논리회로를 설계하다 보니 7가지 부분집합이 공통적으로 자주 사용되는 것을 파악했습니다. 이를 엮어 규칙으로 만들고 논리회로 소자로 만들었습니다. 각 논리소자를 gate라고 부릅니다.  예를들어, NOT은 트랜지스터 1개로 AND는 트랜지스터 2개를 직렬로 연결, OR은 2개를 병렬로 연결해서 만들 수 있습니다. 원하는 output을 만들 때는 카르노맵(Karnaugh map, K map)이라는 간단한 도구를 이용합니다. Input 개수 3, 4개까지는 충분히 손으로 최적화된 결과를 만들 수 있도록 도와줍니다.2. 레지스터2.1. Latch와 Flip Flop모든 회로를..
임베디드 레시피 Chapter 1. HW ① 회로이론
·
Embedded
1. 신호주파수: 진동운동에서 단위시간 당 같은것이 일어난 횟수 또는 빈도$cos(2 \pi ft)$ = 주파수가 f이고, 주기가 1/t인 주기함수f = 1Hz인 $cos(2 \pi t)$ 주기함수 - 시간영역에서는 1초에 1회 구불구불 오르내리는, 주파수영역에서는 1Hz 값으로 일정한 형태AC신호: 이러한 '주기적 특징' 및 주파수를 갖는 신호DC신호: 주파수를 갖지 않거나 주기가 한없이 0에 가까운 신호 푸리에변환(Fourier Transform): 모든 신호는 무한개의 주기함수의 합으로 나타낼 수 있습니다.어떤 신호 = 주기 T 주파수 성분 + 주기 (T+1) 주파수 성분 + ... + 주기 (T+N) 주파수 성분모든 신호는 주파수를 가진 AC신호와 주기가 0에 한없이 가까운 저주파인 DC성분의 합..