多核DSP之雙核多映象之共享記憶體

2021-08-14 11:50:39 字數 1519 閱讀 9927

最近在做dsp雙核通訊,很讓人頭疼,看了很多ipc示例,發現是阻塞通訊,而openmp雖然可以做並行系統,但是題目要求是兩個核做互不想幹的內容、偶爾進行一下通訊傳遞一下資料就可以了。所以在經過大量調研以後,決定採用多映象ipc通訊。

採用的方法就是利用共享記憶體,採用的系統是sys/bios系統。

首先在cmd檔案中定義共享記憶體的大小:

/* 記憶體段描述 */

memory

ddr3的大小是512m,這裡分成三塊,256m的共享記憶體,以及各128m的單核使用的記憶體。記憶體的大小可根據實際情況自定義。

1.簡單的int型別的整數

對於簡單的整數,只需要在.c檔案中進行定義:

// 共享變數定義

extern

volatile

unsigned

int far flag;

然後在cmd檔案中,為該變數進行記憶體分配:

.ipc            >  0x80000004              start(flag)
在tsk中,可以直接呼叫flag,並為其賦值:

flag=1;
當然,為了把數值寫入記憶體而不是放在cache快取中,需要把快取寫入記憶體中:

cache_wb((void *)&flag, 4, cache_type_alld, true);
2.對於char型陣列

char型陣列實際上與int型整數類似,只不過分配記憶體的時候不能用ipc定義。

在.c檔案的定義:

unsigned

char confirm_img[100000];

在cmd檔案中的定義:

.ipc      >       0x86000004   start(confirm_img)
寫入資料的時候,我們可

memcpy(detect_img, image,  sizeof(image)* sizeof(int));
寫入記憶體。

3.結構體

結構體比較麻煩,之前寫了好幾次沒有成功,後來發現是快取沒有寫入記憶體。

結構體在.c檔案中的定義:

result_point_info result;
在cmd檔案中:

.ipc      >       0x82000004   start(result)
每次賦值,寫入後,要用

result.x=1;

cache_wb((void *)&result.x, 4, cache_type_alld, true);

方式進行寫入記憶體。

並非採用什麼通訊機制,就是把需要共享的資料放到共享記憶體中,另乙個核需要的時候,再去指定的位置讀取資料就可以了~~

ASAAC多核DSP處理板卡

asaac多核dsp處理板卡 泛騰科技高效能多核dsp asaac 處理板卡由4顆 tms320c6678處理器組成,主頻1.0ghz,2gb ddr3記憶體,該計算機板卡處理能 力強 傳輸頻寬高 擴充套件豐富,廣泛用於dsp效能驗證,訊號 平台,影象處理分析,網路資料收發等。產品特點 4顆 tms...

(多核DSP快速入門)0 前言 CCS的安裝

ccs是dsp的開發平台,也可以有用於dsp arm的片上嵌入式平台和達文西平台的軟體開發,裡面提供了兩種 模式,可以用連線硬體 或直接通過軟體 本教程主要是軟體 所以沒有任何硬體也可以測試自己的程式。這裡ccs比較經典的版本是3.3,很多同學可能用過這個,當然沒用於過也沒關係 我也沒用過,而且5....

DSP學習之排序器操作

同步取樣模式下,控制暫存器convxx的最高位不起作用,每個取樣保持緩衝器對convxx的低三位確定的引腳進行取樣,即,假如adcregs.adcchselseq1.bit.conv00 0x1,則adcina1由取樣保持器a取樣,adcinb1由取樣保持器b取樣,取樣可以同步進行,但是轉換不能同時...