0

私は現在、再帰的に呼び出して Red Pitaya ボードからデータを (非常にゆっくりと) 受信する python プログラムを持っています。 redpitaya_scpi.scpi(192.169.1.100).rx_txt()

rp_remote_acquireを使用して、リング バッファーでより高いスループットを実現したいと考えています。

stackoverflow のおかげで./rp_remote_acquire、Red Pitaya (サーバー) と Linux マシン (クライアント) の両方で実行できます。

/tmp/outRed Pitaya で次のコマンドを実行するたびに、独自のコンテンツが得られます (これは、サーバー上のプログラムがそのハードウェアからデータにアクセスできることを示唆しています)。

rm /tmp/out
./rp_remote_acquire -m 3
cat /tmp/out

Red Pitaya (クライアント) から Linux マシン (サーバー) にデータを転送するために./rp_remote_acquire、次のパラメーターを使用して起動します。

サーバー ( 192.169.1.100): ./rp_remote_acquire -m 2 -a 192.169.1.102 -p 14000

クライアント ( 192.169.1.102): ./rp_remote_acquire -m 1 -a 192.169.1.100 -p 14000

どこ:

-m  --mode <(1|client)|(2|server)|(3|file)>
        operating mode (default client)

-a  --address <ip_address>
        target address in client mode (default empty)

-p  --port <port_num>
        port number in client and server mode (default 14000)

両方のマシンは互いに ping を実行でき、マシンは接続を確立できます (つまり、 0 をint connection_start(option_fields_t *options, struct handles *handles) at transfer.c:251返します)。

クライアントは、 transfer.cから次のコード スニペットを実行することになります。

533     while (!size || transferred < size) {
(gdb) n
534         if (pos == buf_size)
(gdb) n
539         if (pos + CHUNK <= curr) {
(gdb) n
552         memcpy(buf, mapped_base + pos, len);
(gdb) n
554         if (handles->sock >= 0) {
(gdb) n
552         memcpy(buf, mapped_base + pos, len);
(gdb) n
554         if (handles->sock >= 0) {
(gdb) n
555             if (send_buffer(handles->sock, options, buf, len) < 0) {
(gdb) n
569         pos += len;
(gdb) n
533     while (!size || transferred < size) {

クライアントは効果的に次のことを行っているようです(size = 0デフォルトで注意してください):

533     while (!size || transferred < size) {
552         memcpy(buf, mapped_base + pos, len);
552         memcpy(buf, mapped_base + pos, len);
569         pos += len;
        }

サーバーが停止するとすぐにクライアントが停止するため、この動作はプログラマーの意図のようです。

554         if (handles->sock >= 0) {
(gdb) 
556                 if (!interrupted)

sizeゼロに等しくないように変更しても、プログラムはこのループでスタックしません(=> より小さなパケット?)。

Red Pitaya (サーバー) から Linux マシン (クライアント) に (できれば) 送信されているデータにアクセスし、このデータをクライアント マシン上の Python プログラムで利用できるようにしたいと考えています。

私の質問:

  • ここで何が行われていて、どうすればデータにアクセスできますか?

  • rp_remote_acquireクライアントのメモリにコピーしているデータを何らかの方法で読み取る、クライアント上で 2 番目のプログラムを同期的に実行する必要がありますか?

4

1 に答える 1