请教一些DSP编程中不解的问题

henluo   2009-9-17 06:01 楼主
刚有机会接触一个做DSP开发的公司,遇到许多不明白的问题,想来请教一下这里的高手。

他们的产品大多数用的TI的DSP芯片。他们的程序在eclipse里开发,却不在那里调试,全部要到DOS环境下编译运行,要做许多的make文件,看得头很晕。开发出的程序却都是有界面的。他们好像用subversion来管理程序,有一个叫repository的地方专门用来放不同项目的程序,管理看起来很科学,虽然不是很明白。

他们在开发时用C++,然后用code composer把他翻译成汇编语言装到板子上运行。这种C++却是可以和硬件打交道的,比如他们可以控制数据的内存区,以改善运行速度,所以感觉这不是普通的C++。常常在TI的资料上看到equivalent C的字样,不知道他们用的是不是属于equivalent C呢,而这个equavalent C是不是也属于一种介于C和汇编之间的一种高级汇编语言呢。

更加困惑的是他们在程序里尽量避免使用动态内存分配,从没看见过new int[xx], 只看到过 int  a[xx],甚至 static int a[xx].,这里的xx通常还是上k的数字。记得学习编程的时候在数组很大时是不建议用堆栈的,他们为什么不忌讳这个问题呢,是环境不同吗。

他们还会大量地使用全局变量和静态数组,感觉这都是编程十分敏感的地方,为什么他们可以不加思索地到处用呢。

总之现在很着急,有点无从下手的感觉,如果能得到大家有关问题的一点点提示,相信对我都是很大的帮助,谢谢!



回复评论 (15)

Just know about Embedded C++, answering one of my questions.

Embedded C++(EC++) is a dialect of the C++ programming language for embedded systems. It was defined by an industry group led by major Japanese CPU manufacturers, including NEC, Hitachi, Fujitsu, and Toshiba, to address the shortcomings of C++ for embedded applications. The goal of the effort is to preserve the most useful object-oriented features of the C++ language yet minimize code size while maximizing execution efficiency and making compiler construction simpler
点赞  2009-9-22 20:16
说的跟真的似的!
点赞  2009-9-22 20:40
真心地请教大侠,Embedded C++申请内存和在windows里有什么不同的规范吗,为什么他们不管多大都用静态数组呢,谢谢

引用: 引用 2 楼 zyzhang365 的回复:
说的跟真的似的!
点赞  2009-9-23 05:33
个人觉得对于实时系统,这里是用的是类似于空间换时间的概念,首要的追求的是实时性。
如果使用动态内存分配与释放,是需要花时间的,很多情况下满足不了要求。
动态内存管理是比较复杂的一件事。
点赞  2009-9-23 08:09
Thanks very much!!

I guess the stack is not a problem in embedded system, otherwise it will cause problems in stack, right?

Sorry to bother you by my rubbish English. No Chinese input right now.

引用: 引用 4 楼 zyzhang365 的回复:
个人觉得对于实时系统,这里是用的是类似于空间换时间的概念,首要的追求的是实时性。
如果使用动态内存分配与释放,是需要花时间的,很多情况下满足不了要求。
动态内存管理是比较复杂的一件事。
点赞  2009-9-23 17:19
堆栈是任何时候都需要当心的。
全局数组与静态数组和堆栈的空间不是一回事。
点赞  2009-9-23 18:58
再次感谢你的耐心! 重新复习了一下有关的问题,发现我很多概念本来就不清,现在更是一团乱麻,不过我明白了只有自动数组才和堆栈有关,以前学C的时候记得很大的数组最好动态分配,因为堆栈没有那么大,现在才知道这和静态数组是没有关系的,就如你所说不是一回事。

说到静态数组,除了全程可见还有什么优越性呢,因为是图像处理程序,每个数组都有几百K那么大,一个算法里而往往需要许多个这么大的空间,申请静态数组时总担心内存不够用。最不理解的是连成员函数都定义成静态的,一律都是  static fun(); 你能想明白为什么吗。

感谢你的多次停留,可惜不在一个城市,否则一定请你吃饭谢过:)

点赞  2009-9-24 07:20
DSP一般都是做单一任务的,要求可靠性高。使用的静态数组是正常的,因为所需的RAM是已知的,只要硬件有那么多RAM就可以了。动态分配的不确定性比较多。容易产生BUG。
点赞  2009-9-24 08:03
严格讲,堆栈是指栈(stack), 堆是指(heap),这个区别你应该已经明白了。这个是指数据的存储区域。
找本C语言的书看看吧。
static fun(); 这是指函数是局部函数,文件外不可见;
static 修饰变量表示静态变量,如果在函数内部只表示在函数内部可见,在函数外部只表示在本文件内可见。
点赞  2009-9-24 08:09
非常感谢你的回复,现在明白了:)头像上的宝宝好可爱呵呵


引用: 引用 8 楼 azmao 的回复:
DSP一般都是做单一任务的,要求可靠性高。使用的静态数组是正常的,因为所需的RAM是已知的,只要硬件有那么多RAM就可以了。动态分配的不确定性比较多。容易产生BUG。
点赞  2009-9-25 06:25
再次谢谢你,本来准备去温习功课再回来问你了,可是临走前想再多问一句,静态函数是局部函数,文件外不可见,难道是说我在其他文件里不能调用这个函数吗?



引用: 引用 9 楼 zyzhang365 的回复:
严格讲,堆栈是指栈(stack), 堆是指(heap),这个区别你应该已经明白了。这个是指数据的存储区域。
找本C语言的书看看吧。
static fun(); 这是指函数是局部函数,文件外不可见;
static 修饰变量表示静态变量,如果在函数内部只表示在函数内部可见,在函数外部只表示在本文件内可见。
点赞  2009-9-25 06:27
引用: 引用 11 楼 karen99 的回复:
再次谢谢你,本来准备去温习功课再回来问你了,可是临走前想再多问一句,静态函数是局部函数,文件外不可见,难道是说我在其他文件里不能调用这个函数吗?


引用 9 楼 zyzhang365 的回复:
严格讲,堆栈是指栈(stack), 堆是指(heap),这个区别你应该已经明白了。这个是指数据的存储区域。
找本C语言的书看看吧。
static fun(); 这是指函数是局部函数,文件外不可见;
static 修饰变量表示静态变量,如果在函数内部只表示在函数内部可见,在函数外部只表示在本文件内可见。


在其它文件里不能调用。
点赞  2009-9-25 06:44
equivalent C
-----------
这是讲操作原理时的代码吧? 意思是你可以用任何语言,但他们只给出C的代码示范.........
点赞  2009-9-25 08:26
这个我真的不懂了,如果我们定义一个类用一个文件,然后一个.h 文件,那么我们开发其他程序不都是在另一个文件里吗,怎么不能调用静态类成员函数呢。

引用: 引用 12 楼 zyzhang365 的回复:
引用 11 楼 karen99 的回复:
再次谢谢你,本来准备去温习功课再回来问你了,可是临走前想再多问一句,静态函数是局部函数,文件外不可见,难道是说我在其他文件里不能调用这个函数吗?


引用 9 楼 zyzhang365 的回复:
严格讲,堆栈是指栈(stack), 堆是指(heap),这个区别你应该已经明白了。这个是指数据的存储区域。
找本C语言的书看看吧。
static fun(); 这是指函数是局部函数,文件外不可见;
static 修饰变量表示静态变量,如果在函数内部只表示在函数内部可见,在函数外部只表示在本文件内可见。




在其它文件里不能调用。
点赞  2009-9-26 00:01
谢谢你,原来是这个意思,下次看见它再也不用疑惑了:)

引用: 引用 13 楼 great_bug 的回复:
equivalent C
-----------
这是讲操作原理时的代码吧? 意思是你可以用任何语言,但他们只给出C的代码示范.........
点赞  2009-9-26 00:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复