打印

DSP错误解决及经验分享,欢迎分享,一起讨论,共同进步

[复制链接]
14914|72
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
五谷道场|  楼主 | 2012-6-14 15:38 | 只看该作者
我先发一个Arm linux开发过程中的一个小知识,呵呵。
遇到问题:
  linux内核崩溃,怎么确定出错位置。
解决方法:
  使用dump_stack()函数进行定位,可确定函数调用关系,及出错语句位置。

使用特权

评论回复
板凳
五谷道场|  楼主 | 2012-6-14 15:40 | 只看该作者
DSP调试时遇到的问题及解决办法:
1、
问题:CCS使用时无法放置断点到具体的语句,无法单步调试?
原因:Build Optins设置问题。
解决方法:打开Build Optins,在Complier对话框下的Basic中,将Generate Debug设置成Full Sumbolic Debug(-g)即可。
2、
程序烧写到DSP片内FLASH内后,运行正常,串口发送字符正常。断开仿真器,重新下电,上电后,串口发送字符乱码。
    问题分析:CMD文件配置问题,导致关键参数配置到内部RAM中去,掉电后丢失。
    问题原因:CMD文件中,econst:  > RAML0L3, PAGE = 1,配制成了RAM,导致掉电后上电串口发送乱码。更改为.econst: > FLASH, PAGE = 0后,程序运行正常,串口发送字符正常。
    .econst:是在使用大存储器模式时使用的,包括字符串,声明,以及被明确初始化过的全局变量和静态变量,可以放在数据页得任何地方。
3、
问题:调试编译时出现警告,warning: entry point symbol _c_int00 undefined
问题原因:DSP缺少lib文件,没有指定程序的入口地址
解决方法:在工程中添加RTS2800N.LIB文件

使用特权

评论回复
地板
五谷道场|  楼主 | 2012-6-14 15:42 | 只看该作者
希望大家能够分享一下开发过程中的一点经验,在彼此的经验中共同进步,少走歪路

使用特权

评论回复
5
五谷道场|  楼主 | 2012-6-15 10:01 | 只看该作者
问题分类:ARM linux
问题描述:
   编译内核遇到的问题,错误信息如下:
    CHK     include/linux/version.h
    CHK     include/linux/utsrelease.h
ERROR: include/asm is a directory but a symlink was expected
make: *** [include/asm] 错误 1
You have mail in /var/spool/mail/root
问题解决:
  需要删除:/include/asm
rm –rf asm  即可

使用特权

评论回复
6
五谷道场|  楼主 | 2012-6-15 10:02 | 只看该作者
怎么很少有人贴自己遇到的问题和解决方法啊

使用特权

评论回复
7
taihezhibanh| | 2012-6-17 20:37 | 只看该作者
感谢楼主经验分享,希望更多人加入。

使用特权

评论回复
8
五谷道场|  楼主 | 2012-6-18 14:12 | 只看该作者
楼上的是做哪方面的啊,开发过程中就没有遇到问题吗,呵呵

使用特权

评论回复
9
拿起书本| | 2012-6-18 16:53 | 只看该作者
在设计dsp硬件时,开始设计最小系统板, 系统按功能分板设计调试,注意分板电路的稳定性可能不如整板电路,要多加入抗干扰环节,分板间的引线包括电源线地线要短,尽量在10公分以内,实在不行加 入光耦隔离、采用隔离电源。切记电源线、地线的干扰远比信号干扰对系统的危害大得多,又常常被人忽视。电路板工作正常的先决条件就是电源正常!当分板电路 正常后再更居情况设计整板电路。在调试时发现的问题一定要找到原因解决,即使是飞线,割线,不要寄希望于下一板改了再看,除非原理性错误。每一个功能环节 多准备几套方案。

使用特权

评论回复
10
huangfeng33| | 2012-6-19 19:01 | 只看该作者
打开STEP后,无法初始化硬件仿真器
解决方法:CCS STEP中的硬件配置USB驱动安装或者I/O口出现错误(如1仿真器连接是否正常? 2仿真器的I/O设置是否正确? 3XDS仿真器的电源及仿真头是否正确? 4目标系统型号是否正确? 5仿真器是否正常?);

USB驱动程序未安装(从“我的电脑-管理”中可以查到是否安装成功驱动)

使用特权

评论回复
11
五谷道场|  楼主 | 2012-6-20 09:46 | 只看该作者
楼上的经验,应该是解决下面的一个问题的好方法:
https://bbs.21ic.com/icview-304864-1-1.html

使用特权

评论回复
12
五谷道场|  楼主 | 2012-6-20 10:18 | 只看该作者
CCS 实验常见错误及解决方法,附件中贴有图片进行的详细说明,更直观

1、启动CCS时出现如下错误:

错误原因
  
以前在CCS setup里设置当前使用的平台为sdgo2xx(硬件仿真),或者同时设置为sdgo2xxc2xx simulator,所以进行软件仿真时应设置当前正在使用的为c2xx simulator
解决方法有两种:
方法1:点击“终止”,然后重新设置CCS setup,将sdgo2xx移除。



方法2:点击“忽略”,然后在“Parallel Debug Manager”中Open菜单下选择c2xx simulator


2、
编译连接时出现如下错误:


错误原因是:文件命名、文件夹命名或保存位置不正确。
文件命名:不能以数字开头(包括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、
CCSCCS setup均不能启动,提示:不能正确初始化程序
或者CCS运行到某个地方后(例如编译连接后)不能停止,观察任务管理器,发现cc_app.exe占用CPU100%,即CCS已经死了。
错误原因CCS被病毒感染或破坏,或者多个版本CCS共存,相互干扰。
解决方法:方法1:重新启动电脑
方法2:用运行正确的cc_app.exe程序替换被破坏的cc_app.exe程序。

5、编译连接通过,加载程序后,在运行时出现如下错误提示:



错误可能原因:
第一种可能:没有加载CMD文件
第二种可能:CMD文件已加载,但CMD文件编写有问题,存储器配置、定位不正确
第三种可能:用C语言编写的DSP程序,C初始化设置错误,已修改C Initialization设置,方法:Project——> Option——> Linker



6、
探测点设置不成功
注意:①在设置探测点时应先加载程序
②如下图所示,应先点击Probe Point中的选择框,使volume.c line 63——> No Connection
被选中,然后在选Connect下拉菜单,找到相关联的数据文件,再点击Replace
,最后点“确定”。

DSP实验常见错误及解决方法.pdf

312.8 KB

使用特权

评论回复
13
五谷道场|  楼主 | 2012-6-24 18:44 | 只看该作者
过节了,变冷清了呢,呵呵

使用特权

评论回复
14
shenmu2012| | 2012-6-25 09:24 | 只看该作者
楼上的各位不愧是DSP高手啊,学习了啊

使用特权

评论回复
15
五谷道场|  楼主 | 2012-6-29 14:04 | 只看该作者
使用C/C++语言编写基于DSP程序的注意事项
1、 不影响执行速度的情况下,可以使用c或c/c++语言提供的函数库,也可以自己设计函数,这样更易于使用“裁缝师”优化处理,例如:进行绝对值运算,可以调用fabs()或abs()函数,也可以使用if...else...判断语句来替代。
2、 要非常谨慎地使用局部变量,根据自己项目开发的需要,应尽可能多地使用全局变量和静态变量。
3、 一定要非常重视中断向量表的问题,很多朋友对中断向量表的调用方式不清楚。其实中断向量表中的中断名是任意取定的,dsp是不认名字的,它只认地址!!中断向量表要重新定位。这一点很重要。
4、 要明确dsp软件开发的第一步是对可用存储空间的分析,存储空间分配好坏关系到一个dsp程序员的水平。对于dsp,我们有两种名称的存储空间,一种是物理空间,另一种是映射空间。物理空间是dsp上可以存放数据和程序的实际空间(包括外部存储器),我们的数据和程序最终放到物理空间上,但我们并不能直接访问它们。我们要访问物理空间,必须借助于映射空间才行!!但是映射空间本身是个“虚”空间,是个不存在的空间。所以,往往是映射空间远远大于实际的物理空间,有些映射空间,如io映射空间,它本身还代表了一种接口。只有那些物理空间映射到的映射空间才是我们真正可访问(读或写)的存储空间。
5、 尽可能地减少除法运算,而尽可能多地使用乘法和加法运算代替。
6、 如果ti公司或第三方软件合作商提供了dsplib或其他的合法子程序库供调用,应尽可能地调用使用。这些子程序均使用用汇编写成,更为重要之处是通过了tms320算法标准测试。而且,常用的数字信号处理算法均有包括!!
7、 尽可能地采用内联函数!!而不用一般的函数!!可以提高代码的集成度。
8、 编程风格力求简炼!!尽可能用c语言而不用c++语言。我个人感到虽然c++终代码长了一些,好象对执行速度没有影响。
9、 因为在c5000中double型和float型均占有2个字,所以都可以使用,而且,可以直接将int型赋给float型或double型,但,尽可能地多使用int数据类型代替!这一点需要注意!!
10、 程序最后至少要加上一个空行,编译器当这个空行为结尾提示符。
11、 大胆使用位运算符,非常好用!!
12、 2003年6月份从ti的网站上下到了关于tms320c67x系列dsp的快速算法库,于是,tms320c5000和c6000全系列的快速算法库都问世了,这些算法库均可供c/c++语言直接调用,优化程度100%,实际编程时尽可能地使用(下载时可以同时下载到说明文档和ascii源程序,可以根据自己需要作出修改,修改前最好做个备份)。

使用特权

评论回复
16
ty新气象| | 2012-6-29 15:14 | 只看该作者
LZ好人一枚,鉴定完毕。

使用特权

评论回复
17
五谷道场|  楼主 | 2012-6-30 11:03 | 只看该作者
ty新气象还要多多支持,多多分享啊

使用特权

评论回复
18
五谷道场|  楼主 | 2012-7-11 12:00 | 只看该作者
uboot中串口初始化的时候,有很多seial__init()函数,如何确定uboot执行的是哪一个方法:
1、lib_arm/board.c中的初始化队列,函数如下:  
  init_fnc_t *init_sequence[] = {
   #if defined(CONFIG_JZSOC)
    jz_board_init,      /* init gpio/clocks/dram etc. */
#endif
    timer_init,
    env_init,       /* initialize environment */
#ifdef CONFIG_INCA_IP
    incaip_set_cpuclk,  /* set cpu clock according to environment variable */
#endif
    init_baudrate,      /* initialze baudrate settings */
    serial_init,        /* serial communications setup */
    console_init_f,
    display_banner,     /* say that we are here */
    checkboard,
    init_func_ram,
    NULL,
};
跟踪serial_init发现,有好多serial_init,那么到底执行的是哪个serial_init呢,继续跟踪采用下面的方法。


2、跟踪方法:
在所要跟踪的serial_init函数中添加控制LED灯的命令,分析出执行的是哪个serial_init()

如:
       serial_init()
       {
           *******
    _gpio_as_output(PIN_LED);
    __gpio_set_pin(PIN_LED);
           *******
       }
     

使用特权

评论回复
19
五谷道场|  楼主 | 2012-7-17 09:13 | 只看该作者
问题:
   内核启动时,串口打印消息提示:No nand device found
解决思路:
   在drivers/mtd/nand/ nand_ids.c添加NAND相关配置信息

使用特权

评论回复
20
wilson_weng| | 2012-7-17 21:54 | 只看该作者
学习啊...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7647

主题

9805

帖子

11

粉丝