如何创建 C 代码以启动 RedHawk 应用程序
How to create C code to start RedHawk application
我已经使用 python 代码启动 RedHawk 应用程序,如下所示。
#!/usr/bin/python
from ossie.utils import redhawk
from bulkio.bulkioInterfaces import BULKIO
from time import sleep
DefaultDomainName = "REDHAWK_DEV"
domain_list = redhawk.scan()
dom = redhawk.attach(domain_list[0])
wave0 = dom.createApplication("/waveforms/rx_waveform/rx_waveform.sad.xml")
i=0
while True:
if not dom.devices[i].name in 'GPP':
break
i+=1
print("device number =", i)
dom.devices[i].connect(wave0.comps[0], usesPortName='out_data_rx', providesPortN
wave0.comps[2].connect(dom.devices[i], providesPortName='in_data_rx', usesPortNa
dom.devices[i].connect(wave0.comps[0], usesPortName='out_cnt_rx', providesPortNa
wave0.comps[2].connect(dom.devices[i], providesPortName='in_cnt_rx', usesPortNam
wave0.start()
dom.devices[i].start()
while True:
sleep(10)
这个python代码很慢,需要10秒。特别是"from ossie.util import redhawk"需要6秒。能把上面的python代码转换成可以高速启动的C代码吗?
您绝对可以用 C++ 重写它,因为您进行的几乎所有调用都是具有 C++/Python/Java 绑定的远程调用,但是您可能想先权衡一下。 python API 更容易使用,而且实际上并没有那么慢,就像我说的,它所做的大部分工作是对基于 C++ 的进程进行远程调用。导入 redhawk 的速度变慢(我相信)是由于它引用和导入的文件数量。 linux 内核在缓存这些方面做得很好,这意味着如果您再次执行它,您会看到速度的巨大提升。在下面的示例中,我强制内核删除其缓存并显示两个连续 运行s.
之间的速度差异
[ylbagou@axios tmp]$echo "from ossie.utils import redhawk" > testing.py
[ylbagou@axios tmp]$sudo bash -c 'sync; echo 1 > /proc/sys/vm/drop_caches; echo 2 > /proc/sys/vm/drop_caches; echo 3 > /proc/sys/vm/drop_caches'
[ylbagou@axios tmp]$time python testing.py
real 0m4.670s
user 0m0.178s
sys 0m0.098s
[ylbagou@axiosws-ylb1(0) tmp]$time python testing.py
real 0m0.181s
user 0m0.145s
sys 0m0.036s
因此,如果您必须在启动时执行此操作并且必须满足特定的时间限制,那么 C++ 可能会工作,但如果您可以忍受第一个 运行 比 python 花费更长的时间API 是要走的路。
我已经使用 python 代码启动 RedHawk 应用程序,如下所示。
#!/usr/bin/python
from ossie.utils import redhawk
from bulkio.bulkioInterfaces import BULKIO
from time import sleep
DefaultDomainName = "REDHAWK_DEV"
domain_list = redhawk.scan()
dom = redhawk.attach(domain_list[0])
wave0 = dom.createApplication("/waveforms/rx_waveform/rx_waveform.sad.xml")
i=0
while True:
if not dom.devices[i].name in 'GPP':
break
i+=1
print("device number =", i)
dom.devices[i].connect(wave0.comps[0], usesPortName='out_data_rx', providesPortN
wave0.comps[2].connect(dom.devices[i], providesPortName='in_data_rx', usesPortNa
dom.devices[i].connect(wave0.comps[0], usesPortName='out_cnt_rx', providesPortNa
wave0.comps[2].connect(dom.devices[i], providesPortName='in_cnt_rx', usesPortNam
wave0.start()
dom.devices[i].start()
while True:
sleep(10)
这个python代码很慢,需要10秒。特别是"from ossie.util import redhawk"需要6秒。能把上面的python代码转换成可以高速启动的C代码吗?
您绝对可以用 C++ 重写它,因为您进行的几乎所有调用都是具有 C++/Python/Java 绑定的远程调用,但是您可能想先权衡一下。 python API 更容易使用,而且实际上并没有那么慢,就像我说的,它所做的大部分工作是对基于 C++ 的进程进行远程调用。导入 redhawk 的速度变慢(我相信)是由于它引用和导入的文件数量。 linux 内核在缓存这些方面做得很好,这意味着如果您再次执行它,您会看到速度的巨大提升。在下面的示例中,我强制内核删除其缓存并显示两个连续 运行s.
之间的速度差异[ylbagou@axios tmp]$echo "from ossie.utils import redhawk" > testing.py
[ylbagou@axios tmp]$sudo bash -c 'sync; echo 1 > /proc/sys/vm/drop_caches; echo 2 > /proc/sys/vm/drop_caches; echo 3 > /proc/sys/vm/drop_caches'
[ylbagou@axios tmp]$time python testing.py
real 0m4.670s
user 0m0.178s
sys 0m0.098s
[ylbagou@axiosws-ylb1(0) tmp]$time python testing.py
real 0m0.181s
user 0m0.145s
sys 0m0.036s
因此,如果您必须在启动时执行此操作并且必须满足特定的时间限制,那么 C++ 可能会工作,但如果您可以忍受第一个 运行 比 python 花费更长的时间API 是要走的路。