算法开发阶段编写代码心得分享

这一年并未更新博文,最近调试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是否添加该部分;

其他报错按照语法修改即可。

检查错误时,建议从前往后看,因为后边的错误警告可能是由前边的基础错误引起。

 

先写这么多了,祝好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值