그라운드 임베디드 유튜브 구독

노트

C 언어 노트

임베디드 펌웨어의 대부분은 아직도 C로 짭니다. 포인터와 비트 연산이 손에 익어야 그다음이 열립니다.

로드맵에서 보기 →
GROUND EMBEDDED · 정리 노트C 언어 01변수와 자료형자료형크기범위uint8_t8비트0 ~ 255int16_t16비트-32768 ~ 32767
C 언어

변수와 자료형: uint8_t를 쓰는 이유

int의 크기는 컴파일러마다 다릅니다. 임베디드에서 크기가 정해진 자료형을 쓰는 이유와 부호, 오버플로를 정리했습니다.

GROUND EMBEDDED · 정리 노트C 언어 02연산자와 형변환 1float v = adc * 3.3f / 4095.0f;// 의도대로 동작
C 언어

연산자와 형변환: 버그가 숨는 곳

정수 나눗셈, 암묵적 형변환, 연산자 우선순위. 컴파일은 되는데 값이 틀리는 코드의 원인을 정리했습니다.

GROUND EMBEDDED · 정리 노트C 언어 03제어문 1int main(void) { 2 init_clock(); 3 init_gpio(); 4 while (1) {
C 언어

제어문: 펌웨어가 무한 루프인 이유

if, switch, for, while로 흐름을 만들고, 임베디드 프로그램이 끝나지 않는 루프로 짜이는 이유를 봅니다.

GROUND EMBEDDED · 정리 노트C 언어 04함수와 스코프종류어디에언제까지지역 변수스택함수가 끝나면 사라짐전역 변수.data / .bss프로그램 끝까지
C 언어

함수와 스코프: 값 복사, 수명, 재귀

함수 인자는 복사되어 전달됩니다. 지역 변수와 전역 변수의 수명, 그리고 MCU에서 재귀를 피하는 이유.

GROUND EMBEDDED · 정리 노트C 언어 05배열과 문자열 1char msg[16]; 2snprintf(msg, sizeof msg, "T=%d", temp);// 크기…
C 언어

배열과 문자열: 버퍼 넘침의 원리

배열은 메모리에 연속으로 놓인 같은 자료형의 묶음이고, 문자열은 널 문자로 끝나는 char 배열입니다.

GROUND EMBEDDED · 정리 노트C 언어 06포인터 1uint32_t x = 10; 2uint32_t *p = &x;// x의 주소 3*p = 20;// 주소를 따라가서 값을 바꿈, 이제 x…
C 언어

포인터: 주소를 다루면 레지스터가 보인다

포인터는 주소를 담는 변수입니다. 특정 주소를 읽고 쓰는 것이 레지스터 제어의 전부라는 점을 정리했습니다.

GROUND EMBEDDED · 정리 노트C 언어 07포인터 심화와 함수 포인터 1typedef void (*handler_t)(uint8_t); 2handler_t on_rx = parse_command; 3on_rx(byte);// parse_command(byte) 실행
C 언어

포인터 심화와 함수 포인터

포인터 연산, 이중 포인터, 그리고 콜백과 상태 머신에 쓰는 함수 포인터를 정리했습니다.

GROUND EMBEDDED · 정리 노트C 언어 08구조체, 공용체, 비트필드 1struct { uint8_t a; uint32_t b; };// siz…
C 언어

구조체, 공용체, 비트필드

레지스터 묶음과 통신 패킷을 구조체로 표현하고, 메모리 정렬과 패딩이 왜 생기는지 확인합니다.

GROUND EMBEDDED · 정리 노트C 언어 09비트 연산 1reg |= (1u << n);// n번 비트 켜기 2reg &= ~(1u << n);// n번 비트 끄기 3reg ^= (1u << n);// n번 비트 뒤집기 4if (reg & (1u << n))// n번 비트 확인
C 언어

비트 연산: 켜고, 끄고, 뒤집기

AND로 지우고, OR로 켜고, XOR로 뒤집고, 시프트로 자리를 옮깁니다. 레지스터 제어의 기본 문법입니다.

GROUND EMBEDDED · 정리 노트C 언어 10volatile, const, static 1volatile uint8_t rx_done = 0;// ISR에서 1로… 2while (!rx_done) { }// volatile…
C 언어

volatile, const, static

최적화를 막는 volatile, 값을 고정하는 const, 범위와 수명을 바꾸는 static. 임베디드에서 가장 자주 묻는 키워드 세 개.

GROUND EMBEDDED · 정리 노트C 언어 11전처리기와 매크로 1#define SQ(x) x * x 2SQ(a + 1)// a + 1 * a + 1 로 펼쳐짐 3#define SQ(x) ((x) * (x))// 괄호로 감싸기
C 언어

전처리기와 매크로

#define, 조건부 컴파일, 헤더 가드. 매크로가 만드는 함정과 안전하게 쓰는 방법.

GROUND EMBEDDED · 정리 노트C 언어 12빌드 과정단계입력 → 출력하는 일전처리.c → .iinclude, defi…컴파일.i → .sC를 어셈블리로
C 언어

빌드 과정: 소스가 펌웨어가 되기까지

전처리, 컴파일, 어셈블, 링크를 거쳐 실행 파일이 되는 흐름과 링크 오류를 읽는 방법.