2414574_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2414574_ja-JP

2414574_ja-JP

BluetoothLEHost_Init() の実行中にタスクの切り替えを防止する方法はありますか?

こんにちは、

KW47 SDKのBluetoothLEHost_Init()について質問があります。

私のアプリケーションはFreeRTOS上で動作しており、いくつかのタスクはxTaskCreateStatic()を使って事前に作成しています。

これらのタスクを作成した後、BluetoothLEHost_Init() を呼び出して BLE を初期化します。SDKsをステップアップしていると、NBUとの通信中に初期化プロセスがタスク間イベント情報を待っていることに気づきました。その結果、BluetoothLEHost_Init() がまだ実行中で、関数呼び出し自体が戻る前に、他の優先度の低いタスクがスケジュールされ、実行が開始されます。

念のため申し上げますが、私が言及しているのは、BluetoothLEHost_Init() に提供されるホスト初期化完了コールバックのことではありません。私はそのコールバックを待つ必要はありません。

私が懸念しているのは、BluetoothLEHost_Init() が戻る前にタスク切り替えが発生することです。BluetoothLEHost_Init()関数呼び出し自体が戻るまで、他のアプリケーションタスクの実行を防ぎたいです。

私の質問は以下のとおりです。

・BluetoothLEHost_Init()を実行している間(例えばNBU通信待ち中)にタスク切り替えを防ぐための設定、API、または推奨される方法はありますか?
・BluetoothLEHost_Init()が完了し戻ることを他のタスクに譲ることなく確実にする方法はありますか?
・もしそのような方法が存在するなら、推奨される方法の指針や例を教えていただけますか?

私の目標は、BluetoothLEHost_Init()が戻るまで、アプリケーションタスクが通常のプロセッシングを開始しないようにすることです。

どんなアドバイスでも大変ありがたいです。

Re: Is there a way to prevent task switching while BluetoothLEHost_Init() is executing?

こんにちは、 @t_hosomi さん。お元気でお過ごしでしょうか。

以下に説明するように、異なるFreeRTOSアプローチで他のタスクの実行を保留することができます:

  • スケジューラを起動する前にタスクを作成した後、タスクを一時停止(サスペンド)すると、タスクが一時停止状態に始まるため、スケジューラが他のタスクに切り替わらなくなります。したがって、BLEの初期化から戻った後、それらの実行を再開します(vTaskResume)。
  • BLE初期化後に実行すべきすべてのタスクをブロックするイベントグループを作成し、イベントグループのビットを無期限に待つ設定をしてください。この方法は各タスクにジャンプし、イベントグループの待ち時間でブロックする必要があり、これによりBLE初期化タスクによってイベントグループのビットがクリアされるまでタスクは非アクティブになります。

どちらの選択肢も FreeRTOSリファレンスマニュアル を参照することをお勧めします。後者については、イベントグループの作成方法やイベント待ちタスクの設定を示すSDKの「freertos_event_cm33_core0」例を参照することをお勧めします。

この情報がご要望にお応えできるかどうか、お知らせください。

タグ(1)
評価なし
バージョン履歴
最終更新日:
1週間前
更新者: