이번 주부터 임베디드 C 프로그래밍을 배우기 시작하면서 임베디드 시스템 개요, C언어 기본, C언어 심화 이렇게 진도를 나가게 된다.
오늘은 임베디드 시스템 개요부터 C언어 기본까지 배우게 되었다.
앞에서 많이 다루었던 내용이고 특히 C언어교육은 중복되는 내용이 많았기에 그렇게 어렵지 않았고, 때문에 진도 또한 빠르게 나갔다.
1. MCU : CPU(Processor)와 각종 Peripheral Controller(주변장치 컨트롤러)들의 결합
2. CPU core : ALU(산술/논리 연산장치) + CU + Register 만으로 구성된 CPU의 핵심
- CU : 기계어를 분석하고 실행하기 위해 제어 신호를 순차적으로 발생시킴.
- Register : 연산이나 기타 목적으로 사용될 저장공간.
코어에 집적된 가장 빠른 메모리, Flip-Flop으로 구성됨.
메모리 계층에서 가장 빠른 속도로 분류된 (Chip Level)
범용/특수 목적 레지스터
- Cache : SRAM(Satic RAM)으로 구성되어 있다.
- 주기적으로 Charging(Refreshing)하는 데에 시간을 소모하지 않아 DRAM보다 속도가 빠르다.
- 고속의 CPU가 버스 속도와 메모리 속도에 의존적이다.
- MMU(Memory Management Unit)
-운영체제를 위해 가상 메모리를 지원한다.
- 메모리 보호, 변환
3. 교차개발 (Cross Development)
- 호스트 시스템(ex. PC 개인용 컴퓨터)에 개발 환경을 구성하고 타겟 시스템(개발 보드)전용의 실행 파일을 생성하여 타겟 시스템에 다운로드한다.
- Host system : 데스크탑과 같이 코드 작성과 디버깅을 위해 기본적인 I/O장치와 충분한 메모리, 운영체제가 갖춰진 시스템. host 시스템에서 Target을 위한 실행파일을 생성한다. (크로스 컴파일러 이용)
- Target system : 타겟이 되는 임베디드 시스템. 호스트 시스템에서 생성한 기계어를 구동하게 될 시스템
4. 크로스 컴파일러(Cross Compiler) : 다른 환경의 시스템에서 구동 가능한 실행 파일을 생성해 주는 소프트웨어.(컴파일러, 어셈블러, 링커 라이브러리 등으로 구성)
본래 고급언어로 작성된 소스 코드를 해당 Target 의 어셈블리 코드로 번역하는 것을 의미한다.
5. 컴파일 단계
11일 차에 진행했던 임베디드 시스템의 이해를 정리한 내용을 다시 보면 좋겠다.
- 전처리 : 컴파일 전에 전처리기로 처리되는 과정. #include 했던 헤더 내용과 define 매크로/상수를 소스파일에 복사하는 작업. (.i 로 임시 저장되었다가 삭제된다.)
- 컴파일 : 전처리 과정이 끝난 후 C코드를 해당 Machine의 명령어(instruction)(어셈블리어)로 번역. 잘못된 구문의 코드는 에러나 경고를 발생시킨다. 번역된 어셈블리 코드는 Machine을 실제 동작시키는 기계어와 1:1 대응한다.
- 어셈블 : 해당 Machine의 Assembly 코드도 기계어와 1:1 대응될 뿐, 직접 이해하고 실행할 수 없다. 따라서 어셈블을 통해 어셈블리 코드를 Binary 형태의 기계어(Machine Language)로 변환한다. -> object 파일 생성.
- 링크 : 어셈블러를 통과해서 생성된 object 파일은 단독으로 실행될 수 없다.
여러 개의 오브젝트 파일들과 라이브러리 파일들의 모든 코드와 데이터를 포함하는 새로운 오브젝트 생성.
각 오브젝트 파일들이 포함하던 코드와 데이터들은 Section 단위로 묶여 1개의 실행 가능한(Exucutable)파일이 된다.
링커의 역할 : 각각의 오브젝트 파일들이 링커를 통과할 때 같은 이름의 섹션끼리 놓여진다.
6. Section 단위
Section | Description |
text | 프로그램 코드 |
rodata | Read only 데이터, 상수 |
data | 초기화된 전역/static 변수들 |
bss | 비초기화된 전역/static 변수들 |
... | ... |
7. 실행 이미지의 적재 및 실행
- Loading view : 이미지가 적재되는 메모리 주소(ROM)를 이용하여 이미지의 각 Section을 바라보는 관점.
- Executing view : 이미지가 실행되는 메모리 주소(RAM)를 이용하여 이미지의 각 Section을 바라보는 관점.
- C언어 기본.
1. 상수 표현 방식.
2. 데이터 타입
3. 변수 사용 범위와 저장소
- 지역변수 (Local variable) : {} 블록 내에서만 유효한 변수, 다른 함수나 블록에서 사용불가. 스택에 저장된다. 초기화하지 않으면 쓰레기 값. 해당 블록을 벗어나면 변수들이 스택에서 소멸.
- 전역 변수 (Global variabl) : 프로그램 전체에서 유효한 변수. 모든 함수나 블록 내에서 사용 가능. Runtime시 메모리에 상주, 프로그램 종료 시 소멸. (초기화 => data section / 비초기화 => bss section)
- extern : 다른 파일에 해당 변수(또는 함수)가 존재할 것이라고 가정을 주는 선언. 실제로 변수가 선언되면서 메모리를 차지하는 것이 아니다. 해당 변수가 다른 파일에 있을 것이라는 extern선언만으로 컴파일 가능 (링크는 X)
* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.
'임베디드 개발(before) > IoT 임베디드 SW 개발자 양성과정' 카테고리의 다른 글
[18일차] 임베디드 C 프로그래밍 3 (0) | 2020.08.05 |
---|---|
[17일차] 임베디드 C 프로그래밍 2 (0) | 2020.08.04 |
[15일차] 취업 강의2 (0) | 2020.07.31 |
[14일차] 취업 강의 (0) | 2020.07.30 |
[13일차] 임베디드 프로그래밍(인터럽트) (0) | 2020.07.29 |