各位大侠:
我们需要A8从文件中读取数据(约3MByte)到DSP,作为DSP上算法的一个输入,DSP算法处理后,再将处理结果输出给A8,也是约3MByte大小。
因此,我们使用DM8168 DVR_RDK系统上DDR内的“FrameBuffer”作为两个核间的数据共享buffer。
目前通过DSP申请了数据共享buffer,获取了该数据共享buffer在DSP上的地址。
请问A8上看到该数据共享buffer的地址是什么?即如何将该数据共享buffer的DSP的地址转换为A8的地址?
谢谢!
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
各位大侠:
我们需要A8从文件中读取数据(约3MByte)到DSP,作为DSP上算法的一个输入,DSP算法处理后,再将处理结果输出给A8,也是约3MByte大小。
因此,我们使用DM8168 DVR_RDK系统上DDR内的“FrameBuffer”作为两个核间的数据共享buffer。
目前通过DSP申请了数据共享buffer,获取了该数据共享buffer在DSP上的地址。
请问A8上看到该数据共享buffer的地址是什么?即如何将该数据共享buffer的DSP的地址转换为A8的地址?
谢谢!
你好,
对于A8就是把物理地址转换为了Linux下的虚拟地址。
在DVR RDK里面已经有相应的应用,请参考Osa.c里面的mmap函数。
hi,Chris
您说的是下面Mingw_support.c中的mmap()函数吗?
我们的版本还是DVRRDK_02.00.00.23。
谢谢!
hi,Chris
您说的是下面Mingw_support.c中的mmap()函数吗?
我们的版本还是DVRRDK_02.00.00.23。
谢谢!
void *mmap(void *addr, size_t len, int prot, int flags, int fd, int offset)
{
void *map = NULL;
HANDLE handle = INVALID_HANDLE_VALUE;
DWORD cfm_flags = 0, mvf_flags = 0;
switch (prot) {
case PROT_READ | PROT_WRITE:
cfm_flags = PAGE_READWRITE;
mvf_flags = FILE_MAP_ALL_ACCESS;
break;
case PROT_WRITE:
cfm_flags = PAGE_READWRITE;
mvf_flags = FILE_MAP_WRITE;
break;
case PROT_READ:
cfm_flags = PAGE_READONLY;
mvf_flags = FILE_MAP_READ;
break;
default:
return MAP_FAILED;
}
handle = CreateFileMappingA((HANDLE) _get_osfhandle(fd), NULL,
cfm_flags, HIDWORD(len), LODWORD(len), NULL);
if (!handle)
return MAP_FAILED;
map = MapViewOfFile(handle, mvf_flags, HIDWORD(offset),
LODWORD(offset), len);
CloseHandle(handle);
if (!map)
return MAP_FAILED;
return map;
}
hi,Chris
您说的是下面Mingw_support.c中的mmap()函数吗?
我们的版本还是DVRRDK_02.00.00.23。
谢谢!
void *mmap(void *addr, size_t len, int prot, int flags, int fd, int offset)
{
void *map = NULL;
HANDLE handle = INVALID_HANDLE_VALUE;
DWORD cfm_flags = 0, mvf_flags = 0;
switch (prot) {
case PROT_READ | PROT_WRITE:
cfm_flags = PAGE_READWRITE;
mvf_flags = FILE_MAP_ALL_ACCESS;
break;
case PROT_WRITE:
cfm_flags = PAGE_READWRITE;
mvf_flags = FILE_MAP_WRITE;
break;
case PROT_READ:
cfm_flags = PAGE_READONLY;
mvf_flags = FILE_MAP_READ;
break;
default:
return MAP_FAILED;
}
handle = CreateFileMappingA((HANDLE) _get_osfhandle(fd), NULL,
cfm_flags, HIDWORD(len), LODWORD(len), NULL);
if (!handle)
return MAP_FAILED;
map = MapViewOfFile(handle, mvf_flags, HIDWORD(offset),
LODWORD(offset), len);
CloseHandle(handle);
if (!map)
return MAP_FAILED;
return map;
}
你好,
如果你们的软件不是已经开发很久,我还是建议你使用最新版本的DVR RDK。
mmap是Linux自带的函数,网上搜索一下相关信息吧。
hi,chris
DM8168开发板我们是从第三方(TI小代理商)那里购买的。
我们曾向他们提出提供最新DVR-RDK开发包的需求,但是他们说提供不了。
TI网站上也没有找到下载的。
请帮忙指导一下如何获取最新版本的DVR-RDK。
谢谢!
mmap函数源码如下,应该是不正常的返回 MAP_FAILED 了,不知道为啥?
void *mmap(void *addr, size_t len, int prot, int flags, int fd, int offset)
{
void *map = NULL;
HANDLE handle = INVALID_HANDLE_VALUE;
DWORD cfm_flags = 0, mvf_flags = 0;
switch (prot) {
case PROT_READ | PROT_WRITE:
cfm_flags = PAGE_READWRITE;
mvf_flags = FILE_MAP_ALL_ACCESS;
break;
case PROT_WRITE:
cfm_flags = PAGE_READWRITE;
mvf_flags = FILE_MAP_WRITE;
break;
case PROT_READ:
cfm_flags = PAGE_READONLY;
mvf_flags = FILE_MAP_READ;
break;
default:
return MAP_FAILED;
}
handle = CreateFileMappingA((HANDLE) _get_osfhandle(fd), NULL,
cfm_flags, HIDWORD(len), LODWORD(len), NULL);
if (!handle)
return MAP_FAILED;
map = MapViewOfFile(handle, mvf_flags, HIDWORD(offset),
LODWORD(offset), len);
CloseHandle(handle);
if (!map)
return MAP_FAILED;
return map;
}