• 締切済み

組み込み開発のタスク間通信

はじめまして。組み込みのタスク間通信について教えて下さい。 OSはITRONを使用しています。 TCP/IPのアプリケーションレイヤで動作するアプリを開発したです。 下位レイヤとのタスク間通信は以下の2つを考えています。 (1)リンクアップ、リンクダウン (2)フレーム送信、フレーム受信 以下のようにタスク起動後にイベント待ち状態にしてイベント発生時に 処理をさせたいです。 このイベントの通知方法で困っています。 (1)はwai_flg()を使って下位レイヤから通知させようとしています。 (1)の通知を受信してリンクアップなら自発でフレームを送信します。 その後の(2)でフレーム受信をどのように待てばよいかわかりません。 フレーム受信はTCP/IPのAPIで受信用APIが用意されています。 (仮:frm_rcv();) wai_flg();と同じようにイベントがあるまで待機状態になるのですが、 どのように埋め込めばいいのか悩んでいます。 void main() {  for(;;){   wai_flg(xxxxxx);   if(/*リンクアップ*/){    func_xxx1();   }   else{/*リンクダウン*/    func_xxx2();   }  } }

みんなの回答

  • R32C
  • ベストアンサー率39% (115/290)
回答No.1

世の中にあるμITRONのTCP/IPスタックは、千差万別で、これというものが決まっていないというのが実情だと 思います。 一応 ITRON TCP/IP 仕様というものがあり、TINETとよばれる呼ばれるTCP/IPスタック はありますが、TOPPERS/JSPなど以外で使うことも可能と思いますが、使われることも少ないかと 思います。 まず、貴殿のITRONがどのバージョンのどのベンダーのなにか、さらには、TCP/IPスタックはなになのか を明らかにすれば、それを使った人から、実際にあった回答が得られるかもしれません。 わかる範囲で一般的ケースで回答しますが、大体socketをベースに作られたTCP/IPスタックが 多く、実装レベルにより 1)ブロッキングのみ 2)ノンブロッキングが使えるもの に分かれると思います。 1)のブロッキングとは、受信にいって、タスクが待ち状態になるもの 2)のノンブロッキングは、受信が完了したら、指定関数が呼び出されるもの です。 1)前者ですと、送信、受信を別のタスクとして、その上位のタスクにタスク間通信する ことが一般的ではないかと思います。 2)後者ですと、指定関数から、イベントフラグ等で知らせることが可能になるはずです。