历史上的今天
返回首页

历史上的今天

今天是:2025年01月19日(星期日)

正在发生

2020年01月19日 | 如何提高MSP430 C语言代码的执行效率

2020-01-19 来源:eefocus

关于代码效率

———————

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)(单步)/系统断点


推荐阅读

史海拾趣

统宇电研(Coilmaster)公司的发展小趣事

统宇电研公司成立于1995年,初创时期面临着重重挑战。当时,电子行业正值技术革新的关键时期,无源组件市场竞争激烈。统宇电研凭借对技术的敏锐洞察力和对市场趋势的准确判断,决定专注于高性能功率电感等无源组件的研发和生产。公司团队夜以继日地攻克技术难题,不断优化产品设计,最终成功推出了一系列具有竞争力的产品,为公司赢得了市场的认可。

Electronic-Bauteile Goerlitz GmbH公司的发展小趣事

在快速发展的过程中,Electronic-Bauteile Goerlitz GmbH公司非常重视企业文化和团队建设。公司倡导以人为本的管理理念,注重员工的培养和发展。公司定期组织各种培训和学习活动,提高员工的专业素质和工作能力;同时,公司还建立了完善的激励机制和福利待遇体系,确保员工能够全身心地投入到工作中。这些努力使得公司形成了一支高效、团结、富有创新精神的团队,为公司的发展提供了坚实的保障。

请注意,以上故事均为模拟构建,旨在展示一个电子公司可能的发展过程和相关故事。如有需要,您可以根据具体情况进行调整和补充。

Bliley Technologies Inc公司的发展小趣事

随着战争的结束,军事通信市场的需求逐渐减少,Bliley开始寻求新的发展机遇。公司开始将目光投向更广泛的商业应用领域,并逐步拓展其产品线。在20世纪80年代初,Bliley开始生产SC切割晶体,这一创新使其在晶体制造领域取得了新的突破。进入21世纪,Bliley继续加大研发力度,不断推出新的产品和服务。2001年,公司更名为Bliley Technologies Inc.,以更好地反映其日益多样化的产品和服务范围。如今,Bliley已经发展成为一家提供多种频率控制产品的全球领导者。

BETA Transformer Technology Corp公司的发展小趣事

随着电子行业的快速发展和变革,BETA Transformer Technology Corp公司面临着前所未有的挑战。为了应对这些挑战,公司不断加大研发投入,加强技术创新,推出了一系列符合市场需求的新产品。同时,BETA公司还积极调整生产结构,优化供应链管理,降低成本,提高产品质量。这些举措使得BETA公司在激烈的市场竞争中保持了领先地位。

FINECHIPS公司的发展小趣事

FINECHIPS公司始终坚持客户导向的经营理念,深入了解客户需求,提供定制化的产品和服务。在一次与某知名电子产品制造商的合作中,FINECHIPS根据客户的特殊需求,迅速调整产品设计和生产流程,成功开发出了一款符合客户要求的定制化芯片。这次合作不仅加深了双方的合作关系,还为FINECHIPS赢得了更多潜在客户的信任和青睐。

Evans Capacitor Company公司的发展小趣事

在国内市场取得成功后,ECC开始将目光投向国际市场。公司积极参加国际展会,与海外客户建立联系。同时,ECC还在海外设立了研发中心和生产基地,以便更好地了解当地市场需求并提供定制化服务。通过不懈的努力,ECC的产品成功打入国际市场,实现了全球化布局。

问答坊 | AI 解惑

邵贝贝译著:嵌入式实时操作系统uCOS-II中文教程

这个可是我辛辛苦苦下载来的,无私共享给大家!…

查看全部问答>

国产网络监控安防软件现有状况

随着安防行业的发展,软件逐渐受到不少用户的重视,在一些大型系统中,软件的地位也越来越高,事实上,软件厂商并不如别人想象般潇洒,更因一些因素而制约其发展。但在这条道路上,仍有一些软件厂商坚持前行,并坚信中国安防产业的软件开发必将发生 ...…

查看全部问答>

基础知识:车载传感器的应用与分类

将当今的汽车说成是电子产品毫不过分,而且有人预言今后还会在安全、环保和信息化这三个领域加速实现电子化。这一趋势今后肯定只会加速而不可能停滞。因为汽车厂商在安全、环保和信息化这三个领域里早就提出了加速实现电子化的方针。而其中最值得关 ...…

查看全部问答>

有简单人工智能的温度控制电路

介绍一种具有简单人工智能的温度控制电路,使用该电路进行温度控制时,只需将开关打在2的位置,通过设定控制温度,并通过3位半数显表头所显示的温度值,即可精确地控制温度,使得温控操作变得十分方便。一、电路工作原理 电路中使用LM35电压型集 ...…

查看全部问答>

一个初级问题关于lpc2378开发的版

小弟我买了块lpc2378的开发板(送了一些keil的例程) 请问去哪里下载lpc2378的工程模板,还有我下载了一些例程 但是就是找不到lpc23xx.h文件? 有那位大侠能告诉我lpc23xx.h,在哪里…

查看全部问答>

不是有效的wince应用程序问题

我用evc编译成功生成exe可执行文件。板子是sbc2410,cpu s3c2410,arm9。编译时候选的cpu是armv4i,生成exe的文件下载到板子上运行不了,报错说不是有效的wince应用程序。mfcce400.dll也放到了wince的windows目录下。 配置是:standardsdk_500&nbs ...…

查看全部问答>

STC11F48XE的EEPROM怎么使用的,帮忙看下程序中问题........

********************************************************************************/    typedef unsigned int   UINT;    typedef unsigned char  BYTE;    typedef bit   &nb ...…

查看全部问答>

WM 预留内存比动态分配,好处在哪里呢

好久没来这里啦,大家好哇。 最近调试一个东东,老大说要预留内存给这个驱动,以前是HalAllocateCommonBuffer动态申请连续内存空间的。 我想问下,这个预留的好处在哪里呢? 能节约内存空间吗? 谢谢啦…

查看全部问答>

我是刚刚转到WIN CE下面进行开发的新手,在产品开发过程碰到这样一个问题,请教大家,还请抽空帮忙呀!!!

我是刚刚转到WIN CE下面进行开发的新手,在产品开发过程碰到这样一个问题,请教大家,可能问题太简单或者存在不恰当的地方,还麻烦大家帮我指出来,不要笑话! 我要开发一个产品: 软件平台:WIN CE或WIN MOBILE, 硬件平台:自制ARM 2440小板子 ...…

查看全部问答>

寻找PSOS for mips 的正版软件(高价)

寻求PSOS操作系统安装破解或者正版软件(现金交易)      谁哪里有PSOS for MIPS的软件,我现在手里只有一个需要修改时间的安装的版本?高价求购正式版本,或者谁能够破解,我们可以出高价(现金交易)寻求帮助.    PS:海 ...…

查看全部问答>