2016-01-13 26 views
0

因此,我構建了一個redhawk模塊,並試圖通過它傳遞數據作爲測試。將他們的輸入和輸出端口如何使用到serviceFunction()中後,我能夠無誤地構建模塊(我更改了變量名稱以匹配我的端口)。當我將模塊放在白板上並將其連接起來時,它很好,但是一旦我啓動模塊,它就會崩潰。我添加了一行將輸入的流ID寫入控制檯,並且在崩潰之前將控制檯命中10到20次(它正確地寫入了提供信號的信號發生器的ID)。如果我繪製輸出端口,在崩潰之前沒有繪製任何內容(當我說崩潰時,我的意思是模塊剛剛從白板上消失,ide仍然在運行)。redhawk模塊服務功能使用示例崩潰

的服務功能是:

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 

嘗試重新啓動組件(因爲它只是採空而不是disapering)我收到以下錯誤時:

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 
+0

您是否嘗試過使用相同的設置,但使用波形而不是黑板? – pwolfram

+0

另外,您正在使用哪個版本的REDHAWK? – pwolfram

+0

不,我沒有嘗試過使用波形,但我會看看是否有所作爲(如果它確實不是一個好的解決方案,因爲它會爲模塊開發增加很多時間),現在我們只是試圖獲得我們需要構建的所有模塊。 REDHAWK的版本是1.10上6.7 – James

回答

1

在紅鷹2.0。 0我創建了一個名稱相同(freqModFrTest)和端口名稱(dataFloatIn和ComplexOut)的組件,並逐字使用了您的服務功能。但我沒有遇到任何問題。

這裏有一些事情要嘗試:

  • 清潔和重建的組成部分。沙盒(您稱爲白板)將運行已構建的二進制文件。您可能修改了代碼並在磁盤上擁有較舊版本的二進制文件。右鍵單擊該項目並選擇「清理項目」。然後右鍵單擊並選擇「Build Project」,這將確保二進制文件與您的源代碼相匹配。

  • 以調試模式運行組件。如果雙擊SPD文件,則在「概覽」選項卡下,出現「調試沙盒中的組件」。這將在調試環境下在黑板中啓動組件。您可以設置斷點並逐行瀏覽代碼。如果您沒有設置斷點,IDE會在發生致命錯誤時停止執行。如果存在問題(如無效內存訪問),IDE將提示您進入調試模式,並且應指出問題所在的代碼行。

  • 如果這些選項失敗,則可以啓用核心轉儲並使用GDB查看代碼中發生問題的位置。 GDB有很多在線教程,但要點是,在啓動IDE之前,您需要從同一終端輸入「ulimit -c unlimited」,啓動IDE。現在當你的組件死亡時,它將產生一個核心文件。

希望其中一個讓你走向正確的道路。

+0

感謝您的建議修復,我只是運行在另一臺計算機上運行相同的設置在虛擬機上的例子,它也沒有問題。由於所有問題都在我們決定重新格式化並進行乾淨安裝。 – James