-
Notifications
You must be signed in to change notification settings - Fork 3
Zynq サポート
Shuta Kimura edited this page Aug 23, 2019
·
11 revisions
TinyThreadsはXilinx Zynq-7000シリーズに搭載されているARM Cortex-A9に対応しています。Xilinx SDKに統合することで、新規プロジェクト作成時にBSPの一種として選択できるようになります。
- v1.5時点ではVivado 2018.3で動作確認しています。
- Xilinx SDKのインストール先を確認してください。Windowsならば
C:\Xilinx\SDK\2018.3
などです。 -
リリース一覧から必要なバージョンのzipまたはtarball(tinythreads-zynq-xxx.{zip,tar.gz})を取得し、
<SDKインストール先>/data/embeddedsw/ThirdParty/bsp/
に展開してください。 - Xilinx SDKがすでに起動している場合は、一度終了して起動しなおしてください。
- Application ProjectまたはBoard Support Packageプロジェクトの作成時に、OS platformの一覧から「tinythreads」を選んで下さい。
- プロジェクト作成後、必要に応じて、BSP Settingsのtinythreadsグループにある設定を変更してください。
グループ | 名前 | 説明 |
---|---|---|
features | enable_cond | 条件付き変数関連API(pthread_cond_* )を有効にします。 |
features | enable_mutex | ミューテックス関連API(pthread_mutex_* )を有効にします。 |
features | enable_sem | セマフォ関連API(sem_* )を有効にします。 |
features | enable_once | Onceコントロール関連API(pthread_once_* )を有効にします。 |
features | enable_rwlock | 無視されます。現段階ではreader-writerロックは未実装です。 |
features | enable_spin | 無視されます。現段階ではスピンロックは未実装です。 |
features | enable_sleep | スリープ関連API(sleep , usleep )を有効にします。 |
features | enable_profile | タスク切り替え回数カウントを有効にします。(デバッグ向け) |
features | enable_name | スレッド名設定機能を有効にします。(デバッグ向け) |
others | min_stack_size | デフォルトのスタックの大きさをバイト数で指定します。 |
others | strict_check | アサーションを追加し、異常動作時の検出箇所を増やします。 |
others | thread_safe_newlib | スレッドセーフなnewlibへのアクセスを有効にします。この設定を無効にするとRAM使用量を削減できますが、一部のAPIがスレッドセーフではなくなります。スレッドの処理内容が限定的であるなど、安全が担保されている場合のみ無効にしてください。詳しくは制約を参照ください。 |
others | enable_vfp_switch | VFPのコンテキスト切り替えを有効にします。この設定を有効にすると、複数のスレッドでFloating-point関連命令およびAdvanced SIMD関連命令が使用できます。 |
scheduling | preemption_enabled | プリエンプションを有効にします。 |
scheduling | preemption_interval | プリエンプションの間隔をミリ秒単位で設定します。 |
scheduling | priority_max | 優先度の最大値(最も優先度が低い)を指定します。有効な範囲は1~255です。 |
scheduling | priority_min | 優先度の最小値(最も優先度が高い)を指定します。有効な範囲は1~255です。 |
scheduling | priority_default | 優先度を明示的に変更しない場合の、デフォルトの優先度を指定します。有効な範囲は上記のmin~maxです。 |
scheduling | policy_default_fifo | デフォルトのスケジューリング方式をFIFOにします。この項目を有効にしない場合、デフォルトのスケジューリング方式はラウンドロビンになります。 |
- インストラクションモードについて
- ARMエンコーディングのみ対応。Thumbモードでは動作しません。
- ISRでのAPI利用に関して
- TinyThreadsが提供するAPIのうち、ISR(IRQハンドラ)内で使用が許可されているのは
sem_post()
のみです。 - 他の関数をISR内で使用した場合、動作は未定義です。
- TinyThreadsが提供するAPIのうち、ISR(IRQハンドラ)内で使用が許可されているのは
- アプリケーションでの割り込みの利用に関して
- TinyThreadsはチック割り込み生成のため、内部でXScuGicのインスタンスを保持しています。アプリケーション側で割り込み設定の実装を行う場合、
tth_get_xscugic_instance()
関数の戻り値で得られるXScuGicのポインタを用いて設定を行ってください。// 例 #include "bspconfig.h" /* For tth_get_xscugic_instance */ #include "xscugic.h" /* For XScuGic_xxx APIs */ void setup_interrupts() { XScuGic *InstancePtr = (XScuGic *)tth_get_xscugic_instance(); XScuGic_Connect(InstancePtr, ...); }
- TinyThreadsはチック割り込み生成のため、内部でXScuGicのインスタンスを保持しています。アプリケーション側で割り込み設定の実装を行う場合、
- スレッドセーフ設定に関して
-
tinyth.others.thread_safe_newlib
を無効にした場合、newlibの_impure_ptr
がスレッド毎に管理されません。そのため、newlibの関数を複数のスレッドから同時に呼び出した場合に、(たとえその関数がスレッドセーフだとマニュアルに書かれていても)予期しない動作をする可能性があります。
-
- ISRでのVFP利用に関して
- ISR内ではVFPを利用できません。(関連する命令を使用するとUndefinedExceptionを発生させます)
- スレッドでのVFP利用に関して
- others.enable_vfp_switchの設定値により振るまいが異なります。
- trueの場合、各スレッドで独立したVFPレジスタのコンテキストを持ちます。(必要に応じてコンテキストスイッチを行います)
- falseの場合、VFPレジスタのコンテキストスイッチは行われません。全スレッドがVFPレジスタを共有します。
- VFPレジスタのコンテキストスイッチは多量のメモリコピーを必要とする重いスイッチのため、VFP関連命令を初めて使用するタイミングまでコンテキストスイッチを遅延させる仕様となっています。
- others.enable_vfp_switchの設定値により振るまいが異なります。