채널톡 아이콘

FreeRTOS 프로그래밍 3 - 커널 소스 분석, 한 줄씩 읽고 보드로 확인하는 RTOS 내부

FreeRTOS를 쓰면서도 vTaskDelay 한 줄 아래에서 커널이 실제로 무엇을 하는지 궁금하셨나요? tasks.c와 port.c를 줄 번호로 따라 읽고, STM32 보드에서 레지스터와 메모리로 확인하며 리스트, 문맥 전환, 스케줄러, 큐, 메모리 관리까지 커널 내부를 내 것으로 만듭니다.

4명 이 수강하고 있어요.

난이도 중급이상

수강기한 무제한

삼성
한화시스템/ICT

한화시스템/ICT

에 관심있는 사람들도 듣는 중!

삼성
한화시스템/ICT

한화시스템/ICT

에 관심있는 사람들도 듣는 중!

수강 후 이런걸 얻을 수 있어요

  • tasks.c·queue.c·port.c를 줄 번호로 따라 읽는 법

  • Cortex-M 문맥 전환(PendSV·SVC·SysTick)과 BASEPRI 임계구역의 원리

  • 스케줄러가 다음 태스크를 고르고 틱마다 태스크를 깨우는 과정

  • 큐·세마포어·뮤텍스·알림·이벤트 그룹·타이머의 내부 구조와 차이

  • heap_4, 스택 수위표, configASSERT·HardFault로 멈춘 보드 읽기

강의를 마치면 얻게 되는 것

FreeRTOS가 내 보드에서 하는 일을 소스 줄 번호로 설명할 수 있게 됩니다. 보드가 멈추거나 타이밍이 어긋날 때, 커널을 블랙박스로 두고 짐작하는 대신 소스와 메모리에서 증거를 찾습니다.

한 줄 요약

리스트와 TCB에서 시작해 문맥 전환, 스케줄러, 틱, 임계구역, 큐와 동기화, 힙과 스택, 고장 읽기, 멀티코어까지. FreeRTOS V10.3.1 커널 소스를 STM32F429I-DISC1 보드에서 실측하며 읽습니다. 39개 장, 약 6시간 55분.

제작 방식 안내

이 강의는 AI 기반 제작 공정으로 만들었습니다. 나레이션은 강사 본인의 목소리를 학습한 음성 합성이며, 대본·그래픽·소개 영상 제작에도 AI 도구를 활용했습니다. 기획과 내용 검수는 강사가 직접 했고, 모든 실습 결과는 실제 STM32F429I-DISC1 보드와 STM32CubeIDE에서 실행해 확인한 화면입니다.

vTaskDelay(1)은 정말 1밀리초일까요?

FreeRTOS를 몇 년 써 왔어도 쉽게 답하기 어려운 질문들이 있습니다. vTaskDelay(1)이 실제로는 얼마나 기다리는지, 세마포어에는 왜 소스 파일이 없는지, 멈춘 보드의 콜스택이 왜 vListInsert를 가리키는지. API 문서는 무엇을 하는지는 알려 주지만, 어떻게 하는지는 알려 주지 않습니다.

이 강의는 tasks.c, queue.c, port.c를 실행 순서대로 줄 번호를 짚어 가며 읽습니다. 그리고 읽은 내용을 보드의 메모리, 레지스터, 사이클 수로 확인합니다. 짐작이 아니라 증거로 커널을 이해합니다.

5천 줄을 처음부터 읽지 않습니다

tasks.c 하나만 5천 줄이 넘습니다. 이 강의는 파일 순서가 아니라 커널이 실제로 실행되는 순서를 따라, 세 단계로 올라갑니다.

STEP 1

커널의 뼈대

리스트, TCB, 첫 스택

STEP 2

커널의 심장

문맥 전환, 스케줄러, 틱

STEP 3

커널 위의 도구

잠금, 큐, 메모리, 고장 읽기

왜 지금 커널 소스인가

STM32CubeMX는 체크 한 번으로 FreeRTOS를 프로젝트에 넣어 줍니다. 덕분에 RTOS를 쓰기는 쉬워졌지만, 그 아래에서 무슨 일이 일어나는지 모른 채 쓰는 경우도 그만큼 많아졌습니다. 스택 크기를 얼마로 잡을지, 인터럽트 우선순위를 몇으로 둘지, 왜 이 지점에서 멈췄는지는 결국 커널 동작을 알아야 판단할 수 있습니다. 코드를 대신 써 주는 도구가 늘어날수록, 그 코드가 왜 그렇게 동작하는지 설명할 수 있는 개발자의 가치는 더 커집니다.

이런 걸 배워요

커널의 뼈대와 심장

01 tasks.c 읽는 법과 리스트 구조

02 TCB 해부, 상태 변수 없이 상태를 아는 법

03 첫 스택 꾸미기와 main()에서 첫 태스크까지

04 PendSV·SVC·SysTick 문맥 전환과 BASEPRI

05 태스크 고르기, 틱, 지연 리스트 두 개

커널 위의 도구와 고장 읽기

06 임계구역과 스케줄러 정지, 두 잠금

07 큐 내부와 xQueueGenericSend 한 줄씩

08 세마포어·뮤텍스·상속·알림·이벤트·타이머

09 heap_4, 스택 수위표, 태스크 삭제와 메모리

10 configASSERT·HardFault 읽기, CMSIS 래퍼와 멀티코어

18년 현장 강의 노하우

2008년부터 삼성전자, LG전자, SK하이닉스, 현대모비스 등 기업과 기관에서 개발자들을 가르쳐 왔습니다. 현장에서 가장 자주 받은 질문은 "그래서 커널 안에서는 무슨 일이 일어나나요?"였습니다. 이 강의는 그 질문에 소스 한 줄과 보드의 숫자 하나로 답하도록 만들었습니다.

API는 손에 익었는데, 그 아래가 궁금한 분께

태스크를 만들고 큐를 쓰는 데는 문제가 없지만, 보드가 멈추거나 타이밍이 어긋날 때 원인을 짐작으로만 찾아 왔다면 이 강의가 그 짐작을 근거로 바꿔 드립니다.

이 강의만의 특징

소스를 줄 번호로 읽습니다

화면에는 실제 커널 소스와 줄 번호가 나오고, 옆에는 그 줄이 바꾸는 리스트와 레지스터가 함께 움직입니다.

보드로 확인합니다

장마다 실습 빌드를 보드에 올리고, 메모리와 레지스터, 사이클 수를 읽어 소스에서 본 내용을 증명합니다.

실행 순서대로

파일 순서가 아니라 커널이 도는 순서로 읽습니다

흔한 오해 바로잡기

장마다 흔한 오해와 현장에서 쓰는 법을 짚습니다

V11과 멀티코어까지

V10.3.1을 기준으로 SMP에서 바뀌는 것도 봅니다

실제 강의 화면

tasks.c 2740번 줄과 함께 움직이는 지연 리스트 두 개

보드 메모리에서 바로 읽은 리스트의 끝 표시 주소

vTaskDelay(1)이 실제로 기다리는 시간

코어가 둘이면 커널은 몇 개인가, AMP와 SMP

어디서부터 읽을까, 커널 파일별 줄 수

pxTopOfStack이 TCB 첫 멤버여야 하는 이유, port.c 247번 줄

한 번도 안 돈 태스크의 첫 스택 꾸미기

전환 요청이 두 번이어도 PendSV는 한 번

xQueueGenericSend 911번 줄, 동시에 걸린 세 가지 잠금

보드에서 읽은 이벤트 그룹 대기 리스트

태스크를 지울 때 메모리는 언제 돌아오나, vTaskDelete의 두 갈래

멈춘 위치를 읽기 위한 configASSERT 지도

실습 환경

기본 환경

  • STM32F429I-DISC1 보드

  • STM32CubeIDE, STM32CubeMX

  • FreeRTOS V10.3.1 (CMSIS-RTOS v2, heap_4)

  • 실습 프로젝트 zip 제공 (장마다 실습 번호만 바꿔 빌드)

보드가 없어도

  • 모든 측정 결과를 영상으로 보여 드립니다

  • 멀티코어 장은 V11.1.0 소스를 함께 읽습니다

자주 묻는 질문

Q. 보드가 꼭 있어야 하나요?

아닙니다. 소스를 읽는 화면과 보드에서 측정한 결과를 모두 영상으로 보여 드립니다. 직접 재현해 보고 싶다면 STM32F429I-DISC1 보드를 준비하시고, 강의에서 제공하는 실습 프로젝트를 빌드해 같은 측정을 해 보시면 됩니다.

Q. FreeRTOS 프로그래밍 1·2편을 먼저 들어야 하나요?

필수는 아닙니다. 태스크, 큐, 세마포어 같은 FreeRTOS API를 써 본 경험이면 충분합니다. 2편이 실무 고장을 증거로 고치는 강의라면, 3편은 그 고장이 생기는 커널 안쪽을 소스로 읽는 강의입니다.

Q. Cortex-M 구조를 잘 몰라도 따라갈 수 있나요?

강의에 필요한 만큼은 장 안에서 설명합니다. 더 깊이 알고 싶은 부분은 해당 장에서 ARM 아키텍처 참조 매뉴얼과 인프런 「ARM Cortex-M 프로세서 프로그래밍」 강의를 안내해 드립니다.

Q. 나레이션은 AI 음성인가요?

네. 강사 본인의 목소리를 학습한 음성 합성입니다. 대본과 실습 내용은 강사가 직접 기획하고 검수했으며, 실습 화면은 실제 보드에서 실행해 측정한 결과입니다.

이런 분들께
추천드려요

학습 대상은
누구일까요?

  • FreeRTOS API는 써 봤지만 커널 내부가 궁금한 개발자

  • RTOS 문제를 소스 수준에서 추적하고 싶은 분

  • FreeRTOS 프로그래밍 1·2 수강생

선수 지식,
필요할까요?

  • C 언어 포인터와 구조체

  • FreeRTOS API 사용 경험

  • STM32 개발 기본

안녕하세요
홍영기입니다.

커리어인증

3,629

명

수강생

263

개

수강평

281

개

답변

4.7

점

강의 평점

9

개

강의

인하대학교에서 전자공학을 전공하고, 임베디드 소프트웨어 개발자로 일했습니다.

2008년부터 18년 동안 현장 강의를 해 왔습니다. 삼성전자, LG전자, SK하이닉스, 현대모비스, LIG D&A, 서울대학교 등 기업과 기관에서 개발자들을 가르쳤고, 그 경험을 강의 교재로 정리했습니다.

『RTOS』(2008), 『리눅스 쉘』(2018), 『FreeRTOS』(2019), 『Cortex-M』(2022), 『부트로더 기반 임베디드 시스템』(2023)

유튜브 가일스쿨(https://www.youtube.com/@guileschool): 임베디드와 개발 강의

맥 자동화도 15년째 연구하고 있습니다. Keyboard Maestro와 AppleScript로 반복 작업을 줄이는 방법을 가르치고, Final Cut Pro 자동화 플러그인 Greenlight를 직접 개발해 판매하고 있습니다. 직접 만든 도구들은 깃허브(https://github.com/guileschool)에 공개하고 있습니다.

유튜브 캡틴맥봇(https://www.youtube.com/@captainmacbot): 맥에서 AI와 자동화를 쓰는 법

강의 요청 및 기타 문의는 guileschool@gmail.com으로 보내 주세요.

더보기

커리큘럼

전체

41개 ∙ (7시간 3분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!

홍영기님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

얼리버드 할인 중

₩20,110

34%

₩242,000

평생교육이용권 지원 강의