如何提高MSP430 C语言代码的执行效率

发布者:BlossomSunrise最新更新时间:2020-01-19 来源: 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 Flash信息区
下一篇:MSP430 ADC12采样转换模式详解

推荐阅读最新更新时间:2024-11-02 22:11

电力传输线路监测系统的设计与实现
  0 引言   为解决人工调整电力传输线路中偏相观测难、记录难、校准难这三大难题。该设计通过对软硬件的设计,实现了较长时间、无间断地对电力传输线路中电流、电压、零序电流、功率因数、有功功率、无功功率、视在功率、基波及谐波电能的监测、记录和存储。该设计采用MSP430F135 单片机为控制核心,结合电压、电流互感器、DSP 电能芯片、人机接口、声光报警电路和信号处理电路等实现对电力传输线路参数的监测,该系统能利用存放在U 盘中长时间采集的数据在上位机进行曲线分析,为电力部门调整线路负荷提供科学、可靠的依据。   1 系统设计方案   1.1 DSP 电能芯片的选择   该设计选用DSP 电能芯片,此芯片具有七路二阶16 位
[单片机]
电力传输线路监测系统的设计与实现
MSP430F449的数字电位器分压功能设计
MSP430单片机具有丰富的外围模块,如MSP430F449就包含8组I/O端口、精密模拟比较器、硬件乘法器、串行通信可软件选择UART/SPI模式等。在实际的应用中,USART接口具有极佳的通用性,出于扩展接口的目的,往往通过软件模拟SPI,以获得更多的SPI接口。本文就是通过软件模拟实现了SPI通信,来驱动和控制数字电位器的。数字电化器也称为数控电位器,是一种用数字信号控制阻值改变的器件。数字电位器与机械式电位器相比,具有可程控改变阻值、耐震动、噪声小、寿命长、抗环境污染等优点,因而在自动控制、智能仪器仪表、消费类电子产品等许多领域得到成功应用。 1 SPI概述 串行外围设备接口SPI(Scrial Pcriphcra
[单片机]
<font color='red'>MSP430</font>F449的数字电位器分压功能设计
MSP430G2553(二)Timer定时器说明与实例
MSP430设计了TIMER定时器,当定时器到达设置值(依据模式而定)时候就会跳转进入中断,作为常用功能,MSP430提供了三种计数模式,G2553中具有Timer0和Timer1两个16位定时器。 该文章中用一个定时执行的io口操作来演示如何设置计时器 1.配置timer 配置timer所用的寄存器有TACCR0 ,TACTL, TACCTL0 TACCR0:定时器的比较验证寄存器,16位,数值最大0xFFFF,0-65535 TACTL:定时器的控制寄存器,控制涵盖定时计数模式,分频,时钟源等 TACCTL0:定时器的比较验证控制寄存器,用于控制中断开关 寄存器的宏定义都在msp430g2553.h文件中,可以通过查询
[单片机]
基于MSP430单片机的智能无功补偿控制器的设计
1 引言 随着经济的发展和人们生活水平的提高,各行各业对供电可靠性和供电质量提出了更高的要求。由于配电网处于电网的末端,用户多为低压用户,许多用电器的功率因数很低,且不带补偿装置,这给电网带来很大的功率负担和额外线损,为了维护电力系统稳定、保证电能质量和安全运行,对电网末端变压器进行就地无功补偿很有必要。本文利用TI公司的MSP430F149单片机为核心构成的控制器,实时监测电网的电压、电流,并计算出有功、无功、功率因数,根据用电负荷情况,通过复合开关控制电容器组的自动投、切,实现无功功率的动态补偿,且具有报警功能。该装置安装在电力配电变压器低压侧,用于补偿配电变压器无功功率改善配电变压器的无功潮流,同时该装置也具有辅助调压
[单片机]
基于<font color='red'>MSP430</font>单片机的智能无功补偿控制器的设计
MSP430 - G2553之串口操作
#include msp430.h void delay1s(void) { int t = 1000; while (t--) __delay_cycles(1000); } #define UART_TXD 0x02 // TXD on P1.1 (Timer0_A.OUT0) #define UART_TBIT (1000000 / 9600) // 9600 Baud, SMCLK = 1MHz // Globals for transmit
[单片机]
MSP430应用技巧5:解决CCS中文字体小的问题
在使用CCS新建工程的时候,会发现当我们键入中文字体的时候,文字的字号比较小,我们可以通过下面方法来解决。 1、Windows-Preferences 2、General-Appearance-Basic 3、双击Text Font选项 4、在下面出现的对话框中,将字体改为仿宋即可。
[单片机]
<font color='red'>MSP430</font>应用技巧5:解决CCS中文字体小的问题
msp430单片机I/O口的灌电流和拉电流的问题
数字输入/输出端口有下列特性: □ 每个输入/输出位都可以独立编程。 □ 允许任意组合输入、输出。 □ P1 和 P2 所有 8 个位都可以分别设置为中断。 □ 可以独立操作输入和输出数据寄存器。 □ 可以分别设置上拉或下拉电阻。 一般是数字电路中讲到这个问题。 当数字电路的输出端,输出低电平的时候,外接器件将把电流,“灌入”数字电路的输出端。 当数字电路的输出端,输出高电平的时候,外接器件将从数字电路的输出端,“拉出”电流。 当一个LED接在“数字电路的输出端”和电源之间,输出端输出低电平的时候发光,这个LED就是灌电流负载。 当一个LED接在“数字电路的输出端”和地之间,输出端输出高电平的时候发光,这LED
[单片机]
<font color='red'>msp430</font>单片机I/O口的灌电流和拉电流的问题
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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