例子:从A8读入1080p的yuv420sp的数据给dsplink,在dsp 中建立一个link(做一些图像处理的工作),然后将yuv420sp的数据发送到videoM3做jpeg编码,然后在传递到A8;
步骤:
1)首先参考dsp下面的link,新建一个dsp算法link;
2)修改/mcfw/src_bios6/links_c6xdsp/SRC_FILES.MK文件,加入新增的dsp算法link的.c文件;主要是编译时调用
3)mcfw/interfaces/link_api/ 增加一个dsp link的头文件,方便其它地方调用,主要在A8建立link的时,需要调用dsp算法link的数据结构;还有dsp link的初始化函数和反初始化函数,在system里面调用(mcfw/src_bios6/links_c6xdsp/system/system_c6xdsp.c);
3.4)在A8中建立link,注册jpeg码流的回调函数;link的流程:A8->ipcFrameOutLink(A8)->ipcFrameInDsp(dsp)->dsp算法link->ipcFrameOutDsp(dsp)->ipcFramesInVideoM3(videoM3)->jpeg enc->ipcBitsOutVideoM3(videoM3)->ipcBitsIn(A8);
结论:
从A8正确的收到了编码后的jpeg图片;
大家也可以参考这篇文章写dsplink,以下内容转自这边博客,版权归该博客作者;TI8168 DSP算法开发流程http://blog.csdn.net/jiawenquan/article/details/20529581
helloWorldAlg_TI_ialg.c – 提供创建算法实例的顶层调用接口,以及处理输入输出帧时的process 调用接口,运行时的参数设置调用接口。
helloWorldAlg_TI_priv.h –算法的私有 Data structures, macros and function call declaration.
helloWorldAlg.h - 对‘Hello World’ Link可见的算法实例创建和process call(处理调用)的Data structures, macros and function call declaration
SRC_FILES.MK – Makefile to build the ‘Hello World’ algorithm.
helloWorldLink.h –This file has macros, data structure and function call declaration of ‘helloWorld’ Link seen by other links. This file has to be placed under mcfw\interfaces\link_api folder.其他Links的调用接口。
将helloWorld添加到 INCLUDE_EXERNAL_INTERFACES的列表
INCLUDE_EXERNAL_INTERFACES= bios xdc ipc syslink iss hdvpss ipnc_rdk fc xdais h264enc h264dec swosdhelloWorldedma3lld mpeg4enc
添加‘Makefile’ 文件和include directory:
INCDIR += $(MODULE_SRC_BASE_PATH)/alg/helloWorldAlg
include $(MODULE_SRC_BASE_PATH)/alg/helloWorldAlg/SRC_FILES.MK
3.在\mcfw\src_bios6\links_c6xdsp\system\system_c6xdsp.c
添加helloWorldLink头文件包含
#include<mcfw/interfaces/link_api/helloWorldLink.h>
在System_initLinks() 函数中添加HelloWorldLink_init(),System_deInitLinks() 添加HelloWorldLink_deInit()
4.在
ipnc_rdk\ipnc_mcfw\mcfw\interfaces\link_api\system_linkId.h
为helloWorld link在DSPcore一端定义link ids
#defineSYSTEM_LINK_ID_HELLOWORLD_0 DSP_LINK(SYSTEM_LINK_COMMON_LINKS_MAX_ID+4) (由于提示procId < SYSTEM_PROC_MAX : failed !!!)
#defineSYSTEM_LINK_ID_HELLOWORLD_START (SYSTEM_LINK_ID_HELLOWORLD_0)
#defineSYSTEM_LINK_ID_HELLOWORLD_END (SYSTEM_LINK_ID_HELLOWORLD_0)
#defineSYSTEM_LINK_ID_HELLOWORLD_COUNT (SYSTEM_LINK_ID_ALG_END - \
SYSTEM_LINK_ID_ALG_START)+ 1
5在ipnc_rdk\ipnc_mcfw\mcfw\src_bios6\links_common\system\system_priv_common.h
定义任务优先级和栈的大小
#defineHELLOWORLD_LINK_TSK_PRI (2)
#defineHELLOWORLD_LINK_TSK_STACK_SIZE (SYSTEM_DEFAULT_TSK_STACK_SIZE)
6在ipnc_rdk\ipnc_mcfw\mcfw\src_linux\mcfw_api\ti_vsys_priv.h
包含头文件
All header filesunder interface folder needs to be included in this file. Include thehelloWorldLink header file here
#include<mcfw/interfaces/link_api/helloWorldLink.h>
7在ipnc_rdk\ipnc_mcfw\mcfw\src_bios6\links_c6xdsp\SRC_FILES.MK
Add the helloWorlddirectory to the list of SRCDIR
SRCDIR +=links_c6xdsp/system links_c6xdsp/utils/src \
links_c6xdsp/alg_linklinks_c6xdsp/alg_link/swosd links_c6xdsp/alg_link/scd \
links_c6xdsp/valinks_c6xdsp/helloWorld
SRCS_HELLOWORLD =helloWorldLink_tsk.c helloWorldLink_priv.c
SRCS_c6xdsp +=$(SRCS_SYSTEMDSP) $(SRCS_UTILS) $(SRCS_ALGLINK) $(SRCS_OSDLINK) $(SRCS_SCDLINK)$(SRCS_VALINK)$(SRCS_HELLOWORLD)
8.修改内存:
mcfw\src_bios6\cfg\ti81xx\config_2G.bld.(文件名对应内存大小)
找到下面代码段,将LINUX_SIZE的大小调小一点分出来给DSP_CODE_SIZE、DSP_DATA_SIZE
/* first 512MB */
LINUX_SIZE = 128*MB;
SR1_SIZE = 336.5*MB;
SR3_INTRADUCATI_IPC_SIZE = 124*KB;
VIDEO_M3_CODE_SIZE = 2.5*MB;
VIDEO_M3_DATA_SIZE = 12*MB;
DSS_M3_CODE_SIZE = 1.5*MB;
DSS_M3_DATA_SIZE = 17*MB;
DSP_CODE_SIZE = 900*KB;
DSP_DATA_SIZE = 13.5*MB;
编译中可能遇到的错误:
1.
"/home/dm8168/dvr_rdk/../dvr_rdk/build/dvr_rdk/obj/ti816x-evm/c6xdsp/debug/dvr_rdk_configuro/linker_mod.cmd",line 242: error:
placement fails for object ".switch", size 0x32a (page0). Available
ranges:
DDR3_DSP size: 0xd80000 unused: 0xc max hole: 0x4
"/home/dm8168/dvr_rdk/../dvr_rdk/build/dvr_rdk/obj/ti816x-evm/c6xdsp/debug/dvr_rdk_configuro/linker_mod.cmd",line 230: error:
placement fails for object "GROUP_1", size 0x13c (page0). Available
ranges:
DDR3_DSP size: 0xd80000 unused: 0xc max hole: 0x4
warning: entry-point symbol other than"_c_int00" specified:
"ti_sysbios_family_c64p_Hwi0"
error: errors encountered during linking;
"/home/dm8168/dvr_rdk/../dvr_rdk/build/dvr_rdk/bin/ti816x-evm/dvr_rdk_c6xdsp
_debug.xe674" not built
make[2]: ***[/home/dm8168/dvr_rdk/../dvr_rdk/build/dvr_rdk/bin/ti816x-evm/dvr_rdk_c6xdsp_debug.xe674]Error 1
make[1]: *** [apps] Error 2
make: *** [dvr_rdk_bios6] Error 2
####
#### [DM816X_ETV] platform build [] ERROR!!!
内存不足,修改内存。
Top level memory requirement for DSP code and data size is done in mcfw\src_bios6\cfg\ti81xx\config_<DDRsize>M.bld. Please refer to appnote on memoryMap for further details on changing the size of these sections as per your DSP algorithms requirement.
2.
需要首先编译内核
3.
ccs:下载链接:
http://www.ti.com.cn/tool/cn/ccstudio