redhawk 模块服务函数使用示例崩溃
redhawk module service function usage example crashes
所以我正在构建一个 redhawk 模块并尝试将数据作为测试传递给它。在将他们关于如何使用输入和输出端口的示例放入 serviceFunction() 之后,我能够毫无错误地构建模块(我更改了变量名称以匹配我的端口)。当我将模块放在白板上并 link 时,一切正常,但一旦我启动模块,它就会崩溃。我添加了一行以将传入的流 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;
}
}
有没有人有类似的问题或任何ide关于什么会导致这种情况?
附加信息:
根据 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
在 REDHAWK 2.0.0 中,我创建了一个具有相同名称 (freqModFrTest) 和端口名称(dataFloatIn 和 ComplexOut)的组件,并逐字使用了您的服务函数。但是我没有遇到任何问题。
这里有一些尝试:
清理并重建组件。沙盒(您称之为白板)将 运行 已构建的二进制文件。您可能已经修改了代码并且磁盘上有旧版本的二进制文件。右键单击该项目并 select "clean project"。然后右键单击 select "Build Project" 这将确保二进制文件与您的源代码匹配。
运行 组件处于调试模式。如果双击 SPD 文件,在 "overview" 选项卡下有 "Debug a component in the sandbox"。这将在调试上下文中启动黑板中的组件。您可以设置断点并逐行遍历代码。如果您没有设置断点,尽管 IDE 将在发生致命错误时停止执行。如果出现问题(如无效的内存访问),IDE 将提示您进入调试模式,它应该指出问题所在的代码行。
如果这些选项失败,您可以启用核心转储并使用 GDB 查看代码中出现问题的位置。网上有很多 GDB 教程,但要点是在启动 IDE 之前,您需要键入 "ulimit -c unlimited",然后从同一终端启动 IDE。现在当你的组件死掉时,它会产生一个核心文件。
希望其中之一能让您走上正确的道路。
所以我正在构建一个 redhawk 模块并尝试将数据作为测试传递给它。在将他们关于如何使用输入和输出端口的示例放入 serviceFunction() 之后,我能够毫无错误地构建模块(我更改了变量名称以匹配我的端口)。当我将模块放在白板上并 link 时,一切正常,但一旦我启动模块,它就会崩溃。我添加了一行以将传入的流 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;
}
}
有没有人有类似的问题或任何ide关于什么会导致这种情况?
附加信息:
根据 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
在 REDHAWK 2.0.0 中,我创建了一个具有相同名称 (freqModFrTest) 和端口名称(dataFloatIn 和 ComplexOut)的组件,并逐字使用了您的服务函数。但是我没有遇到任何问题。
这里有一些尝试:
清理并重建组件。沙盒(您称之为白板)将 运行 已构建的二进制文件。您可能已经修改了代码并且磁盘上有旧版本的二进制文件。右键单击该项目并 select "clean project"。然后右键单击 select "Build Project" 这将确保二进制文件与您的源代码匹配。
运行 组件处于调试模式。如果双击 SPD 文件,在 "overview" 选项卡下有 "Debug a component in the sandbox"。这将在调试上下文中启动黑板中的组件。您可以设置断点并逐行遍历代码。如果您没有设置断点,尽管 IDE 将在发生致命错误时停止执行。如果出现问题(如无效的内存访问),IDE 将提示您进入调试模式,它应该指出问题所在的代码行。
如果这些选项失败,您可以启用核心转储并使用 GDB 查看代码中出现问题的位置。网上有很多 GDB 教程,但要点是在启动 IDE 之前,您需要键入 "ulimit -c unlimited",然后从同一终端启动 IDE。现在当你的组件死掉时,它会产生一个核心文件。
希望其中之一能让您走上正确的道路。