本帖最后由 Jacktang 于 2019-10-11 14:46 编辑
由于双核心的异构处理器,一个是DSP内核一个是ARM内核,官方提供的开发方式都是在Linux下的,这样,对于DSP的程序,也是要使用makefile进行工程管理的,对于使用习惯了CCS类的IDE的小伙伴,可能都不太适应,而且还有大量的库文件以及很复杂的依赖关系,在开发时,往往是手足无措。那么我们就把Linux下的DSP工程,移植到windows或是Linux下的IDE 中来开发,使用IDE进行工程管理。
首先,要了解工程的结构,对于最基本的DSP工程,是还没有添加库函数的,所以这里只是一个工程中最小的功能性的组成。
├── dsp
│ ├── bin
│ │ ├── debug
│ │ │ ├── obj
│ │ │ │ ├── main_dsp.oe674
│ │ │ │ ├── server_dsp.xe674.map
│ │ │ │ └── Server.oe674
│ │ │ └── server_dsp.xe674
│ │ └── release
│ │ ├── obj
│ │ │ ├── main_dsp.oe674
│ │ │ ├── server_dsp.xe674.map
│ │ │ └── Server.oe674
│ │ └── server_dsp.xe674
│ ├── configuro
│ │ ├── compiler.defs
│ │ ├── compiler.opt
│ │ ├── config.bld
│ │ ├── custom.mak
│ │ ├── linker.cmd
│ │ ├── package
│ │ │ ├── build.cfg
│ │ │ ├── cfg
│ │ │ │ ├── Dsp_pe674.c
│ │ │ │ ├── Dsp_pe674.cfg
│ │ │ │ ├── Dsp_pe674.cfg.dot
│ │ │ │ ├── Dsp_pe674.cfg.xml
│ │ │ │ ├── Dsp_pe674.dep
│ │ │ │ ├── Dsp_pe674.h
│ │ │ │ ├── Dsp_pe674.mak
│ │ │ │ ├── Dsp_pe674.oe674
│ │ │ │ ├── Dsp_pe674.oe674.dep
│ │ │ │ ├── Dsp_pe674.rov.xs
│ │ │ │ ├── Dsp_pe674.rta.xml
│ │ │ │ ├── Dsp_pe674.xdc.inc
│ │ │ │ ├── Dsp_pe674.xdl
│ │ │ │ └── Dsp.xe674.mak
│ │ │ ├── configuro.ccs
│ │ │ ├── configuro.class
│ │ │ ├── configuro.java
│ │ │ ├── configuro.pjt
│ │ │ ├── configuro.sch
│ │ │ ├── internal
│ │ │ ├── lib
│ │ │ ├── package.bld.xml
│ │ │ ├── package_configuro.c
│ │ │ ├── package.defs.h
│ │ │ ├── package.xdc.dep
│ │ │ ├── package.xdc.inc
│ │ │ └── rel
│ │ │ ├── configuro.xdc.inc
│ │ │ └── configuro.xdc.ninc
│ │ ├── package.bld
│ │ ├── package.mak
│ │ ├── package.xdc
│ │ └── package.xs
│ ├── Dsp.cfg
│ ├── main_dsp.c
│ ├── makefile
│ ├── Server.c
│ └── Server.h
├── host
│ ├── App.c
│ ├── App.h
│ ├── bin
│ │ ├── debug
│ │ │ ├── app_host
│ │ │ ├── app_host.map
│ │ │ └── obj
│ │ │ ├── App.ov5T
│ │ │ ├── App.ov5T.dep
│ │ │ ├── main_host.ov5T
│ │ │ └── main_host.ov5T.dep
│ │ └── release
│ │ ├── app_host
│ │ ├── app_host.map
│ │ └── obj
│ │ ├── App.ov5T
│ │ ├── App.ov5T.dep
│ │ ├── main_host.ov5T
│ │ └── main_host.ov5T.dep
│ ├── main_host.c
│ └── makefile
├── makefile
├── products.mak
├── readme.txt
├── run.sh
└── shared
├── AppCommon.h
├── config.bld
└── SystemCfg.h
这里的头文件与C文件,都是与windows下一样的,而makefile是对工程进行编译时使用到的,这里当使用到CCS后,就不再使用这个文件了,而最主要的就是Dsp.cfg文件了,这个文件是比较重要的,这个是使用syslink进的一个配置文件。
还有一个文件在shared中的config.bld。这是对DSP内存进行分析的一个文件,内存分配不对的话,工程可能不会有语法错误,但是会在双核心系统运行时,出现内存溢出或是参数错误的情况,这里在格外注意,否则后期再找错误就很费时间了。
这里是把所有的内存分成了几个部分,分别分配给Linux与DSP使用,内存间不可以有重叠的部分,最好也是要按字节对齐。
有上这些,我们就可以在CCS中新建一个工程,再移植这些配置信息了。
首先,新建一个CCS的工程,这里就不再细说了,新建工程都不会的话,那么就真的太……
新建工程时,选择的工程类型是Code Composer Studio下的CCS Project
详细的配置如上,这里要指定你的芯片类型,还有要指定是DSP下的工程,也就是内核要选择成C674x的,这个是这个芯片的DSP内核的型号,工程类型这里进一步选择是SYS工程,选择典型工程即可以。
下一步后,配置如下图,这里选择好SYS的版本,这个版本是要与软件的版本与Linux的版本要对应的。
这里先选择的是evm开发板的platforms配置文件,后面,我们要建一个针对自己的开发板的配置文件,其实内存的配置是差不多的,但是在缓存与内存总大小是不一样的,所以分配的地址空间也不一样,就要在IDE下重新进行建立一个配置文件了。
要选择新建中的其他类型,才可以找到platforms配置文件的,如下图
在如下图的新建界面选择New RTSC Platform
按如下图配置,设置名称与芯片的类型与芯片的型号。
再一下步就是重点了,这要按之前的config.bld来分析内存与缓存了。
由于这里默认的配置与我们的开发板上的是完全不一样的,要全部删除后重新建立,所以,对于这些内存分配的控制可以按下图的方式删除与添加。添加时,按config.bld文件中的地址进行添加。
下面,对config.bld文件进行分配。
如下图所示,绿色的为External memory ,黄色的是地址与偏移长度,这里要设置好的。注意,这里由于是分配的外部的DDR的内存,而不是芯片内部的RAM,所以这里统一都要设置在External memory这一栏中。
比如SR_0这一块,起始地址是0xC2000000,长度为0x10000,即64K。依次类推,SR_1是128K,DSP_PROG是8M的空间。
并且要将芯片片上的RAM都设置成缓存,也就是使能L1D、L1P、L2的缓存功能。
最后的配置界面内容如下。
最后,在工程的属性界面,重新配置工程的platforms配置文件,也就是修改成我们新建的这个platforms配置文件,再把工程中的源文件与头文件都添加到新的工程中,把原文件删除后,这个工程就算是移植完成了。
到此,基于IDE的双核心芯片下的DSP工程就移植好了,编译一下,生成了out文件,把out文件复制到开发板,并通过syslink的工程进行加载。
加载成功会有下的输出。其中,run.sh是加载DSP程序的脚本,之前使用一条条的命令加载,写与脚本方便好多,可以把DSP程序与驱动一起加载。
|