포스트

코드 실행 과정

코드 실행 과정

코드 실행과정

소스코드(.c) -> 전처리(.i) -> 컴파일(.s) -> 어셈블(.o) -> 링크 -> 빌드

전처리 : 전처리 과정 컴파일 : 링크 : 라이브러리 함수, 외부 파일 연결

전처리

헤더파일, 매크로 중복 선언 방지(한번만 include) 헤더파일 전체 내용 긁어옴(컴파일 단계에서 필요 없는 내용 제거)

1
#pragma once  //이것보다 아래 ifndef define ~ endif 사용하기

헤더파일(.h) 이렇게 쓰는 게 좋음 ```c 표준(권장) //example.h #ifndef EXAMPLE_H #define EXAMPLE_H

#include “hello.h” void some_function();

#endif

1
2
3
4
5
6
7
8
9
<br>

매크로
전처리 과정에서 그자리로 들어감(텍스트 치환)
```c
#define A 100

int a = A;

매크로 함수 컴파일 단계 최적화 x

inline 함수

1
2
3
4
5
6
7
8
9
#define mypow(n) (n*n)

int ans1 = mypow(2+2)  //(2+2*2+2)

int ans2 = mypow((2+2)) //(2+2)*(2+2)   //원하는 결과

#define mypow2(n) n*n

int ans3 = mypow(2+2) //(2+2*2+2)

short circuit evaluation

컴파일

헤더 파일은 직접적(독립적)으로 컴파일 x

소스 파일을 통해 간접적으로 컴파일 o


소스코드

📌 Relocatable(재배치 가능 코드)
코드가 특정 주소에 고정되지 않고, 원하는 메모리 주소에 배치될 수 있는 형태
🚀 여러 개의 오브젝트 파일을 합쳐서 원하는 메모리 영역에 배치할 수 있도록 하기 위해 사용
📌 Locator(주소 할당)
Relocatable 코드가 특정 메모리 주소에 배치
링커(Linker)가 오브젝트 파일(.o)를 결합하여 최종 실행 가능한 주소를 할당(.elf)
링커 스크립트(.ld)를 사용하여 ROM, RAM, Flash 등의 메모리 영역을 설정 가능
🚀 Relocatable 파일을 실제 하드웨어 환경에 맞게 적절한 주소로 변환하는 과정
📌 Executable(실행 파일)
Relocatable 코드가 Locator를 거쳐 실제 메모리 주소를 할당받고 실행 가능한 상태(.hex, .bin, .elf)
🚀 실제 하드웨어에 배포되어 실행됨

📌 임베디드 SW 개발 흐름 1️⃣ 소스 코드 작성 → 2️⃣ 컴파일 (Relocatable 오브젝트 생성) → 3️⃣ 링킹 & 주소 배치 (Locator) → 4️⃣ 실행 파일 생성 (Executable) → 5️⃣ Flash에 업로드 후 실행 🚀