如何提高MSP430 C语言编程效率

发布者:快乐之源最新更新时间:2016-08-18 来源: eefocus关键字:MSP430  C语言  编程效率 手机看文章 扫描二维码
随时随地手机看文章
关于代码效率
———————
MSP430系列的程序设计准则,有利于提高代码效率。应该指出,这些准则基本上是基于MSP430系列的硬件结构特点而提出的。
1.位域类型的执行时很慢的,所以应当在仅仅为了节省数据存储空间时才使用位域方式。如果用户必须使用位域存储,可以用char或unsigned int的位屏蔽操作来代替位域操作。
2.在模块之外不使用的变量应当声明为static,这样在编译时有可能使这些变量分配在寄存器中暂存,从而提高了代码效率。
3.尽可能使用unsigned数据类型。许多情况下,对unsigned数据类型的操作,比对signed数据类型的操作效率更高,尤其对于除法和求模运算更是如此。
4.程序设计中应该使用ANSI-C原型函数。对ANSI函数的调用比对K&S函数的调用效率更高。
5.MSP430系列单片机对16位数据类型的操作效率最高。如:short、int、unsigned int类型等。一般来说,利用8位数据类型可以节省数据的存储空间,但这样并不会减少程序代码的存储空间;而对于运用32位数据类型,由于MSP320系列的结构并不直接支持,执行的效率是较低的。
6.标量自动变量(scalar auto)通常分配在寄存器中,因此,只要有可能就应该用auto类型而不用static类型。
7.函数的头两个参数是用寄存器传送的,因此,将参数传递给函数时,用参数方式常比用static变量效率更高。
8.复制结构和联合数据类型是开销很大的操作。应该尽量避免在程序运行中做结构和联合的赋值操作,避免以结构和联合数据类型作为函数的参数,避免让函数返回结构和联合数据类型。只要有可能,就应该采用指向结构和联合的指针来实现上述的各种操作。
9.函数中声明的无初值非标量自动变量(结构、联合和数组等),会在程序运行中每次调用函数时作数据的复制操作。如果是常量,可以用static const存储类来避免发生这种情况。
此外,采用C程序调用汇编子程序的方法也是提高代码效率的有效手段。
连接命令文件的作用
——————————
使程序设计适合于用户的目标系统。每一个项目都需要一个包含目标系统存储器映射细节的连接命令文件。它的文件扩展名为.xcl,可以用文本编辑器来浏览其内容。
连接命令文件有基本相同的结构。以MSP430F149C.xcl为例。文件中含有大量的注释行,以增加可读性。实际起作用的命令行并不多。
首先用-c命令将cpu类型定义为MSP430
-cMSP430
然后用一系列-Z命令以定义编译器使用的存储器段,分别定义了数据、堆栈、信息、代码、中断向量等功能区域,命令如下:
-Z(DATA)UDATA0,IDATA0,ECSTR=0200-09FF
-Z(DATA)CSTACK#0200-0A00
-Z(CODE)INFO=1000-10FF
-Z(CODE)CODE,CONST,CSTR,CDATA0,CCSTR=1100-FFDF
-Z(CODE)INTVEC=FFE0-FFFF
再用-e命令定义适合用户的应用要求和空间限制的用于printf和scanf的底层输入输出函数,命令如下
-e_small_write=_formatted_write
-e_medium_read=_fomatted_read
最后,指明加载的C库(运行时间库文件),以适应不同CPU的差异,如是否含硬件乘法器等:
cl430ksm.r43
用户可以直接从ICC430子目录中选择适合目标系统的连接命令文件,但是,为了更好的适应用户的设计目标,也可以自行编辑修改连接命令文件。
C430的配置
—————
〉〉设定目标机型号的头文件
根据目标机型号(例如MSP430F149)在源文件开始添加如下语句:
#include 'MSP430X14X.h'
这个文件包含具体MSP430目标机器中特殊功能寄存器的地址说明。在后续的代码编写中就可以直接使用寄存器的名称。MSP430X14X.h文件的内容可以在软件的INC子目录下找到。
1.存储器的分配
通过连接命令文件,可以说明目标系统硬件环境中的ROM和RAM的地址。连接的选项规定:
*ROM区域用于存储函数、常数和初始化值
*RAM区域用于存储堆栈和变量
*非易失RAM区可以通过no_init类型修饰符和存储器#pragma编译命令来说明将驻留变量。编译器将这种变量放在独立的no_init段中。它的地址范围由用户在非易失RAM区中指定。程序运行时系统不对这些变量作初始化。
2.堆栈体积 
默认的是512Bytes,用了行命令:-Z(DATA)CSTACK+200
3.输入输出
*putchar和getchar是基础函数,用于实现所有基于字符的I/O操作。为了使所有基于字符的I/O功能得以实现,用户必须用硬件环境提供的工具来定义这两个函数。
*printf和sprintf函数使用名为_formatted_write的通用格式化函数。ANSI标准版本_formatted_write
体积非常大,而它所提供的功能在不少应用中并不需要。为了减少存储器的开销,在标准C库中提供了两种可以替代的较小版本:
1)_medium_write
除了不支持浮点数之外,它与_formatted_write一样。因此,如果使用%f,%g,%G,%e和%E说明符将产生错误。_medium_write比_formatted_write小得多。
2)_small_write
与_medium_write接近,但是对int类型只支持%%,%d,%o,%c,%s和%x说明符,并且不支持位域和精度参数。_small_write大小约为_formatted_write的10%—15%。
C430编译器的默认版本就是_small_write:-e_small_write=_formatted_write
要选择完整的ANSI版本,可以删除这一行。
*简化printf
有时为了支持特殊输出格式的需求,或支持非标准输出设备的需求,必须订制特殊的输出子程序。文件imwri.c中提供了高度简化的printf函数的源文件,其中不包含sprintf。这一源程序版本可以按照用户要求加以修改,然后把编译好的模块加入库中,代替原有的模块。
*scanf和sscanf
与printf和sprintf相似,scanf和sscanf使用名为_formatted_read的通用格式化函数。ANSI标准版本_formatted_read体积非常大,而它所提供的功能在不少应用中并不需要。为了减少存储器的开销,在标准C库中同样也提供了体积较小的版本:_medium_read。除了不支持浮点数之外,它与_formatted_read功能一样,但是_medium_read比_formatted_read要小得多。
C430的默认版本是_medium_read。
4.硬件与存储器初始化
创建cstartup.r43的目标模块文件,然后用户应当在连接命令文件中使用下列命令,使XLINK引用用户定义的CSTARTUP模块来代替库中的模块:
-A cstartup
-C library
在Workbench中,可以将修改后的cstartup文件加到用户的项目中,并在连接命令文件中的library之前加上-C命令。
其它关键词
—————
目标(target) 组(group) 源文件(source file)
硬件乘法器(hardware multiplier) 硬件仿真器(flash emulation tool)
软件模拟调试(simulator) 硬件断点(全速)/虚拟断点(virtual breakpoint)(单步)/系统断点
关键字:MSP430  C语言  编程效率 引用地址:如何提高MSP430 C语言编程效率

上一篇:用msp430与TLC5620实现AD_DA
下一篇:MSP430数字滤波器设计分享

推荐阅读最新更新时间:2024-03-16 15:06

msp430单片机之串口通信模块
串口通信 单片机的串口通信模块在单片机中起到重要作用,通过串口它可以与PC机或者其他模块进行通信,传输数据或者控制命令,当然在传输数据的时候我们必须有一定的协议,让通信双方能够知道得到的数据是什么,所以我们必须设置一种格式,让通信双方能够得到正确的数据信息,首先我们从整体上来看看这个模块的结构,下图是msp430单片机中的串口模块: 从上图中我们可以看出串口模块可以分为4部分:控制模块,接收模块,发送模块,波特率控制模块 这些模块有相应的寄存器,我们的主要任务就是对这些寄存器进行相关的配置,接下来就详细介绍这些寄存器的作用。 1.控制寄存器UXCTL (X为数字,不同型号的产品包含的串口模块也不同,有些只有一
[单片机]
<font color='red'>msp430</font>单片机之串口通信模块
MSP430F149学习之IO端口
一 ,IO端口 MSP430F149,TI公司超低功耗16位单片机,具有6组独立IO口,每组8位,共48个IO口,64个引脚。 二 ,IO口寄存器 1.端口特点 其中P0,P1口具有三种功能:I/O、中断功能、其他外设功能。 其余端口就只有I/O、其他外设端口。 2.IO口常用寄存器 2.1端口控制寄存器PxDIR 2.2 端口输入寄存器 2.3 端口输出寄存器 2.4 功能引脚选择位 2.5 中断标志位寄存器 2.6 中断允许寄存器 2.7 中断触发方式寄存器 time to update,,,,,,,,,,,,,
[单片机]
<font color='red'>MSP430</font>F149学习之IO端口
基于msp430单片机的温度测量系统设计
  本文介绍一种应用msp430单片机测量温度的方法,来代替传统教学中相对落后的热敏电阻结合电流表的实验方法。   1 温度测量部分   用于测量温度的温度敏感元件有很多种,比如热电偶、热敏电阻、集成温度传感器、数字温度传感器等等。本系统采用的是热敏电阻。热敏电阻由对温度非常敏感的半导体陶瓷质工作体构成。与一般常用的金属电阻相比,它有较大的电阻温度系数,可以获得较高的温度分辨率。不同材料制成的热敏电阻适用的测温范围不同,如CuO和MnO2制成的热敏电阻适用于-70~120℃,适于测量体温。温度是模拟量,要把被测的模拟量转换成数字量,以供单片机处理。为了节约成本,可以通过斜率A/D转换来实现模数转换。斜率A/D转换是利用外接电容
[单片机]
基于<font color='red'>msp430</font>单片机的温度测量系统设计
51单片机C语言程序100例分析(3)串口
//实例49:用定时器T0的中断实现 渴望 主题曲的播放 #include reg51.h //包含51单片机寄存器定义的头文件 sbit sound=P3^7; //将sound位定义为P3.7 unsigned int C; //储存定时器的定时常数 //以下是C调低音的音频宏定义 #define l_dao 262 //将“l_dao”宏定义为低音“1”的频率262Hz #define l_re 286 //将“l_re”宏定义为低音“2”的频率286Hz #define l_mi 311 //将“l_mi”宏定义为低音“3”的频率311Hz #define l_fa 3
[单片机]
OK6410裸机学习之C语言调用汇编函数
start.S源码: .globl _start .globl delay //用globl声明,外部函数就可以调用delay函数 _start: // 硬件相关的设置 // Peri port setup ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff) // 关看门狗 // 往WTCON(0x7E004000)写0 ldr r0, =0x7E004000 mov r1, #0 str r1, // 设置栈 ldr sp, =8*1
[单片机]
MSP430系列单片机复位电路系统设计分析
  0 引言   TI公司的混合信号处理器MSP430系列单片机以其处理能力强大、外围器件集成度高、功率消耗低、产品系列全面、全系列工业级等特点,作为目前MCU主流市场的产品之一,在电子应用领域中得到广泛应用,被越来越多的电子设计师所青睐。由于复位电路设计问题而导致的系统出现上电后不工作或状态不正确是很多MSP430单片机电路设计者们在设计、调试和应用中曾遇到过的问题,尽管这种情况发生的几率很低,但对于可靠性要求较高的应用场合,这个现象仍需引起电子设计人员的足够重视。   为此,本文对MSP430全系列单片机的复位系统和复位机制进行了详细深入的分析,并针对性地提出了具体的外围复位电路设计方案和有关电子元器件的详细介绍,以供同行
[单片机]
<font color='red'>MSP430</font>系列单片机复位电路系统设计分析
MSP430f149端口功能及设置
MSP430f149常用的端口有P1、P2、P3、P4、P5、P6,它们都可以直接用于输入/输出。MSP430系统中没有专门的输入/输出指令,输入/输出操作通过传送指令来实现。端口P1~P6的每一位都可以独立用于输入/输出,即具有位寻址功能。常见的键盘接口可以直接用端口进行模拟,用查询或者中断方式控制。由于MSP430的端口只有数据口,没有状态口或控制口,在实际应用中,如在查询式输入/输出传送时,可以用端口的某一位或者几位来传送状态信息,通过查询对应位的状态来确定外设是否处于“准备好”状态。 端口的功能: (1)P1,P2端口: I/O,中断功能,其他片内外设功能如定时器、比较器; (2)P3,P4P5P6端口:I/O,其他
[单片机]
基于MSP430的无线传感器网络设计
引言   传感测试技术正朝着多功能化、微型化、智能化、网络化、无线化的方向发展。自组织无线传感器网络(Self Organizing Wireless Sensor Networks)作为新兴技术,是目前国外研究的热点,其在军事、环境、健康、家庭、商业、空间探索和灾难拯救等领域展现出广阔的应用前景。早在2003年美国自然科学基金委员会已经斥巨资来支持这方面的研究,并且出现了一些致力于无线传感器网络的公司,其中Crossbow公司已推出了Mica系列传感器网络产品。国内很多大学现已经开展相关领域的研究,但大部分工作仍处在自组织无线网络协议性能仿真和硬件节点小规模实验设计阶段。本文就国防科技大学传感器教研室开展可应用于环境监测方面无线
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved