임베디드 레시피 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성분의 합..
알고리즘 :: 백준 :: 4179 - 불!
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악행 R, 열 C (1 ≤ R, C ≤ 1000)지훈이 위치는 오직 1개탈출할 수있다면 탈출까지 걸린 최소시간없다면 "IMPOSSIBLE" 출력✏️ 문제풀이동시성 구현이 문제에서 가장 까다로운건 '동시성'을 어떻게 해결할지에 대한 고민입니다. 불과 지훈이는 동시에 이동하기 때문입니다.기존 BFS를 돌릴 때, 우리는 큐가 빌 때까지 돌리기 위해 `while(!q.empty())`를 관용구 처럼 사용했습니다.하지만, 이번에는 다릅니다. 현재 시간에 큐에 들어있는 요소들을 처리하는 동안 다음 시간에 이동할 예정인 칸들이 큐에 들어오기 때문입니다. 이것들은 '지금' 처리하면 안 되겠지요.이러한 문제에서 '지금', '현재' 큐에 들어있는 요소만 처리하기 위해서 for..
알고리즘 :: 백준 :: 16234 - 인구 이동
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악땅 크기 N×N (1 ≤ N ≤ 50)L ≤ 인구 차이 ≤ R (1 ≤ L ≤ R ≤ 100)✏️ 문제풀이문제에 인구 이동 로직이 나와있기 때문에 그대로 실수없이 구현하면 되는 문제입니다.인구 이동 과정은 ① 연합 만들기 - ② 인구 이동 - ③ 인구 이동 ? 시간 증가 : 종료 후 정답 출력으로 요약할 수 있습니다. 코드로 간략하게 나타내면 다음과 같습니다.while (true) { // 1. 연합 만들기 for (int y = 0; y  연합은 임의의 시작점을 기점으로 DFS를 1회 돌리면 만들 수 있습니다.갈 수 있는 모든 국가에 방문표시 및 외부 배열에 좌표를 저장합니다. 이렇게 연합이 만들어지면, 인구 이동을 실시합니다. 모든 점을 검사했는데..
알고리즘 :: 백준 :: 2589 - 보물섬
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악가로, 세로 ≤ 50✏️ 문제풀이육지칸 중에서 서로 다른 두 점을 골랐을 때, 가장 먼 거리를 구하는 문제입니다.이때, 일부러 돌아가서는 안 되고, 무조건 최단거리로 갔을 때의 거리 기준입니다. 두 정점 사이의 최단거리를 구해야 하므로 가장 먼저 BFS를 떠올립니다. 로직은 다음과 같습니다.모든 육지칸의 좌표를 `queue>`에 저장합니다.이 큐가 모두 빌 때까지 while문을 돌리는데,각 육지칸을 시작점으로 BFS를 돌립니다.BFS를 하면서 외부 배열에 방문여부 및 거리를 기록합니다.BFS를 마쳤다면 다시 전체 맵을 검사해 가장 거리가 길 때를 찾고 답을 갱신합니다.위 로직을 코드로 구현하면 다음과 같습니다.for (const auto& land : la..
알고리즘 :: 백준 :: 15686 - 치킨 배달
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악크기가 N×N인 도시, N(2 ≤ N ≤ 50)최대 치킨집 개수 M(1 ≤ M ≤ 13)집의 개수 ≤ 2NM ≤ 치킨집의 개수 ≤ 13도시의 치킨 거리의 최솟값✏️ 문제풀이우선, 문제를 bruteforce로 풀 수 있는지 확인하기 위해, 최악의 경우 몇 번 연산이 필요한지 생각해봅시다.N이 50이고, 총 치킨집이 13개 있으며, 여기서 6개 (또는 7개)를 뽑는 경우라고 생각합시다.치킨집을 뽑는 총 경우의 수는 $_13C_6 = 1,716$입니다.각 경우의 수마다 최대 100개의 집에 대해 치킨거리를 검사합니다.∴ 충분히 시간제한 1초 내로 문제를 풀 수 있다고 판단됐으니, 바로 로직을 생각하러 넘어갑시다.A개 중에서 B개를 뽑는 조합 (combinatio..
[요약] 임베디드 시스템 아키텍처, 다니엘 라카메라
·
Embedded
Chapter 1. 개요임베디드 시스템의 아키텍처는 MCU를 중심으로 주변장치(peripheral) 및 외부 세계와 통신하기 위한 특별한 인터페이스 모음입니다. 임베디드 SW의 핵심은 peripheral과의 통신입니다. 단순히 프로그래밍을 넘어 기초 전자공학지식, 회로도와 datasheet를 이해하는 능력, 로직 분석기 및 오실로스코프 같은 측정도구 활용능력을 이용해서 peripheral과의 안정적인 통신을 구현합니다.제한된 자원임베디드 SW 개발에는 자원이 제한 돼있기 때문에, 잘 정의된 테스트 케이스 & 성능 지표 탄탄한 workflow 기반의 개발이 필요합니다.MCU에는 MMU(Memory Management Unit, 물리주소→ 가상주소 변환 등 주소 관리해주는 핵심요소)가 없을 가능성이 높습니다..