这一年并未更新博文,最近调试dsp代码,一点心得记录在此。
此阶段算法开发环境顺序大致为:
matlab->visual studio->ccs(TI的编译器)。
1、matlab阶段
由于面向对象的环境更加接近人的思维,matlab写脚本不会对代码能力有严苛要求,在阅读文献后想要验证某个算法,想要挖掘数据潜在规律,在这个环境下尝试最合适不过了。
类似的python也很亲民。
在调试阶段发现matlab的一个缺点:由于项目数据每帧刷新,可能和matlab内部优化有关,往后执行会遇到强烈的卡顿现象。所以只能选择每次运行一定量的数据。
2、visual studio阶段(c语言)
此阶段的代码就需要熟悉底层的思维了。
计算机会怎么思考,它会怎么执行最小最大值,并且找到他们的位置?怎么计算方差?怎么挑选数组中的unique?甚至怎么输入一个数组遍历不越界?一个大致长度的数组,遍历用8位的index是否越界?在此环境都需要思考。
什么样的数据适合打包一起组成结构体?
如何编写大众公用的工具函数?
在此阶段需要区分c语言风格和c++风格,笔者也是去年四五月开始写c,会有c++的习惯迁移,诸如传递参数用了引用符号修饰,但在c,传参多用指针。
同时,matlab下索引起始1,而c是0,移植时候需要特殊注意。
3、ccs阶段
我们项目在visual studio阶段代码就注意到移植问题,所以在移植时候代码修改量不大,注意windows环境下的工具函数在ccs是否还同样存在。
诸如“stdafx.h”这类文件在ccs就没有。这里需要注意,模块内声明而为引用的变量,ccs视其为错误。
4、问题-相互包含
近期遇到相互包含的问题,起因是因为某个变量定义需要被引用故而包含其所在的头文件,一不小心引发相互包含的死循环。
对于此种问题的解决,采用将定义移动到更加低级的文件中,使其都可包含。
其实能引起相互包含的多为变量定义,诸如宏或者结构体定义等,可以在头文件平行位置再定义一个头文件(这个文件比较底层,基本不包含其他文件),有此冲突的移动到这里,两个本相互包含的头文件都去包含该文件。
5、问题-全局变量
(1)关于全局变量的使用:当一个变量生命周期伴随整个工程,而只在某一文件下调用,可以用关键词static修饰,当一个变量会被多个文件调用时,以全局变量形式存在合理;
(2)接口函数类似,如果只在内部调用,可以只在实现文件声明,如果存在别处调用,在头文件声明,如果是为了保护函数隐私,需要static声明才实际生效;
(3)对于多核访问的全局变量,通过核间通信解决,类似cache_inv、cache_wb,在申请空间不需要特殊注意。
5、dsp编译
编译阶段在shell环境下,先depend指令生成二进制文件,然后编译。
前者是基于makeFile文件生成大的目录文件,后者是从代码内部去仔细编译。
报错“No rule to make target”时,需要检查makeFile是否添加该部分;
其他报错按照语法修改即可。
检查错误时,建议从前往后看,因为后边的错误警告可能是由前边的基础错误引起。
先写这么多了,祝好。