DSP

建立C6784&OMAPL138的window CCS Dsp工程时遇到的问题及解决

2019-07-13 11:58发布

最近做C6784的一个项目,设计c6748和OMAPL138的使用UPP互相通信。

使用的是TI官方提供的syslink,官方的说明书只有简单的建立SYS/BIOS的例子,以及一个SYSLINK程序,没有将如何去配置环境。一开始我是按照说明书,在LInux下建立编译环境的,配好以后发现也可以编译程序,不过不同的是LInux下编译dsp程序生成的是.xe674后缀的文件,我查了一下,网上说这个和windowCCS编译生成的.out是一样的,但是,但是,但是,使用原版的程序编译出来放到板子就是运行不了,卡主,而使用例程自带的编译好的.xe674文件确可以运行,真的头痛。所以我着手搭建Windows下的CCS编译环境,先是按照SYS/BIOS搭建的教程搭建,搭建好了rebuild发现层层问题,如下。

1编译时出现

Description      Resource Path Location   Type #20 identifier "__func__" is undefined    message_heap.c     /UppDsp  line 24      C/C++ Problemf的错误,如下

发现下面的一大堆问题其实根源就是log.h的参数__func__引起的,

解决。以上出问题的文件其实都是不是dsp本身的,需要Linux下的GCC编译器才可以,所以在CCS里面添加GCC编译器即可,添加步骤如下:

2 解决完以上问题后又出现以下问题,弄了半天没明白.

网上查了一下说是函数没声明,我试着在upp_test.c开头加上pscModuleControl的声明,另一个同样操作,发现还是不行。最后观察编译打印日志发现,编译前半部分基本没啥问题,就到的时候报的错,我怀疑是LINK阶段的问题,我参考了实例工程的link设置如下:

所以我找到以上文件,直接复制到我的程序目录下,然后编译果然解决了问题。

3 芯片选择问题,使用CCS编译时发现报错,关于psc.h找不到hw_psc_AM1808.h什么的,我明显感觉不对,因为我使用的是C6748啊,我查看发现psc.h前面有这样的一段:

这里明显是一个芯片选择的控制选项,这里如果说找不到hw_psc_AM1808.h就说明没有defined前面的C6748,我详细查看了给力例程,发现以下部分:

也许就是在这里设置的,我同样在我的工程这样设置,果然不会再找hw_psc_AM1808.h了,应该找到C6748了。

4 使用WindowsCCS编译的dsp .out加载到板子上,发现只能传输一个数,然后报错,Segmentation fault?????简直了。

弄了好久,上网查了一下 Segmentation fault属于c++的一个常见错误,叫段错误。出现的原因一般是内存错误,我分析了一下我的程序,查看cmd内存映射如下:

 

这是我为了不出错,和例程保持一致,使用例程的Platform文件,但是我又看了一下我的程序的说明,在shared里面有.bld的配置说明文件,如下:

显然,两个配置的内存是不一样的,我猜测应该这里的问题,改一波。如下:

改完以后。测试成功,没有 报错~。