6090|1

1658

帖子

1

TA的资源

纯净的硅(高级)

楼主
 

【MSP430 编译器使用经验】+IAR软件仿真与算法优化 [复制链接]

本帖最后由 tianshuihu 于 2014-8-13 00:11 编辑

从接触单片机以来先后使用了Keil、IAR、CodeWarrior、CCS、Atmel studio...各种开发环境,各有优缺点
经过时间的洗礼,总的来说对Keil和IAR的印象最好!
Keil是最先接触到的编译器,界面十分美观、友好,软件仿真也很方便,但是不支持硬件仿真(传统51单片机),
另外51的内存太小,外设不够丰富,处理速度尤其是乘法运算的速度不够快,所以入门之后用的就比较少了

再说MSP430和IAR,第一次接触的430是149,没想到单片机居然可以做这么小,而且自带ADC、PWM、多路可中断IO等很实用的外设,并且其时钟源应用非常灵活,自带硬件乘法器....只需一次就深深的爱上她了
更让我惊喜的是其开发环境IAR居然把编译、链接、下载(或仿真)集合成一体,对于软件调试十分方便!并且其下载工具也十分丰富,并口或USB的JTAG下载器、BSL下载器等等

再后来TI推出了G2系列的LaunchPad,这块板子自带下载器,同时十分小巧,和IAR配合可以快速开发一下小的应用,从此这款LaunchPad几乎成了我实验桌里面必不可少的一块开发板!

下面说两个基于IAR开发LaunchPad的经验或者故事吧





1.利用软件仿真优化算法

单片机不像电脑有着强大的运算能力,所以应尽量优化算法,减少其运算量
TI 的官方参考例程利 "msp430x20x2_adc10_temp.c"中有用片内AD的第10通道采样热敏元件获得温度,有如下一段程序

long temp;
long IntDegC;


....
    // oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278
    temp = ADC10MEM;
    IntDegC = ((temp - 673) * 423) / 1024;

前面是两个变量的声明,后面是将AD量化的信号ADC10MEM装换成温度值IntDegC

其实long型的声明完全没必要,int已经够用(10位的AD),这里先不做探讨(或许设计者是为了保险起见,而我没发现其妙处)


下面说说优化
        IntDegC = ((temp - 673) * 423) / 1024;
这条语句等效如下

等效一:
    IntDegC= temp*0.4131-278.0068;
等效二:       
    temp   = (temp - 673);
    IntDegC= temp*0.4131;
       
修改完成之后,在Debug模式中选择 “Simulator”,可以模拟一下看看哪种方式更快、更准
编译之后,点击下载即可开始仿真,F11为单步执行,F10为执行当前行
图中标示的框3中“CCSTEP”可以看做是机器周期,每执行一步其值都会更新,并显示为红色



我分别试了3个初值,最终的运算结果3者相同,但是消耗的“CCSTEP”却不同,结果如下
   ADC10MEM 原始语句(CCSTEP 等效一(CCSTEP 等效二
678
570
728
576
700
604
708
556
789
632
688
541

从上表可以看出,整体来说等效二的处理方法更高效一点

当然,这里只是一个小小的改进,起到抛砖引玉的作用,期待大家能发现更多

PS.其实如果把long型的声明改为int的话,结果也是对的,并且原始语句仅需要200个CCSTEP即可获得正确的结果,而后面的两种等效消耗时间变化不大
这是因为long型(4字节)的乘法明显比int型(2字节)运算量大很多;而后面两种等效用到了浮点数的乘法,可比性不大
另外,一般来说比较精确的温度需要保留一位小数,这时等效一和等效二的优势就比较明显了,大家有兴趣可以对比一下,我就不再罗列了


2. 软件仿真获取精确的延时
    经过上面的仿真就会发现同一个等式,初值不同时,运算消耗的时间是不一样的
     但是有时候又想获得准确的延时,这时候软件仿真就可以派上用场了;
你只需把断点设到延时函数所在行,然后F10一下,即可得出该函数消耗的 CCSTEP
另外,需注意这个CCSTEP的时间为一个机器周期,即主时钟的一个周期,需要换算之后才能获得实际的延时

3. 软件仿真与硬件仿真
   软仿真的好处是不依赖于硬件,当遇到问题时可以帮你判断是不是软件方面的问题,如果不是再从硬件方面着手去解决,免得面对问题无从下手
但是有时候,系统需要配合外设才能工作,那只能硬件仿真了,这时候断电的设置就很有用了......


最后再补充一下,软件仿真通过了,并不意味这硬件就能很好的工作!
比如有一天我发了几乎一个上午的时间去调试一个通讯的程序,发现有个指示灯总是莫名的闪烁,但是软件仿真看不出任何问题

最后翻出了原始的程序才发现我把第一行,关闭看门狗的程序弄丢了。。。哎,瞬间有种可笑不得的感觉




学习使用430好久了,今天小小的总结一下,思绪不够清晰,大家见谅!


 
点赞 关注

回复
举报

1658

帖子

1

TA的资源

纯净的硅(高级)

沙发
 
附件是官方提供的利用内部AD测温源程序,有兴趣的可以试试

ADC10 仅在MSP430G2x53 器件上提供

msp430x20x2_adc10_temp.rar

1.31 KB, 下载次数: 4

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表