カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810532
FAQカテゴリ(大) C-SPYデバッガ
最終更新日 2014-01-11

質問内容

TN95292: マルチスレッド環境の取扱い

回答内容

適用されるEW製品 :  ARM

問題
マルチスレッド環境で、標準ライブラリのマルチスレッドサポートを利用する。 (例えば、malloc の呼出し)

検証
システム/ファイルロックインタフェースを実装した後、mallocまたはfreeを呼んだあとロック関数が呼ばれているかどうか確認することができます。ブレークポイントを *Mtxinit、*Mtxlock、*Mtxunlock関数に設定し、mallocとfree関数をステップオーバします。

RTOSの使用
RTOSを使用している時は、本当にマルチスレッドサポートが必要かどうか検討する必要があります。

多くのRTOSはすでにこの機能を実装済みです。
Micrium uC/OS-II と III: uC/OS-III ユーザマニュアルの、"Thread Safety of the Compiler’s Run-Time Library".を参照してください。

Segger embOS: embOS CPU & Compiler specifics, chapter "Thread-safe system libraries"を参照してください。

Express Logicの ThreadX: TX_ENABLE_IAR_LIBRARY_SUPPORT  ThreadX と アプリケーションの両方に定義する必要があることに注意してください。

• 多くの RTOSは、RTOSに付属のヒープを使用することを勧めています。
  • Freescale MQX [_mem_alloc].
  • Express Logic ThreadX [tx_byte/block_allocate]

RTOS と C++ の使用
マルチスレッド RTOS と C++ コンパイルオプション
--guard_calls
を使用する場合、

プロジェクトメニュー > オプション > C/C++ コンパイラ > 追加オプション
で指定できます。

理由は C++ のコンストラクタ/デストラクタは、RTOSの複数のスレッドから呼ばれるかも知れないからです。

EWARM 6.60 以降のバージョンの場合
EWARM 6.60 以降のバージョンを使用している場合は, リンカオプション:
--threaded_lib
をイネーブルにする必要があります。

これには、
プロジェクトメニュー > オプション > 一般オプション > ライブラリ設定タブ
で、スレッドサポートを有効にするにチェックを入れます。.

EWARM 6.40 から 6.50
EWARM 6.40 から 6.50を使用している場合, リンカオプション (--redirect) を追加します。
プロジェクトメニュー > オプション > リンカ > 追加オプション
で追加することができます。

この情報は、
ヘルプメニュー > C/C++開発ガイド [DARM-9] の「マルチスレッドサポートを有効化」の章で説明されていません。
--redirect オプションの詳細は、
<DLib_Threads.h>
ファイルの中に書かれています。

RTOSのインプリメントであってもこれらのオプションを追加する必要があることに注意してください。下の「DLib_Threads.h」の情報とサンプルプロジェクトを参照してください。


全ての製品の名前は、それぞれの所有者の商標または登録商標です。

参考資料URL