最近在看dsplink 下的一个例子readwrite 有些疑问,大家讨论一下。readwrite 调用PROC_write PROC_read 去写,读 DSP的memory。例子usrGuide给出的调用格式为 ./readwritegpp readwrite.out 2280587264 1024 10000 0 2280587264 换算成16进制87ef 0000 处于dsp的code/data空间内,见下表:
base addr len name
0x87e0 0000 0x80 RESET VECTOR
0x87e0 0080 0xfff80 code/data
0x87f0 0000 0x5000 DSPLINK SHARED MEMORY0
0x87f0 5000 0x2b000 DSPLINK SHARED MEMORY1
0x87f3 f000 0xd0000 POOL Buffer Memory
数据来自ti-dvsdk_dm3730-evm_4_02_00_06dsplink_1_65_00_02dsplinkconfigBUILDCFG_OMAP3530_SHMEM.c
usrGuide 这样给定一个地址不怕覆盖掉dsp空间里面的其他数据吗?我觉得最理想的情况是有dsp部分开辟出一部分空间,将地址,大小传递给gpp端,如此批量交换数据比较安全可靠。问题1,但不知这样是否要用cmem ?做实验用0x87e0 0080作为入口地址,和预料中的一样game over!
问题2:
另外,有用过dsplink的童鞋(当然,不局限于OMAP3530平台不一样,只是地址映射不同而已,方法还是想他的)可否解释一下 DSPLINK SHARED MEMORY0 DSPLINK SHARED MEMORY1 是做什么用的?从名字上解释 dsplink 共享内存,是不是留给CMEM模块使用?用户可否直接使用这部分存储空间 比如将其作为readewrite 的入口地址交给PROC_read PROC_write 去读写呢?我试过,讲将87f0 f000 作为入口地址,可以正确执行,但不代表安全,万一程序运行过程,系统使用到这部分存储空间,那么后果将不可预料。网上这部分资料很少,基本上查不到。有用过的朋友还望不吝分享。我又用0x87f0
0000 作为readwrite入口地址,果不起然 gameover了,报出一堆地址相关的错误。
我不期待你能解决具体的问题,只想大家讨论讨论dsplink的学习的相关经验。
用0x87f0 0000 作为readwrite入口地址提示的错误:
注:platform为DM3730 (MOMAP3530系列)usrGuide给出的地址是 2414804992 即8FEF0000