打印

[转]我的DSP之路

[复制链接]
1827|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linhai1986|  楼主 | 2010-3-14 21:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我一开始学习DSP时,用的是2812,但那时我们公司还没开始使用DSP,我是第一个研究DSP的人,不过我的编程水平不行,编程风格也不注重,写的程序很难看,也不好移植,做了很久,成绩平平,领导对我相当不满,我也一直很压抑,日子很难过。于是在一个下午,领导把我叫到办公室,用很怀疑的语气问我:你到底能做什么?
我知道我应该做出改变了,于是我说我只能对CPU编程。当时部门里的CPU使用ARM较多,于是领导让我先做一段时间ARM,以后条件成熟了再回过来搞DSP。
就这样,我转到ARM的方向上去了。学ARM的时候我一直拿它的DSP做比较,心里不服的说ARM能做的事,我DSP也能做,只是不给我机会而已。
我这种想法其实相当幼稚,ARM和DSP是两个不同的处理器,测重点不同,不能相提并论。
在学ARM的时候,我有幸得以阅读前辈们的程序,当我第一次看他们的程序时,我被他们的编程风格所震撼,他们的程序写得确实很漂亮,流程很好,清晰明了,注释和预处理都使用得很好。
我终于意识到我的严重不足,我必须做出改变,不但在编程风格上,还要在编程技巧上。
由于有DSP的基础,没多久我就熟悉了ARM的编程,于是我终于在能用ARM在一个项目里展身手。由于经验很不足,项目做得相当慢,而且我没有使用UCOS,因为那时我还不会。
但我总不能一直不用操作系统,于是我钻研了一段时间UCOS,把它用到项目中去,由于项目很简单,所以我并没有遇到多大困难,但这只是表面的现象。
程序写完后在调试阶段总发现程序不稳定,会跑飞,为此我忙了很多天,找问题,找人帮忙,吃尽苦头后才发现是自己对操作系统理解不深导致的。经前辈指点才解决了问题。这实在是血的教训!

慢慢的有项目要向DSP方向发展,于是我又有了回到DSP之心。我下定决心,这次一定要做出成绩。
由于之前学2812的时候学得不是很好,又学了一段时间的ARM,我决定把我在ARM那边的编程风格移植到DSP上,于是我用了几天时间写好了DSP的BSP(Board Support Package),没有上操作系统,直接在DSP上跑成功了,这时的程序风格相当好,我自己也相当满意。
有人说过,只要使用过操作系统编程,就不会想回到前后台的编程(UCOS的作者),之前使用过UCOS对ARM编程,现在回到DSP,没有操作系统确实很不好干活,于是我上网找到UCOS移植到DSP2812的代码,但听前辈们说在DSP上用UCOS不好,我试着对UCOS移植代码进行整理,但没有成功,这可能是因为我自己没有深入理解UCOS,也没有耐心的缘故。
于是我决定搞定DSP/BIOS,在转入ARM之前曾经学过一段时间,又有UCOS做基础,DSP/BIOS里任务的调度,SWI的调度,信号量和锁等同步机制我很快就明白了,但是当我尝试着用DSP/BIOS来管理HWI时遇到了很大的困难。在CDB文件里我把_IRQ_SCIA做为PIE_INT9_1的函数,同时勾选 Use Dispatcher,但是死活都不进入中断运行,找问题找了很久,文档如SPRU625*也看了很多,明明说HWI_dispatchPlug()可以把包括PIE的128个中断都Plug进去的,但我就是没成功,几天过去了都没进展,还到TI的官方网站上去下载DSP/BIOS更新的内核,还是不行,还打电话到TI中国去找TI工程师问,还发E-mail过去问。
还是HelloDSP论坛好,我发E-mail时是周末,料想TI的工程师也不会看,于是我到论坛来找,找了好久,终于还是有所发现--中断没打开!
我这是自虐,是我的大意所致。前面说过,我把ARM那边的风格移植到DSP来,而ARM那边管理中断是把中断函数和开中断一起写入一个函数Install_IRQ(),所以在DSP这边我也这么做:这样做在裸奔时是没有问题的,因为裸奔时中断由自己全权负责,但在使用DSP/BIOS时,由于中断要由它负责,所以我并没有运行那个统一管理中断函数和开中断的函数Install_IRQ(),所以没有开中断。虽然DSP/BIOS能把中断函数地址放入中断向量表中,但由于没有开中断,自然就不能运行。今天我把中断一打开就成功了,太感谢论坛里的兄弟们了。
于是又回到编程风格上来了,我把BSP重新进行了整理,使用预处理区分了使用DSP/BIOS和不使用时的两种情况,这样可以省去很多事。我还觉得TI在DSP28上给的那个头文件很不好,对所有的寄存器都进行结构体的位定义,在配置时又一位一位的进行,不但费时费力,还费空间时间,比如一个寄存器的16个位都独立,那么按TI的风格就要写16条语句才能把它配完,如:
xxxMOD_Reg.xxx.bits.xxx_bit = x;
xxxMOD_Reg.xxx.bits.yyy_bit = y
xxxMOD_Reg.xxx.bits.zzz_bit = z;

我个人觉得远不如像ARM那样一句话搞定来得爽快,如:
xxxReg = (xxx << x_bit) |
         (yyy << y_bit) |
         (zzz << z_bit) |
         …
省事又省时,于是我把所有的寄存器都重写一遍,不使用一个结构体(纯属个人见解)。

不过现在还有很多问题没有解决,比如烧写进FLASH之后如何运行,要把段从FLASH复制到RAM又如何实现,程序又怎么从外部存储器运行,当从外部存储器运行时,DSP又如何把总线互斥开。毕竟DSP内部RAM非常有限,外部RAM是必不可少的。
总之,路还很长,不得不佩服伟大的诗人屈原:
路漫漫其修远兮,吾将上下而求索!

如果哪位兄弟已经解决了我上面的那些问题又不吝赐教让我走捷径,那小弟在这里要非常感谢了!

相关帖子

沙发
linhai1986|  楼主 | 2010-3-14 22:00 | 只看该作者
继续:

顺便说一句,我用的DSP开发板是开发板之家的Study-2812,我个人觉得,它不是一般的烂,用了半年,CPLD出问题了,一上电就很烫,直接把整个板子的电都拉低,使得DSP不能工作。不用说,肯定是短路了。
寄到开发板之家要求维修,它换了块CPLD,收了我60元。寄回来给我,又用了没几个星期,CPLD又出问题了,一上电就很烫,直接把整个板子的电都拉低,使得DSP又不能工作。不用说,肯定又是短路了。
把我气坏了,我直接把CPLD吹下来,DSP终于可以干活了,但我不得不面对一个让我哭笑不得的现实:我只能使用板子上的串口,其他的如SPI,外部中断,按键,LED,数码管等统统没了:All of them Gone with the CPLD!
所以建议大家还是买好点的开发板,硬件软件都可以有好的支持!

使用特权

评论回复
板凳
xiaoxin1986| | 2010-3-14 22:31 | 只看该作者
不错,写的很实在

使用特权

评论回复
地板
xiaoxin1986| | 2010-3-14 22:31 | 只看该作者
要赞一个~~

使用特权

评论回复
5
smallred528| | 2010-3-14 22:36 | 只看该作者
你说的这个方面 我有意向  顶你一下..

使用特权

评论回复
6
寂寞男孩| | 2010-3-14 23:32 | 只看该作者
写的挺好的,顶一个

使用特权

评论回复
7
thf2008| | 2010-3-15 07:51 | 只看该作者
这个写的不错啊,学习了

使用特权

评论回复
8
电子乌托邦| | 2010-3-15 08:36 | 只看该作者
2L 和8L 什么关系!!

使用特权

评论回复
9
tiger2010| | 2010-3-15 08:40 | 只看该作者
写的挺好的,赞一个

使用特权

评论回复
10
yytdragon| | 2010-3-15 08:47 | 只看该作者
2L 和8L 什么关系!!
电子乌托邦 发表于 2010-3-15 08:36

顶9#

使用特权

评论回复
11
涛行九天| | 2010-3-15 11:09 | 只看该作者
本帖最后由 涛行九天 于 2010-3-15 11:20 编辑
2L 和8L 什么关系!!
电子乌托邦 发表于 2010-3-15 08:36


这个网友一问,估计就把楼主的身份问出来了,呵呵。

本来你写这个**的立意挺好的,就是描述思路有些不清晰。
开发板之家的Study-2812开发板是第一版的2812开发板,是有些不足的地方,比如板子布板不紧凑,功能一般,但是应付学习还是足够了,在我们销售的几百块中,返修率不到1%。

你是2008年4月18日购买的板子,2009年1月5日送回维修的。
以下是我们的维修记录:
详细故障描述:
3.3V对地短路,上电后明显CPLD epm7128发烫。
维修处理:
初步判断是CPLD烧坏。
拆下CPLD,量取3.3v对地电阻,已经正常。
焊接更换的CPLD,量取3.3v对地电阻,正常。
上电,量取3.3v和1.8v电压,均正常。
下载cpld程序,测试试验,正常。

对于问题的判断,不要说“不用说,肯定又是短路了”这样的话,作为技术人员,有没有短路是靠测量的。

两年前的EMP7128的价格就是60元,我们就收了个成本费。从这个烧毁芯片的事情上,我想你是否也应该反思一下,为什么你的CPLD总是烧掉呢?你外围电路的处理是不是有不合理的地方,外部采集是否做了隔离,这些你也描述一下,我想不仅能帮助我们改进工作,更能让网友们借鉴前车之鉴,不要再走错路。

另外,Study-2812开发板在2008年就停产了,我不知道楼主这时候才跑出来写这个**到底是何用意呢?如果是对我们善意的批评,我们接受。如果是攻击,那就不必要了,攻击我们的多了,大概可能影响到了其他厂家的利益吧,最终好不好还是看销量。
现在开发板之家的2812开发板早就升级为QQ2812开发板了,楼主也可以去看看,欢迎给我们提出改进意见。

使用特权

评论回复
12
redbat_228| | 2010-3-15 12:03 | 只看该作者
8# linhai2009

观察真仔细,呵呵

使用特权

评论回复
13
abcejs| | 2010-3-15 14:04 | 只看该作者
外部采集电路如果没有隔离,是很容易造成大电流而烧毁板内元器件的。

使用特权

评论回复
14
xia_318| | 2010-3-15 14:27 | 只看该作者
不错的!

使用特权

评论回复
15
遥望晨曦| | 2010-3-15 17:32 | 只看该作者
认真看了**,平心而论,楼主带着很浓烈的攻击某某公司的色彩。我不知道这是出于何意。但本人认为,楼主的观点有点片面。站在消费者的角度,如果买到的产品不能达到自己的要求,或者产品本身就存在缺陷,那的确让人懊火。楼主两次烧毁了芯片,是否是自己有某些方面没注意到或者处理不当。我记得有一次在淘宝上搜mini2440的时候,发现了开发板之家。感觉他们的产品销售量不错。我也购买了一套mini2440.(+统宝3.5,送12张DVD),记得当时是24小时就到货了,感觉还不错的速度。拿到货的时候,我接通电源,打开S1后屏幕闪一下就什么都没了?说明上说预装CE插电就能启动我插了啥也没有??心里很不爽,刚买的新产品怎么这样。疑惑的联系了他们的销售员,一开始他们叫我自己看说明书,新产品一般是没问题的。感觉这就更夸张了。有点气啊,我直接打了电话过去,跟他们的技术员谈了挺久的,根据他的提示最后才发现我自己的操作错误。我个人感觉开发板之家卖家态度好,信誉度很不错。还提供一个月保换一年保修的条款。这能保障我们消费者的利益啊。产品是好是坏,都是用出来的。这是我自己的感受

使用特权

评论回复
16
liliang9554| | 2010-3-15 21:12 | 只看该作者
认真看了**,平心而论,楼主带着很浓烈的攻击某某公司的色彩。我不知道这是出于何意。但本人认为,楼主的观点有点片面。站在消费者的角度,如果买到的产品不能达到自己的要求,或者产品本身就存在缺陷,那的确让人 ...
遥望晨曦 发表于 2010-3-15 17:32
不是楼主的意图,楼主也是转的,呵呵

使用特权

评论回复
17
jia235017| | 2010-3-16 16:59 | 只看该作者
关于楼主在学习和使用2812的一些细节我不太清楚,感觉楼主在2812的事情对开发商有些偏见,这里不是我为开发板之家昭雪也不是为他们开拓,本人也学习和用过study-2812,从开发环境的实例还是提供的实验,最后自己书写相关的控制代码,将近半年时间开发板没有出过什么问题,只是希望在问题解决之前多找找失败的原因,就像是你**所说的编程风格斧正过程一样,有时候问题的原因往往使自己造成的。

使用特权

评论回复
18
thf2008| | 2010-3-16 18:28 | 只看该作者
估计楼主也没怎么看就转过来了

使用特权

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

本版积分规则

172

主题

1451

帖子

0

粉丝