この記事はSpresense Advent Calendar 2025の2日目(12/2分)です。
この記事は何?
CQ出版社から発行されたトランジスタ技術2025年7月号 ソニーの超小型コンピュータ SpresenseのAppendix1 Spresense搭載6コア・マイコンを司るリアルタイムOS「NuttX」のメリット】の紹介を執筆しました。
この記事では執筆した章を紹介します。
記事の紹介
記事を書いた理由
Spresenseのプログラムの内部ではリアルタイムOS NuttXが動いています。
このNuttXはPOSIX準拠のためPthread関数が使えます。
Pthread関数が使えると以下の点でメリットがあると思いました。
- Pthread関数を使っているリッチなプロセッサ(例えばラズパイ)の既存アプリケーションを比較的簡単にSpresenseに移植できる
- SpresenseでPthread関数を使っている既存アプリケーションを比較的簡単にリッチなプロセッサ向け(例えばラズパイ)に移植できる
リッチなプロセッサ(例えばラズパイ)はPOSIX準拠のOS(Linux)を使っている前提とします。
POSIX準拠のPthread関数を使うことでアプリケーションの可搬性を高め、開発時間の短縮にもつながると思い紹介したいと思いました。
記事ではPthread関数を使ったマルチスレッドプログラミングのサンプルコードの解説をしています。
記事で紹介しているPthread関数
記事は以下のPthread関数をSpresenseで動くサンプルコードで紹介しています。
| 項目 | 機能 | Pthread関数 |
|---|---|---|
| スレッドの起動・終了待ち | ・スレッドを生成する ・スレッドの終了を待つ |
pthread_create pthread_join |
| ミューテックス | 排他制御 | pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_unlock |
| 条件変数 | ・イベント待ち ・イベント通知 |
pthread_cond_init pthread_cond_destroy pthread_cond_signal pthread_cond_wait |
| 条件変数 (タイムアウト付き) |
イベント待ち (タイムアウト付き) |
pthread_cond_timedwait |
| バリア同期 | 複数スレッドで処理の開始タイミングを揃える | pthread_barrier_init pthread_barrier_destroy pthread_barrier_wait |
最後に
以上、執筆記事の紹介でした。
トランジスタ技術2025年7月号 ソニーの超小型コンピュータ Spresenseの特集の中で私が執筆した章はNuttX、Pthread関数にフォーカスした珍しい章でした。
以下の章はPthread関数を使用していたので、事前知識を得るという意味で執筆した価値はあるかなと思っています。
-
第5章 速報!Spresense用マルチIMUの使い方&実力はPthread関数のpthread_createを使用
-
第6章 マルチIMUで撮影方角がわかるカメラの製作はPthread関数のミューテックス(pthread_mutex_init, pthread_mutex_lock, pthread_mutex_unlock)を使用
最後まで読んでいただきありがとうございました🙇♂️
この記事を読んでくださった方の何か参考になれば又は書籍を買って読んで下さった方の学びになれば嬉しいです。