Поэтому я создаю модуль redhawk и пытаюсь просто передать данные через него в качестве теста. После помещения их примера работы с портами ввода и вывода в serviceFunction () я могу собрать модуль без ошибок (я изменил имена переменных, чтобы они соответствовали моим портам). Когда я кладу модуль на белую плату и связываю его, все нормально, но как только я запускаю модуль, он вылетает. Я добавил строку, чтобы записать идентификатор входящего потока в консоль, и он попадет в консоль 10–20 раз перед сбоем (он правильно записывает идентификатор генератора сигналов, который выдает сигнал). Если я строю выходной порт, то перед сбоем ничего не отображается (когда я говорю о сбое, я имею в виду, что модуль просто исчезает с белой доски, 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, я построил генератор сигналов и этот компонент в виде волны. При запуске из домена я получил ошибку:
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) и дословно использовал вашу сервисную функцию. Я не получил никаких проблем.
Вот несколько вещей, которые можно попробовать:
Очистите и восстановите компонент. Песочница (то, что вы называете доской) запустит двоичный файл, который был построен. Возможно, вы изменили код и имеете более старую версию двоичного файла на диске. Щелкните правой кнопкой мыши по проекту и выберите «чистый проект». Затем щелкните правой кнопкой мыши и выберите «Build Project», чтобы убедиться, что бинарный файл соответствует вашему исходному коду.
Запустите компонент в режиме отладки. Если дважды щелкнуть файл SPD, на вкладке «Обзор» появится «Отладка компонента в песочнице». Это запустит компонент на доске в контексте отладки. Вы можете установить точки останова и проходить по коду построчно. Если вы не установите точки останова, хотя IDE остановит выполнение при возникновении фатальной ошибки. Если есть проблема (например, недопустимый доступ к памяти), IDE предложит вам войти в режим отладки, и она должна указать строку в коде, где проблема.
Если эти параметры не работают, вы можете включить дамп ядра и использовать GDB, чтобы увидеть, где в коде возникает проблема. Для GDB есть много онлайн-руководств, но суть в том, что перед запуском IDE вам нужно будет набрать «ulimit -c unlimited», а затем с того же терминала запустить IDE. Теперь, когда ваш компонент умирает, он создаст файл ядра.
Надеюсь, что один из них заставит вас пойти по правильному пути.
Других решений пока нет …