我試圖實現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指針。 有什麼建議嗎?
可以顯示PROC,您發送這些數據?你如何發送陣列單元的地址,長度和最大尺寸? – theWalker
由於它是一個使用內置API的整個DSP/BIOS LINK實現,因此很難描述該過程。 ARM端使用Pool_writeback()函數發送數據,並將地址從POOL_translAddr()從一個地址空間轉換爲另一個地址空間。發送給DSP的是塊的起始地址,它的長度和它們分別存儲到buf和長度。鏈接似乎工作正常(測試「int buf」)。這種使用虛空是否可以接受?如果buf [1]具有正確的值,並且buf [0]具有在buf後面直接分配的變量,那麼可能是我的C代碼中的錯誤? – user1410966
你的代碼「buf [3] = array [0]」是錯誤的(buf [3] = array [2])還是不是? – theWalker