烧写Flash后DSP程序运行不正常情况要点

烧写Flash后DSP程序运行不正常情况要点

ID:41395809

大小:19.64 KB

页数:9页

时间:2019-08-24

烧写Flash后DSP程序运行不正常情况要点_第1页
烧写Flash后DSP程序运行不正常情况要点_第2页
烧写Flash后DSP程序运行不正常情况要点_第3页
烧写Flash后DSP程序运行不正常情况要点_第4页
烧写Flash后DSP程序运行不正常情况要点_第5页
资源描述:

《烧写Flash后DSP程序运行不正常情况要点》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、这段时间一直在调试DSP6713的Flash烧写,现在对Flash的烧写也算心中了如。那天,非常Happy的发现将闪烁LED烧写到Flash成功了,然后,就以为一切都OK了……那天,成功烧写了一个300KB以上的程序,又认为,这次应该OK了……那天,写了个Timer中断程序,烧写到Flash,却死机了……那天,在RAM上运行很流畅的一个算法(算法中调用了CCS的atan函数),在烧写到Flash后算法却死机了……那天,我开始思考:是什么情况导致RAM中跑得很Happy的程序烧写到Flash就运行得如此的不堪——众多的囧相。“且行且珍惜”,珍惜这些次发现Bug的机会,因此,我要总结:

2、在RAM中能正常运行,而烧写到Flash后无法正常运行的一些情况讨论。请检查中断向量表中断向量表包含了所有中断的入口,在烧写Flash的时候,有两种方式可以保证中断能正常工作。具体可参见TMS320C6713烧写Flash的通用方法的第5小节。请检查程序中隐蔽的内存错误很多情况下,当出现数组越界时,在RAM中的程序都能正常运行,但在烧写Flash后运行就会出现死机或程序跑飞的现象。比如定义一个数组,intx[5];你使用x[5]=10这样的语句在RAM程序中是某些时候能正确运行的,在PC上应该也可以。但将这种程序烧写到Flash之后运行,DSP果断和你说拜拜!因此,请谨慎地检查程序

3、代码中的数组越界和指针操作。在DSP程序中,坚决不使用C库函数中的malloc函数。如果需要动态分配内存的操作,可以自己写一个,或使用uCOSII或DSP/BIOS等嵌入式操作系统。请尽量避免使用math.h中的三角及log等函数也不知道是什么原因,也可能是我对atan函数的使用方法不正确造成的吧。在我的一个最初的程序中,我是直接这样计算atan(x)的,floatx,y;...y=atan(x);//x范围为[0,1.7]在RAM中以及在PC中都多次测试过没有任何问题。烧写Flash之后,也不是死机,但程序运行到atan这个函数的时候会卡上很长一段时间,再接着往下运行。难道是ma

4、th.h中的atan运算效率太低?但为什么RAM中就能运行呢?这个还不清楚。于是想了个招,在要使用三角函数和log等函数的地方都使用查表法替代库函数,在精度要求高而存储空间又有限的场合,可使用查表+插值的方式。下面是改进方法计算atan,/*tableofdetermineATAN(x)*/constfloatatan_tb[]={//精度(0.020)0.00,1.15,2.29,3.43,4.57,5.71,6.84,7.97,9.09,10.20,11.31,12.41,13.50,14.57,15.64,16.70,17.74,18.78,19.80,20.81,21.80

5、,22.78,23.75,24.70,25.64,26.57,27.47,28.37,29.25,30.11,30.96,31.80,32.62,33.42,34.22,34.99,35.75,36.50,37.23,37.95,38.66,39.35,40.03,40.70,41.35,41.99,42.61,43.23,43.83,44.42,45.00,45.57,46.12,46.67,47.20,47.73,48.24,48.74,49.24,49.72,50.19,50.66,51.12,51.56,52.00,52.43,52.85,53.27,53.67,54.07

6、,54.46,54.85,55.22,55.59,55.95,56.31,56.66,57.00,57.34,57.67,57.99,58.31,58.63,58.93,59.24,59.53,59.83};y=atan_tb[((uint16_t)(x*100))>>1];建立atan的表可以借助Matlab。在需要插值的场合,比如,上面atan_tb的精度为0.02,而我们希望在少数的一些场合下使atan在0.01的精度,如果以0.01建表将会使表的数据存储量扩大1倍,这是我们可以在0.02精度表的基础上再使用插值的方式。比如,要计算atan(0.03),我们可以从表中查到at

7、an(0.02)和atan(0.04),如果仅使用线性插值的话,则atan(0.03)=(atan(0.02)+atan(0.04))/2请检查程序的逻辑曾傻傻的写过一个类似下面的程序,uint8_tdir;//低3位进行了编码,下面的switch进行解码intdist_switch(inta,intb,intc){intmax_dist;intmin_dist;intresult=0;switch(dir){case0x00:break;case0x01:max=a

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。