- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
烧写Flash后DSP程序运行不正常情况要点.docx
这段时间一直在调试DSP6713的Flash烧写,现在对Flash的烧写也算心中了如。那天,非常Happy的发现将闪烁LED烧写到Flash成功了,然后,就以为一切都OK了……那天,成功烧写了一个300KB以上的程序,又认为,这次应该OK了……那天,写了个Timer中断程序,烧写到Flash,却死机了……那天,在RAM上运行很流畅的一个算法(算法中调用了CCS的atan函数),在烧写到Flash后算法却死机了……那天,我开始思考:是什么情况导致RAM中跑得很Happy的程序烧写到Flash就运行得如此的不堪——众多的囧相。“且行且珍惜”,珍惜这些次发现Bug的机会,因此,我要总结:在RAM中能正常运行,而烧写到Flash后无法正常运行的一些情况讨论。请检查中断向量表中断向量表包含了所有中断的入口,在烧写Flash的时候,有两种方式可以保证中断能正常工作。具体可参见TMS320C6713烧写Flash的通用方法的第5小节。请检查程序中隐蔽的内存错误很多情况下,当出现数组越界时,在RAM中的程序都能正常运行,但在烧写Flash后运行就会出现死机或程序跑飞的现象。比如定义一个数组,int x[5];你使用x[5]=10这样的语句在RAM程序中是某些时候能正确运行的,在PC上应该也可以。但将这种程序烧写到Flash之后运行,DSP果断和你说拜拜!因此,请谨慎地检查程序代码中的数组越界和指针操作。在DSP程序中,坚决不使用C库函数中的malloc函数。如果需要动态分配内存的操作,可以自己写一个,或使用uCOS II或DSP/BIOS等嵌入式操作系统。请尽量避免使用math.h中的三角及log等函数也不知道是什么原因,也可能是我对atan函数的使用方法不正确造成的吧。在我的一个最初的程序中,我是直接这样计算atan(x)的,float x,y;...y = atan(x); // x范围为[0, 1.7]在RAM中以及在PC中都多次测试过没有任何问题。烧写Flash之后,也不是死机,但程序运行到atan这个函数的时候会卡上很长一段时间,再接着往下运行。难道是math.h中的atan运算效率太低?但为什么RAM中就能运行呢?这个还不清楚。于是想了个招,在要使用三角函数和log等函数的地方都使用查表法替代库函数,在精度要求高而存储空间又有限的场合,可使用查表+插值的方式。下面是改进方法计算atan,/* table of determine ATAN(x) */const float atan_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, 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,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),我们可以从表中查到atan(0.02)和atan(0.04),如果仅使用线性插值的话,则atan(0.03) = (atan(0.02) + atan(0.04)) / 2请检查程序的逻辑曾傻傻的写过一个类似下面的程序,uint8_t dir; // 低3位进行了编码,下
您可能关注的文档
- 电厂作业指导书标准格式.doc
- 葡萄酒品鉴会邀请函(范文).doc
- 快乐祝福语【可编辑版】.doc
- 雅思图表类英语作文模板.doc
- 宾馆酒店财物管理制度 字 投稿:覃廧廨.doc
- 网络营销实战技巧 字 投稿:吴貧貨.doc
- 领导力与执行力打造-在线作业和自测.doc
- 中小企业行政人事主管试用期工作总结报告【优质】.doc
- 戴玉要知道的常识(The common sense that jade needs to know).doc
- 常见野菜的功效及吃法 推荐常见野菜养生吃法.doc
- [青海]2025年中国建设银行青海省分行校园招聘140人笔试历年典型考题及解题思路分析附带答案详解.docx
- [青海]2024年中国农业银行青海省分行春季招聘75人笔试历年典型考题及解题思路分析附带答案详解.docx
- 2024年节目包装系统项目可行性研究报告.docx
- 2024年中国聚丙烯绳索市场调查研究报告.docx
- 2024年中国交流电动机用铝电解电容器市场调查研究报告.docx
- 2024年烧牛肉车项目可行性研究报告.docx
- 2024年中国硬质包袋市场调查研究报告.docx
- 2024年金属网片项目可行性研究报告.docx
- 2024年中国导电石墨超细粉市场调查研究报告.docx
- 2024年四刃锯项目可行性研究报告.docx
文档评论(0)