redhawk模块服务功能使用示例崩溃

时间:2016-01-13 18:52:03

标签: c++ redhawksdr

所以我正在构建一个redhawk模块并试图通过它作为测试传递数据。在将他们如何使用输入和输出端口的示例放入serviceFunction()之后,我能够构建没有错误的模块(我更改了变量名以匹配我的端口)。当我将模块放在白板上并将其连接起来它很好但是一旦我启动模块它就会崩溃。我添加了一行来将输入的流ID写入控制台,并且在崩溃之前它会在控制台上打10至20次(它正确地写入提供信号的信号发生器的id)。如果我绘制输出端口没有在崩溃之前绘制任何内容(当我说崩溃时我的意思是模块刚从白板上消失,ide仍然正在运行)。

服务功能是:

int freqModFrTest_i::serviceFunction()
{

    bulkio::InFloatPort::dataTransfer *tmp = dataFloatIn->getPacket(bulkio::Const::BLOCKING);
    if (not tmp) { // No data is available
        return NOOP;
    }
    else
    {
        std::cout<<tmp->streamID<<std::endl;
        std::vector<float> outputData;
        outputData.resize(tmp->dataBuffer.size());
        for (unsigned int i=0; i<tmp->dataBuffer.size(); i++) {
            outputData[i] = (float)tmp->dataBuffer[i];
        }

        // NOTE: You must make at least one valid pushSRI call
        if (tmp->sriChanged) {
            ComplexOut->pushSRI(tmp->SRI);
        }
        ComplexOut->pushPacket(outputData, tmp->T, tmp->EOS, tmp->streamID);

        delete tmp; // IMPORTANT: MUST RELEASE THE RECEIVED DATA BLOCK
        return NORMAL;
    }
}

是否有人有类似的问题或任何有关导致此问题的想法?

其他信息:

在pwolfram消化之后,我构建了一个sig生成器并将此组件构建成波形。从域中启动它时出现错误:

2016-01-14 07:41:50,430 ERROR DCE:aa1a189e-0b5b-4968-9150-5fc3d501dadc{1}:1030 - 
Child process 3772 terminated with signal 11

当尝试重新启动组件时(因为它只是停止而不是降级)我收到以下错误:

Error while executing callable. Caused by org.omg.CORBA.TRANSIENT:
Retries exceeded, couldn't reconnect to 10.62.7.21:56857
Retries exceeded, couldn't reconnect to 10.62.7.21:56857

1 个答案:

答案 0 :(得分:1)

在REDHAWK 2.0.0中,我创建了一个具有相同名称(freqModFrTest)和端口名称(dataFloatIn和ComplexOut)的组件,并逐字使用了您的服务功能。然而,我没有遇到任何问题。

以下是一些尝试:

  • 清理并重建组件。 Sandbox(您称之为白板)将运行已构建的二进制文件。您可能已修改了代码并在磁盘上安装了旧版本的二进制文件。右键单击项目并选择&#34;清理项目&#34;。然后右键单击并选择&#34; Build Project&#34;这将确保二进制文件与您的源代码匹配。

  • 以调试模式运行组件。如果您双击SPD文件,请在&#34;概述&#34;选项卡有&#34;调试沙箱中的组件&#34;。这将在调试上下文中在黑板中启动组件。您可以设置断点并逐行遍历代码。如果您没有设置断点,虽然IDE会在发生致命错误时停止执行。如果出现问题(如无效的内存访问),IDE将提示您进入调试模式,它应该指出问题所在的代码行。

  • 如果这些选项失败,您可以启用核心转储并使用GDB查看代码中发生问题的位置。 GDB有很多在线教程,但要点是在启动IDE之前,你要输入&#34; ulimit -c unlimited&#34;然后从同一个终端启动IDE。现在,当您的组件死亡时,它将生成一个核心文件。

希望其中一条让你走上正确的道路。