inflearn logo
知識共有
inflearn logo

FreeRTOSプログラミング 3 - カーネルソースの解析、1行ずつ読み解き、ボードで確認するRTOSの内部構造

FreeRTOSを使いながらも、vTaskDelayの一行の裏でカーネルが実際に何をしているのか、気になったことはありませんか?tasks.cとport.cを行番号に沿って読み進め、STM32ボード上でレジスタやメモリを確認しながら、リスト、コンテキストスイッチ、スケジューラ、キュー、メモリ管理まで、カーネルの内部を自分のものにします。

4名 が受講中です。

難易度 中級以上

受講期間 無制限

FreeRTOS
FreeRTOS
rtos
rtos
stm32
stm32
C
C
FreeRTOS
FreeRTOS
rtos
rtos
stm32
stm32
C
C

この講座で身につくこと

  • tasks.c・queue.c・port.cを行番号を追って読む方法

  • Cortex-Mのコンテキスト切り替え(PendSV・SVC・SysTick)とBASEPRIクリティカルセクションの原理

  • スケジューラーが次のタスクを選び、ティックごとにタスクを起こすプロセス

  • キュー・セマフォ・ミューテックス・通知・イベントグループ・タイマーの内部構造と違い

  • heap_4、スタック水位計、configASSERT・HardFaultで停止したボードの読み解き

講義を終えると得られること

FreeRTOSが自分のボード上で行う処理を、ソースコードの行番号を示しながら説明できるようになります。ボードが停止したりタイミングがずれたりしたとき、カーネルをブラックボックスとして推測するのではなく、ソースコードとメモリから証拠を探します。

一言でまとめると

リストとTCBから始め、コンテキストスイッチ、スケジューラ、ティック、クリティカルセクション、キューと同期、ヒープとスタック、障害解析、マルチコアまで。STM32F429I-DISC1ボードで実測しながら、FreeRTOS V10.3.1のカーネルソースを読み解きます。全39章、約6時間55分。

制作方法のご案内

この講座は、AIを活用した制作工程で作られています。ナレーションには講師本人の声を学習した音声合成を使用し、台本・グラフィック・紹介動画の制作にもAIツールを活用しました。企画と内容の確認は講師自身が行い、すべての実習結果は実際のSTM32F429I-DISC1ボードとSTM32CubeIDEで実行して確認した画面です。

vTaskDelay(1)は本当に1ミリ秒でしょうか?

FreeRTOSを何年使っていても、簡単には答えられない疑問があります。vTaskDelay(1)は実際にはどれくらい待つのか、セマフォにはなぜソースファイルがないのか、停止したボードのコールスタックがなぜvListInsertを指しているのか。APIドキュメントは何をするのかは教えてくれますが、どのように実現しているのかまでは教えてくれません。

この講義では、tasks.c、queue.c、port.cを実行順に行番号を追いながら読みます。そして、読んだ内容をボード上のメモリ、レジスタ、サイクル数で確認します。推測ではなく、証拠に基づいてカーネルを理解します。

5,000行を最初から読む必要はありません

tasks.cだけで5千行を超えます。この講義では、ファイルの順番ではなく、カーネルが実際に実行される順番に沿って、3段階で学んでいきます。

STEP 1

カーネルの骨格

リスト、TCB、初期スタック

STEP 2

カーネルの心臓部

コンテキストスイッチ、スケジューラ、ティック

STEP 3

カーネル上のツール

ロック、キュー、メモリ、障害を読み解く

なぜ今カーネルのソースなのか

STM32CubeMXは、チェックを一つ入れるだけでFreeRTOSをプロジェクトに組み込んでくれます。そのおかげでRTOSを使いやすくなりましたが、その一方で、内部で何が起きているのかを知らないまま使うケースも増えています。スタックサイズをどれくらいに設定するか、割り込み優先度をいくつにするか、なぜこの時点で停止したのかは、結局カーネルの動作を理解していなければ判断できません。コードを代わりに書いてくれるツールが増えるほど、そのコードがなぜそのように動作するのかを説明できる開発者の価値は、ますます高まります。

本講座では、以下の内容を学びます

カーネルの骨格と心臓

01 tasks.cの読み方とリスト構造

02TCBの解剖、状態変数なしで状態を把握する方法

03 最初のスタックの作り方とmain()から最初のタスクまで

04 PendSV・SVC・SysTickのコンテキストスイッチとBASEPRI

05タスクの選択、ティック、2つの遅延リスト

カーネル上のツールと障害の読み解き方

06 臨界区間とスケジューラの停止、2つのロック

07 キューの内部とxQueueGenericSendを1行ずつ

08 セマフォ・ミューテックス・継承・通知・イベント・タイマー

09 heap_4、スタック水位、タスク削除とメモリ

10 configASSERT・HardFaultの読み方、CMSISラッパーとマルチコア

18年にわたる現場での講義ノウハウ

2008年からサムスン電子、LG電子、SKハイニックス、現代モービスなどの企業や機関で開発者を教えてきました。現場で最もよく受けた質問は「それで、カーネルの中では何が起きているのですか?」でした。この講義は、その質問にソースコードの1行とボード上の1つの数値で答えられるように作りました。

APIには慣れたけれど、その下の仕組みが気になる方へ

タスクを作ってキューを使うことには問題がなくても、ボードが停止したりタイミングがずれたりしたとき、原因を勘に頼って探していたなら、この講義がその勘を根拠に基づくものへと変えてくれます。

この講義ならではの特徴

ソースを行番号で読み解きます

画面には実際のカーネルソースと行番号が表示され、隣ではその行が変更するリストとレジスタが連動して動きます。

ボードで確認します

各章で実習用ビルドをボードに書き込み、メモリやレジスタ、サイクル数を読み取って、ソースで見た内容を実証します。

実行順に

ファイル順ではなく、カーネルが動く順序で読みます。

よくある誤解を正す

各章で、よくある誤解と現場での活用方法を取り上げます。

V11とマルチコアまで

V10.3.1を基準に、SMPで変わる点も見ていきます。

実際の講義画面

tasks.cの2740行目とともに動く2つの遅延リスト

ボードメモリから直接読み取ったリストの終端を示すアドレス

vTaskDelay(1)が実際に待つ時間

コアが2つならカーネルはいくつか、AMPとSMP

どこから読むか、カーネルファイル別の行数

pxTopOfStackがTCBの最初のメンバーでなければならない理由、port.c 247行目

一度も実行されていないタスクの初期スタックを組み立てる

コンテキスト切り替え要求が2回でもPendSVは1回

xQueueGenericSendの911行目、同時に掛かった3つのロック

ボードから読み取ったイベントグループの待ちリスト

タスクを削除するとメモリはいつ解放されるのか、vTaskDeleteの2つの分岐

停止した位置を読み取るための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開発の基礎

こんにちは
guileschoolです。

経歴認証済み

3,629

受講生

263

受講レビュー

281

回答

4.7

講座評価

9

講座

仁荷大学で電子工学を専攻し、組み込みソフトウェア開発者として働いていました。

2008年から18年間、現場で講義を行ってきました。サムスン電子、LG電子、SKハイニックス、現代モービス、LIG D&A、ソウル大学校などの企業や機関で開発者を指導し、その経験を講義教材としてまとめました。

『RTOS』(2008)、『Linuxシェル』(2018)、『FreeRTOS』(2019)、『Cortex-M』(2022)、『ブートローダーベースの組み込みシステム』(2023)

YouTube ガイルスクール(https://www.youtube.com/@guileschool):組み込みと開発の講義

Macの自動化も15年間研究しています。Keyboard MaestroとAppleScriptで反復作業を減らす方法を教え、Final Cut Pro自動化プラグイン「Greenlight」を自ら開発して販売しています。自作のツールはGitHub(https://github.com/guileschool)で公開しています。

YouTube キャプテンマックボット(https://www.youtube.com/@captainmacbot):MacでAIと自動化を使う方法

講義のリクエストおよびその他のお問い合わせはguileschool@gmail.comまでお送りください。

もっと見る

カリキュラム

全体

41件 ∙ (7時間 3分)

講座資料:

授業資料
講座掲載日: 
最終更新日: 

受講レビュー

まだ十分な評価が集まっていない講座です。
ぜひ最初のレビューをお寄せください。

guileschoolの他の講座

知識共有者の他の講座はこちら

似ている講座

同じ分野の他の講座を見てみましょう!

期間限定セール

¥3,235,316

34%

¥30,800