dsp 编译错误与解决方法
- 格式:doc
- 大小:38.00 KB
- 文档页数:4
1.DSP程序烧写后,带仿真器程序能正常运行,通信测试是对的,但拔下仿真器后就出错了,请问是什么原因?答:串口通信连着仿真器说明有硬件电气连接。
使用无源rs232转485接口跟dsp通信的,接着仿真器就行,不接仿真器通信异常。
然后把485的地和dsp电源的地共起来,就好了。
2. DSP使用仿真器很正常工作,但是通过烧写到ROM后,load代码到DSP RAM中后无法正常运行.答:首先检查你的烧写程序可有问题。
有些烧写程序指定.test代码长度。
其次在代码上找问题,可以锁定在在线与烧写cmd文件的变化。
烧写原理是什么?代码编译为二进制或十六进制数,搬移进rom,存储起始地址、长度确定没有问题。
假设正确,检查能否在线对rom进行正常的擦除与读写?假如还是正确,检查硬件电路,这个就比较麻烦了。
确定启动模式设置的正确?自举启动要dsp外围电路的电压、时钟、模式选择、默认态确认正确?还有问题就是芯片自启动有问题了3.我也出现过能仿真,但不能烧写的情况!解决方法:降低时钟频率。
点击FLASH插件上的“View Config File”,打开VAR.h文件。
将该文件中的“PLL_PATIO_CONST .Set 0000h”改成“PLL_PATIO_CONST .Set 0200h”存盘后,执行目录下的Buildall.bat批处理文件。
再重新启动CCS及FLASH插件。
最大可能是DSP的FLASH烧掉了,这个烧掉不影响程序的仿真;我之前也是烧不进去,后来换了块芯片就好了,芯片的来源很重要。
第二个问题是你在烧写程序时将CMD修改了没有,要跳过密保单元;你的memory map设置是否正确? 还有如果烧写flash 评估办上跳线是否正确? 我用的时候好几块评估板都是可以load programme 。
可以加载到ram 中进行仿真,但是不能烧写道flash 进行自动运行。
4.我也遇到这样的问题,同样郁闷。
一个以前跑过的好好的程序,因为改了仿真器的配置,就出现了楼主所述问题,反复尝试,都是如楼主所述。
问:我测试你们的程序的时候,go main 进不去主函数,进入的是一段汇编。
是怎么回事?答:程序如果要进行设断点,观察变量等操作,要先调入project文件,然后再调入out文件。
如果是可以直接执行能看到结果的,就直接调入out文件,run就可以。
问:CY68013的固件程序怎么修改?答:在把QQ2812都研究清楚了,有精力有兴趣自己可以买一本EZ-USB的书好好看看。
在此之前,请不要随便更改固件代码,因为一旦出错,可能带来不必要的麻烦。
固件代码是通过USBControlPanel,使用USB接口进行下载的。
:2812的主频是最大150M,我如果想设为100M是在那里设置?答:打开工程,在Source文件夹下,打开DSP28_SysCtro.c文件,找到如下语句,修改即可。
// Initalize PLLSysCtrlRegs.PLLCR = 0x02;///锁相环产生的时钟频率定标,这里配置为30M问:为什么我的程序在SRAM中正常,烧入Flash后不对?答:1、请先确认你编译的时候使用了flash.cmd,推荐使用我们提供的flash.cmd,如果自己更改了这个文件,请先确认cmd文件的正确性;2、编译的时候,如果选择release模式,请检查一下build option,把其中的opt level改为none,即取消编译优化选项,很多语句在优化的时候可能会产生错误的优化结果。
或者选择debug模式编译,烧写正确后再改为release模式,通过对比两种模式的编译选项也能看出其中的区别。
3、程序在flash中运行会比在ram中运行大概慢20%,因此对于一些时序敏感的外设,比如usb总线,就有可能需要调整时序,否则就会有问题。
问:数码管LED显示的时候发送的数据是怎么规定和产生的?答:其实如果自己看程序和原理图自己就可以知道是怎么产生的。
数码管数据如下:Uint16SpiCode[]={0x7E7E,0x2929,0x2c2c,0x6666,0xa4a4,0xa0a0,0x3e3e,0x2020,0x2424,0x22 22,0xe0e0,0xb1b1,0x6868,0xa1a1,0xa3a3,0xffff,0xdfdf};数码管的笔画对应关系如下:63 742 01 5就是说0~7分别对应笔画的a~h,在原理图看就是分别连接的Q0~Q7这个数码管的型号是LG3611BH,是共阳级的,也就是说某个笔画为0的时候,这个笔画被点亮。
问:我测试你们的程序的时候,go main 进不去主函数,进入的是一段汇编。
是怎么回事?答:程序如果要进行设断点,观察变量等操作,要先调入pro ject文件,然后再调入ou t文件。
如果是可以直接执行能看到结果的,就直接调入ou t文件,run就可以。
问:CY68013的固件程序怎么修改?答:在把QQ2812都研究清楚了,有精力有兴趣自己可以买一本EZ-USB的书好好看看。
在此之前,请不要随便更改固件代码,因为一旦出错,可能带来不必要的麻烦。
固件代码是通过USBCon trolPa nel,使用USB接口进行下载的。
:2812的主频是最大150M,我如果想设为100M是在那里设置?答:打开工程,在Source文件夹下,打开DSP28_SysCt ro.c文件,找到如下语句,修改即可。
// Initali ze PLLSysCtrl Regs.PLLCR = 0x02;///锁相环产生的时钟频率定标,这里配置为30M问:为什么我的程序在SRAM中正常,烧入Flash后不对?答:1、请先确认你编译的时候使用了flash.cmd,推荐使用我们提供的flas h.cmd,如果自己更改了这个文件,请先确认cmd文件的正确性;2、编译的时候,如果选择rel ease模式,请检查一下bu ild option,把其中的opt level改为none,即取消编译优化选项,很多语句在优化的时候可能会产生错误的优化结果。
或者选择deb ug模式编译,烧写正确后再改为relea se模式,通过对比两种模式的编译选项也能看出其中的区别。
3、程序在flas h中运行会比在ram中运行大概慢20%,因此对于一些时序敏感的外设,比如usb总线,就有可能需要调整时序,否则就会有问题。
DSP常见问题解答如何选择外部时钟?DSP的内部指令周期较高,外部晶振的主频不够,因此DSP大多数片内均有PLL。
但每个系列不尽相同。
1)TMS320C2000系列:TMS320C20x:PLL可以÷2,×1,×2和×4,因此外部时钟可以为5MHz-40MHz。
TMS320F240:PLL可以÷2,×1,×1.5,×2,×2.5,×3,×4,×4.5,×5和×9,因此外部时钟可以为2.22MHz-40MHz。
TMS320F241/C242/F243:PLL可以×4,因此外部时钟为5MHz。
TMS320LF24xx:PLL可以由RC调节,因此外部时钟为4MHz-20MHz。
TMS320LF24xxA:PLL可以由RC调节,因此外部时钟为4MHz-20MHz。
2)TMS320C3x系列:TMS320C3x:没有PLL,因此外部主频为工作频率的2倍。
TMS320VC33:PLL可以÷2,×1,×5,因此外部主频可以为12MHz -100MHz。
3)TMS320C5000系列:TMS320VC54xx:PLL可以÷4,÷2,×1-32,因此外部主频可以为0.625MHz-50MHz。
TMS320VC55xx:PLL可以÷4,÷2,×1-32,因此外部主频可以为6.25MHz-300MHz。
4)TMS320C6000系列:TMS320C62xx:PLL可以×1,×4,×6,×7,×8,×9,×10和×11,因此外部主频可以为11.8MHz-300MHz。
TMS320C67xx:PLL可以×1和×4,因此外部主频可以为12.5MHz-230MHz。
DSP调试及烧写和加载常见错误及分析在进行DSP调试、烧写和加载过程中,常见的错误有很多,下面是一些常见错误及其分析:1.调试错误:-问题描述:无法连接到DSP设备。
-分析:可能是因为设备未正确连接,或者连接线路有问题,也可能是驱动程序不兼容导致的。
-解决方法:检查设备的连接状态,确保连接正确;检查连接线路是否完好;更新或卸载并重新安装驱动程序。
2.烧写错误:-问题描述:烧写失败或者烧写之后设备无法启动。
-分析:可能是烧写的文件有错误或者不完整,也可能是设备本身存在问题。
3.加载错误:-问题描述:加载程序时出现错误,或者加载之后程序无法正常运行。
-分析:可能是加载的程序有问题或者与设备不兼容,也可能是设备本身存在问题。
4.软件错误:-问题描述:使用的调试、烧写或加载软件出现错误或崩溃。
-分析:可能是软件本身存在问题,也可能是与其他软件或系统的兼容性冲突。
-解决方法:更新软件版本,或者使用其他可靠的软件;检查是否存在与其他软件或系统冲突的情况,如果有需要进行排查和修复。
5.设备故障:-问题描述:设备无法识别、烧写或加载,存在硬件故障。
-分析:可能是设备损坏或老化,设备内部电路出现问题。
-解决方法:检查设备的物理状态,是否存在损坏或老化情况;检查设备的内部电路,如果有问题需要进行修复或更换。
6.嵌入式系统错误:-问题描述:DSP芯片上的嵌入式系统无法正常运行。
-分析:可能是系统的软件代码有问题,硬件与软件的不匹配,系统配置错误等。
-解决方法:检查系统的软件代码,重新进行编译、调试和烧写;检查系统的硬件与软件的兼容性,如果有问题需要进行修复或更换;检查系统的配置参数,进行适当的修改。
在遇到以上错误时,可以根据具体情况进行分析和解决。
同时,可以参考调试、烧写和加载工具的操作手册,寻求厂商的技术支持,或者查阅相关的文档和资料来获取更多的帮助和解决方案。
调试、烧写和加载过程中可能会遇到各种各样的问题,需要耐心和细心进行排查和解决。
DSP软件应用中出现的问题自己在使用DSP软件Code Composer Studio v4是遇到一些常见的错误:1:Severity and Description Path Resource Location Creation Time Iderrors encountered during linking; "timer_sdram.out" not builtSeverity and Description Path Resource Location Creation Time Idunresolved symbol _ADC_cal, first referenced in ./DSP2833x_SysCtrl.obj出现这样的问题,通常是少了一些文件,需要手动添加这些文件到工程里解决的方法是:在工程上右击links files to project,之后找到DSP2833x _ADC_cal.asm文件添加到工程里2:当我在用到软件中自带的头文件中的一些结构体,共用体。
说白了就是要对芯片寄存器的位进行操作时软件给我们提供了方便,如果不能“.” 符号不能灵活弹出对应选项时,例如CpuTimer0Regs.TCR.all,应该检查CpuTimer0Regs是否敲写正确,应该编译一下工程,我的做法就是写一个头文件,和主函数,并在函数里写一个InitSysCtrl();(当然前提你的头文件要有定义这个函数)在编译。
3:在学习中遇到了在工程中不用添加头文件,有软件来自动查找,就是得先设置Properties选项,指定头文件的路径,在这之前我一直都是手动添加头文件,很是麻烦,对于不太熟练的我还容易出错,4:还要注意要将我们写的程序中用到的源文件全部添加到工程中(这句话听起来好像没说似的,其实不然),如果我们平时在编写程序时,不注意他,他经常会给添加不必要的麻烦(说白了就是在浪费你的时间)5:我在主函数里用到(“MemCopy(&XintffuncsLoadStart, &XintffuncsLoadEnd, &XintffuncsRunStart);”)编译时出现下列错误提示:unresolved symbol _MemCopy, first referenced in ./timer_sdram.obj这样的问题一看就是MemCopy这的问题,1-可能是在你调用前没有声明,在工程中没有添加这个函数2-我们在用到这个MemCopy时拼写错误自己在学习DSP中,在看过的一些书上有的说过在自己编写工程时不清楚自己工程里要用到什么源文件可以把他们都添加到工程里,今天就出现了问题,由此想起了“尽信书不如无书”6:errors encountered during linking; "cpu_flash1.out" not builtplacement fails for object ".text", size 0x1091 (page 0). Available ranges: RAML1出现这样的错误是因为自己多添加了“DSP2833x_ECan.c”这个文件7:errors encountered during linking; "cpu_flash1.out" not builtsymbol "_delay_loop" redefined: first defined in "./cpu_flash.obj"; redefined in "./DSP2833x_Mcbsp.obj" 我的这个程序是对FLASH进行读写操作,正如提示我多加了“DSP2833x_Mcbsp.h”源文件出现了错误。
实验常见错误及解决方法1、启动CCS时出现如下错误:错误原因:以前在CCS setup里设置当前使用的平台为sdgo2xx(硬件仿真),或者同时设置为sdgo2xx 与c2xx simulator,所以进行软件仿真时应设置当前正在使用的为c2xx simulator。
解决方法有两种:方法1:点击“终止”,然后重新设置CCS setup,将sdgo2xx移除。
方法2:点击“忽略”,然后在“Parallel Debug Manager”中Open菜单下选择c2xx simulator2、编译连接时出现如下错误:错误原因是:文件命名、文件夹命名或保存位置不正确。
文件命名:不能以数字开头(包括mak文件的名字)文件夹命名:不能为中文保存位置:项目文件(mak文件)存储的位置一定要与其它文件(C文件、asm文件、h文件、cmd文件、等)放在同一目录下,且最好放在“x:\tic2xx\myprojects”目录下。
3、编译连接时出现如下错误提示:warning: entry point symbol _C_int0 undefined错误原因:用C语言开发的DSP程序在向工程文件添加文件时没有添加运行支持库文件rts2xx.lib注意rts2xx.lib的路径:在C:\tic2000\c2000\cgtools\lib目录下4、CCS与CCS setup均不能启动,提示:不能正确初始化程序或者CCS运行到某个地方后(例如编译连接后)不能停止,观察任务管理器,发现cc_app.exe占用CPU为100%,即CCS已经死了。
错误原因:CCS被病毒感染或破坏,或者多个版本CCS共存,相互干扰。
解决方法:方法1:重新启动电脑方法2:用运行正确的cc_app.exe程序替换被破坏的cc_app.exe程序。
5、编译连接通过,加载程序后,在运行时出现如下错误提示:错误可能原因:第一种可能:没有加载CMD文件第二种可能:CMD文件已加载,但CMD文件编写有问题,存储器配置、定位不正确第三种可能:用C语言编写的DSP程序,C初始化设置错误,已修改C Initialization 设置,方法:Project ——> Option——> Linker6、探测点设置不成功注意:①在设置探测点时应先加载程序②如下图所示,应先点击Probe Point中的选择框,使volume.c line 63——> No Connection被选中,然后在选Connect下拉菜单,找到相关联的数据文件,再点击Replace ,最后点“确定”。
1、syntax error 语法错误2、MEMORY specification ignored RAMM1 不存在的内存说明3、'./Debug/s1.out' not built 没有建立.out文件4、can't open file 'o.obj' for input: No such file or directory5、entry point other than _c_int00 specified 与_c_int00指定的输入点不同6、MEMORY specification ignored 忽视了内存规范7、symbol referencing errors 标签引用错误1.如何为工程添加相应的include(.h)文件对pjt点右键,选择“Scan All File Dependencies”.2.编译错误CCStudio_v3.3/C5500/csl/include/csl_chiphal.h", line 201:fatal error: #error NO CHIP DEFINED 如何解决解决办法:(摘自这里)Project --> Build Options --> Preprocessor --> Pre-define Symbols 中加入CHIP_55023.warning: entry point symbol _c_int00 undefinederror: symbol referencing errors - ./Debug/dc_motor.out not built解决办法:是因为没有添加rts.lib文件导致的。
对“library”点右键,添加C5500文件夹下的cgtool中的rts55.lib文件,即可。
4.错误类型error: linking files for incompatible targets解决办法:出现这个错误是因为之前选择memory模式的时候和后来lib的设置不匹配,例如,如果之前在build option的complier的advance里设置的是large memory模式的话,则在linker的设置里面就要设置为rts55x.lib模式,而不能设置为rts55.lib。
1.warning:entry point symbol _c_int00 undefined使用C写DSP时,在rts.lib库中定义了入口地址:_c_int00而使用汇编语言编程,就不用包括rts.lib库,所以入口地址及其标号可以由人工指定。
而使用C时,就不同了,必须从rts.lib定义的这个入口_c_int00入口,是约定的。
The–c and cr options cause the linker to use linking conventions that are required by the Ccompiler.”其实在汇编语句中也可以不用_c_int00来定义程序入口,只要把编译器选项-c去掉,用-e选项来定义你想要的程序入口地址。
这个可在CMD文件里加-c。
这个错误是没有加库文件,你可以project view右键加入,也可以在project->build options->Linker->libraries中加入../../lib/cls/lib/(搜索路径)还要加上库名cslDM642.lib;rts6400.lib分号隔开。
2.Error:Illegal opcode at pc = 0x000190我第一次遇到这种错误,因为B跳转(分支)指令要有五个周期的延时,所以加上NOP 5就好了。
b .s2 b3;NOP53. error:can't allocate .text, size 006e40 (page 0) in LP (avail:001000)>>error:errors in input - ./Debug/mytest2.out not built这种情况是你的CMD文件中分配的存储空间太小了,LP:origin = 0x0,len = 0x1000改成LP:origin = 0x0,len = 0x100就可以可。
DSP工程在移动中的错误处理2010-10-14 13:20:01| 分类:默认分类| 标签:dsp典型错误|字号大中小订阅对于dll与lib的解释,吻之龙<longzebiao@> 给出了相信的解释(1)lib是编译时需要的,dll是运行时需要的。
如果要完成源代码的编译,有lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
(2) 一般的动态库程序有lib文件和dll文件。
lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。
如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。
如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。
静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。
但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。
从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误当你打开ccs里的库文件函数时你就会发现有好多个库文件函数,不知道怎么用,我查了好多资料,也没查出个什么来,只查到了这些感觉有用的For C28x these libraries can be built:'? rts2800.lib (C/C++ run-time object library)rts2800_ml.lib (C/C++ large memory model run-time object library)? rts2800_eh.lib (C/C++ run-time object library with exception handling support)? rts2800_ml_eh.lib (C/C++ large memory model run-time object library with exception handling support)!? rts2800_fpu32.lib (C/C++ run-time object library for FPU targets)? rts2800_fpu32_eh.lib (C/C++ run-time object library for FPU targets with exception handling support) 当你把别人的东西拷到你的电脑后,运行时就会出现错误,提示.Oundefined first referencedsymbol in file' x0--------- ----------------FS$$MPY C:\dsppro\gpio\Debug\DSP28_CpuTimers.objFS$$TOL C:\dsppro\gpio\Debug\DSP28_CpuTimers.obj这种错误主要是DSP28_CpuTimers.obj没有连上,解决方法一:在ccs软件的工程下的Libraries下先移除rts2800.lib,然后右击选择CCStudio_v3.3\C2000\cgtools\lib下的rts2800.lib就可以了,解决方法二:使用库rts2800_ml.lib是系统自带的,只要在option里面包含就可以了,不需要单独再往里面加了,就好像C语言里写头文件一样,#include <stdio.h>,我们不需要再专门把这个文件找出来加进去,只要定义过了,系统会自动为你添加的,而像其他的lib,比如IQmath.lib不是系统里有的,这种要自己添加进去才能使用,同样用C语言头文件包涵为例#include "IQmathLib.h" 这个文件就一定要添加进去才能使用。
DSP仿真器为什么必须连接目标系统(Target)?DSP的仿真器同单片机的不同,仿真器中没有DSP,提供IEEE 标准的JTAG口对DSP进行仿真调试,所以仿真器必须有仿真对象,及目标系统。
目标系统就是你的产品,上面必须有DSP。
仿真器提供JTAG同目标系统的DSP相接,通过DSP实现对整个目标系统的调试。
仿真工作正常对于DSP的基本要求1)DSP电源和地连接正确。
2)DSP时钟正确。
3)DSP的控制信号RS和HOLD信号接高电平。
4)C2000的watchdog关掉。
5)不可屏蔽中断NMI上拉高电平。
CCS或Emurst运行时提示“Can't Initialize Target DSP”1)仿真器连接是否正常?2)仿真器的I/O设置是否正确?3)XDSPP仿真器的电源是否正确?4)目标系统是否正确?5)仿真器是否正常?建议使用目标板测试。
DSP的C语言同主机C语言的主要区别?1)DSP的C语言是标准的ANSI C,它不包括同外设联系的扩展部分,如键盘输入、屏幕显示等。
但在CCS中,为了方便调试,可以将数据通过prinf命令虚拟输出到主机的屏幕上。
2)DSP的C语言的编译过程为,C编译为ASM,再由ASM编译为OBJ。
因此C和ASM的对应关系非常明确,非常便于人工优化。
3)DSP的代码需要绝对定位;主机的C的代码有操作系统定位。
4)DSP的C的效率较高,非常适合于嵌入系统。
Link的cmd文件的作用是什么?Link的cmd文件用于DSP代码的定位。
由于DSP的编译器的编译结果是未定位的,DSP没有操作系统来定位执行代码,每个客户设计的DSP系统的配置也不尽相同,因此需要用户自己定义代码的安装位置。
以C5000为例,基本格式为:-o sample.out -m sample.map -stack 100 sample.obj meminit.obj -l rts.lib ME MORY { PAGE 0: VECT: origin = 0xff80, length 0x80 PAG E 0: PROG: origin = 0x2000, length 0x400 PAGE 1: DATA: origin = 0x800, length 0x400 } SECTIONS { .vectors : {} >P ROG PAGE 0 .text : {} >PROG PAGE 0 .data : {} >PROG PAGE 0 .cinit : {} >PROG PAGE 0 .bss : {} >DATA PAGE 1}如何将OUT文件转换为可以烧写ROM的文件格式?DSP的开发软件集成了一个程序,可以从执行文件OUT转换到编程器可以接受的格式,使得编程器可以用次文件烧写EPROM 或Flash。
1. DSP编程技巧到底有什么好资料?话说专门深入讲解这个的资料并不是太多,因为大部分DSP书籍都是讲解算法或者寄存器是怎么使用的,那尽量罗列一下(如有遗漏请在评论区补充),有:(1)《DSP C2000程序员高手进阶》这本书是当年笔者学习DSP的时候看了好几遍的,讲的非常深入、透彻,可惜早就卖光了并且没有再版。
需要的网友可以考虑去图书馆看看,图书馆里最不缺少的就是老版本的书籍了。
(2)EEPW牛人业话我们EEPW首页的牛人业话里,已经有大量这方面的总结了,链接太多就不一一列举了,请到/news/articlelist/type/39中阅读。
(3)官方资料最权威的当然还是官方资料,特别是《TMS320C28x Optimizing C/C++ Compiler User’s Guide》和《TMS320C28x Assembly Language Tools User’s Guide》。
不足之处就在于,它们都像教科书,严谨有余,活泼不足,特别是初入门的人看起来会比较累。
(4)参加一些培训好的培训一般都是要付费的,这个要根据自己的实际情况进行取舍了。
2. 答疑解惑哪家强?经验的积累,除了自己努力的自学之外,有时候一些难关还是得有别人的帮助才行,可能你花3天搞不定的问题,他一看就想起来是什么原因了。
如果是企业客户,那直接联系官方技术支持,很容易就搞定了。
或者也可以去官方论坛提问,然后等待解答。
对于广大网友来说,直接获得技术支持可能有一定的难度。
我们EEPW的论坛的人气充足,对问题的响应速度也是迅雷不及掩耳的,所以有关DSP的问题尽可以到/forum/29/1下提问。
前面这两个无关具体技术,但是能起到―源头‖的作用。
接下来就是具体的技术问题了,有几十个,我们慢慢来看吧。
3. 作为入门者,创建一个最基本的工程需要做哪些事情?最简单的入门方法是从现有的例子上入手,比如购买开发板的话,一般都会附送十几到几十个上手用的例子工程,把它们研究一遍,基本上入门这关就过了。
今天有空,把VDSP下的常见错误和BUG大概总结了下,大部分是和版本有关的:本文涉及的几个版本(按时间排列):原版的VisualDSP++4.5.exe 约279M补丁VisualDSP++4.5_June_2007_update.vdu 约213M补丁VisualDSP++4.5_Update_6.vdu 约214M补丁VisualDSP++4.5_Update_7.vdu 约216M原版的VisualDSP++5.0.exe 约354M补丁VisualDSP++5.0_Update_3.vdu 约274M●BF561双核工程编译时出现“..._var_wa_06000047...”错误:解决办法:更新到VisualDSP++4.5_June_2007_update.vdu版本(或之后的版本)。
●仿真器连接后VDSP出现“…Extern Memory is disabled or …”警告:解决办法:⏹可能是仿真器初始化文件有问题,如果是BF531的话,需要替换ADSP-BF531-PROC.XML文件。
⏹可能是project option中的Extern Memory 没有打开。
⏹可能内存监视窗口监视的地址为异步内存空间或非法的地址空间。
●BF561双核工程,在开发板上能运行的程序放到DSO上却无法正常工作,貌似不增加那些手动添加的库工程便能正常运行。
解决办法:更新到VisualDSP++4.5_Update_6.vdu(或之后的版本)。
●编译出现“[Error ea1011]…already saw input filename C:\DOCUME~1\ADMIN~1\ LOCALS~1\ TEMP\ AUXXXX……..”错误:解决办法:中文路径问题,更改为英文路径即可。
●版本VisualDSP++4.5_Update_6.vdu无法使用系统服务adi_pwr_setfreq()把BF561设置到600M/100M,包括开发板。
1、仿真器驱动的问题。
CCS和仿真器驱动要装在同一路径下,最好都选择其默认的路径。
有时,通过usb20emurst.exe检验到仿真器连接是好的,但打开CCS时,仍然跳出窗口提示Can’t initialize target CPU。
还是因为仿真器驱动安装问题,先将仿真器换一个usb接口试一下,如仍提示错误,则要重新安装驱动。
2、CCS配置。
选择C64xx XDS510 Emulator;Configuration File选择Auto-generate board data file with extra configuration项,C:\ti\drivers\Seedusb2.cfg;I/O Port 0x240;StartupGEL:C:\ti\cc\gel\SEEDDM642.gel。
3、编译错误: SEED301_AverageSmooth\AverageSmoothloop2.jpterror: illegal relocation type 050002 found in section .debug_info, file是因为rts6400.lib库文件与CCS版本不符。
库文件要使用CCS安装文件夹自带的。
4、编译错误:symbol xxx is defined multiple times.(1)因为库文件的问题,更改库文件;(2)是因为将本应该在include下的文件加在了source里。
注意:在uCOS_II.c文件里有include语句,包括了os_core.c、os_flag.c、os_mbox.c、os_mem.c、os_mutex.c、os_q.c、os_sem.c、os_task.c、os_time.c文件,因而这些文件不需手动加入工程。
5、编译错误:symbol xxx is undefined。
出现symbol错误,一般都是因为库文件的问题。
6、编译错误:fatal error: #error NO CHIP DEFINED解决方法:build options->compiler->preprocessor->define symbols:添加上实际的DSP芯片的型号,本工程为_DEBUG;CHIP_6416。