« Wio Terminalを買ってみた | トップページ | PCとZYNQ Linux間のTCP/IP通信プログラム(2) »

2021.04.30

PCとZYNQ Linux間のTCP/IP通信プログラム(1)

私はCosmo-ZというDAQボードの開発をライフワークにしています。Cosmo-ZはZYNQでLinuxが動いているスタンドアローンの計測器で、APIが公開されているので、Linuxのアプリを書けばオリジナルな計測が可能になる、ということでした。

現状のCosmo-ZのAPIは以下のような構造になっています。APIの詳細はこちらにあります。

Cosmozapistack

このようなAPIを公開してきたのですが、やはり、ユーザは計測プログラムはZYNQ Linuxではなく、PC上で計測をしたりアプリを作ったりしたいのではないのかとも考えてきました。

 

そこで、PCで動く計測アプリが作れるようにと考えてきたのですが、Cosmo-Z APIの1個1個の関数をRPCにするのは関数名や呼び出し規約を登録が大変だし、APIの粒度を上げて抽象的な操作をできるようにするには新たなAPIの開発が大変だし、ということであまり進んできませんでした。

実際に粒度を上げてPythonのXMLRPCで接続しようとしたり、LabViewインタフェースを作ったりもしてきましたが、どれもうまくいきませんでした。うまくいかなかった原因というのは、XMPRPCはそもそも重いし、Pythonで計測データが格納された大きな配列を扱うのはデータのコピーが何度も発生して無駄が多いし、LabViewインタフェースは図面で描くのがわけがわからなくなったりというほかに、トリガ待ちという状態でブロッキングするか否かということも大きかったように思えます。

そもそもPythonとか既存のRPCのしくみを使おうと思っていたのは、私自身のTCP/IPソケットプログラミングに対する苦手意識からなのですが、高位の言語によるAPIの開発がうまくいかなかったので、LinuxとWindowsのソケットプログラムをもういちど頑張ってみました。

 

今回の設計では、思い切って大胆にレジスタリード、レジスタライト、メモリリード、メモリライトをTCP/IP越しにできるようにしてみました。

Cosmozapistack2

つまり、粒度の低い、逆に言えばきめ細かくC言語で制御できるAPIをWindows上で動かし、メモリ操作やレジスタ操作が発生した場合にTCP/IP経由で操作するというわけです。

 

|

« Wio Terminalを買ってみた | トップページ | PCとZYNQ Linux間のTCP/IP通信プログラム(2) »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Wio Terminalを買ってみた | トップページ | PCとZYNQ Linux間のTCP/IP通信プログラム(2) »