2012-05-22 136 views
0

我試圖實現ARM/DSP共享內存通信。 ARM端在共享內存上放置一個數據塊(let'sa將其命名爲array []),並將該塊的地址和大小發送到DSP端,然後再讀取它們。 在DSP側,C中的void指針傳遞結構

void * buf //address of block on shared memory 
int length //size of block 

但是當我嘗試閱讀我所得到的居然是:

buf[0] = length 
buf[1] = array[1] 
buf[2] = array[2] 
buf[3] = array[3] 
    : 
    : 
    : 

看起來好像長度可變overights數組的第一個單元格(這是有點奇怪),或者我錯誤地使用了void指針。 有什麼建議嗎?

+0

可以顯示PROC,您發送這些數據?你如何發送陣列單元的地址,長度和最大尺寸? – theWalker

+0

由於它是一個使用內置API的整個DSP/BIOS LINK實現,因此很難描述該過程。 ARM端使用Pool_writeback()函數發送數據,並將地址從POOL_translAddr()從一個地址空間轉換爲另一個地址空間。發送給DSP的是塊的起始地址,它的長度和它們分別存儲到buf和長度。鏈接似乎工作正常(測試「int buf」)。這種使用虛空是否可以接受?如果buf [1]具有正確的值,並且buf [0]具有在buf後面直接分配的變量,那麼可能是我的C代碼中的錯誤? – user1410966

+0

你的代碼「buf [3] = array [0]」是錯誤的(buf [3] = array [2])還是不是? – theWalker

回答

0

我認爲,該數據結構是:

buf[0] = length 
buf[1] = array[0] 
buf[2] = array[1] 
: 
buf[length] = array[lenght-1] 

,你必須預留緩衝區,用於lenght + 1

+0

如果是關於分配內存,那麼我可能會遇到數組尾部的問題,而不是開始吧? Buf應該指向數組而不是長度變量。 發送的存儲器塊是 結構{ INT行 INT COLS int數組[200] } datastr ,其具有202個整數的長度的結構。 808字節。 而且,由於datastr的地址被存儲到BUF 不應buf絕對[0] =行 BUF [1] = COLS BUF [3] =陣列[0] ... 代替BUF [0] = <與行不相關的東西> buf [1] = cols ... ? – user1410966

+0

我認爲我的想法是在代碼領域的答案 – theWalker