質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
RTOS

RTOS(リアルタイムOS)は、リアルタイムシステムのためのOSです。実時間システムや実時間OSとも呼ばれ、時間的な制限のある処理を行うための機能・特性を備えています。組み込みシステムの制御に多く用いられています。

Q&A

解決済

1回答

688閲覧

FreeRTOSでネットワーク関連の複数の処理を複数のタスクで処理してもよいのでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

RTOS

RTOS(リアルタイムOS)は、リアルタイムシステムのためのOSです。実時間システムや実時間OSとも呼ばれ、時間的な制限のある処理を行うための機能・特性を備えています。組み込みシステムの制御に多く用いられています。

0グッド

0クリップ

投稿2022/08/24 01:32

ESP32で以下のようなタスクを実行するコードを書こうと考えています
しかし多くのサンプル例だとWifi接続とサーバは同一タスク
Wifi接続とOTAは同一タスクで書かれています
以下のように分割して処理を行うのは何か問題があるのでしょうか?

タスク1
Wifi 接続を開始し、切断したら再接続する処理

タスク2
TCPサーバ

タスク3
ArduinoIDEにあるサンプルOTAWebUpdaterのWifi接続部分以外の処理

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ネットワークアダプタ、という資源は一つしかないので、いくらタスクを増やしたところで、この資源を使用するところで順番待ちする/させる必要があります
ここのところでうまくしないと、接続開始前にサーバのアクセスを行ったり切断後になにかしようとしてコケたり、同時にアクセスしに行って通信データがごっちゃになったりします。
ってことでいくらタスクを増やしても構いませんが、それぞれのタスクの調停をうまくする、ということが大前提になります

投稿2022/08/24 01:50

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/08/24 02:10

回答ありがとうございます。 例えばWifiにつながってない状態で、 WiFiServer server(4000); server.begin(); WiFiClient client = server.available(); こういうコードが走ると問題がでる可能性があるということですね でもタスクを分けなくても、Wifiは突然切れることもありますが・・・。 問題が生じるかどうか知らべるには、使おうと思っているarduino-esp32 ライブラリのソースコードに全て目を通すしかないのでしょうか
y_waiwai

2022/08/24 02:30

複数のタスクで実行する関数やAPIは、再入可能(リエントラント)の必要があります。そこらへんの関数の解説で、リエントラント、とかスレッドセーフ、とかの記述がないかチェックしてみることですね またその他、複数のタスクからアクセスされる変数や関数なんかも、同時にアクセスされたときに破綻の無いように考慮する必要があります まあ、ここらへんのキーワードでぐぐって、勉強してみてください
退会済みユーザー

退会済みユーザー

2022/08/24 02:43

回答ありがとうございます。 何をどこから勉強すればいいのか、とっかかりが見つかって助かりました!
y_waiwai

2022/08/24 03:22

まあ、やり方としては、いかに複数からアクセスするって箇所を絞るかってのがポイントになるかと。 ネットワーク操作周りはややこしくなりそうなので、一つのタスクにまとめ、クライアントからのデータをセッションごとに別タスクに切り出していく、返信データはキューに貯めていって、ネットワークタスクで順次取り出して送信、と単純にできれば、データのキュー周りの関数さえリエントラントに出来れば、他の憂いはなくなります まあ、実際にはここまで単純化できないとか、想定外な処理がいくつも出て来るってのが常なので、実際にやってみるってしかないかと思います
退会済みユーザー

退会済みユーザー

2022/08/24 05:15

タスクで機能ごとに分けた方がシンプルかなと思いましたが、APIがハード的にもソフト的にも どんな資源を共有しているか勉強不足なので、まっずはサンプルの通りにして自分のアプリ上の データは把握しているので別タスクに切り出してしっかりキューなどを使って管理していきたいと 思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問