关于代码效率

——————————————本文引用地址:http://www.eepw.com.cn/article/201611/316286.htm

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

MSP430C语言编程技巧,如何提高MSP430 C语言编程效率相关推荐

  1. noip初赛试题 c语言,NOIP初赛试题提高组C语言.doc

    NOIP初赛试题(提高组C语言) 第十届(2004) 三.问题求解( 共 2 题,每题 5 分,共计 10 分 ) 1.75 名儿童到游乐场去玩.他们可以骑旋转木马,坐滑行铁道,乘宇宙飞船.已知其中 ...

  2. java 编程技巧_一些实用的 Java 编程技巧

    任何事情有可能出错,没错,的确如此. 这就是为什么我们要采用"防御性编程",即一些偏执习惯的原因.下面是我个人认为的 10 个最有用但偏执的 Java 编程技术.一起来看一看吧: ...

  3. Linux系统下计算机C语言的编程技巧

    C语言在多程序编辑中发挥着基础性作用,并在国际范围得到了全面应用.科技的蓬勃发展,使得人们更加重视C语言技术,并对C语言提出更多的要求.但Linux系统是最主要的操作系统之一,基于此开展C语言编程工作 ...

  4. 编程学习过程中有哪些快速提高编程技巧的方法?

    目录 前言 一 编程的学习方法 1.1明确目标及范围 1.2学习方法 二 编程技巧的提高 2.1多实践 2.2多思考 2.3多沟通 2.4多学习 2.5多总结 三 编程的习惯和技巧 四 个人经历 总结 ...

  5. 在线学习新编程 技巧全攻略

    摘要:有句俗语叫:"技多不压身",如果你有时间和兴趣,不妨多了解和掌握编程技能,或许随时可能有用.本文为你收集了一些编程技巧,让你轻松学编程. 有句俗语叫:"技多不压身& ...

  6. 【笔记】效率之门——Python中的函数式编程技巧

    文章目录 Python函数式编程 1. 数据 2. 推导式 3. 函数式编程 3.1. Lambda函数 3.2. python内置函数 3.3. 高阶函数 4. 函数式编程的应用 Python函数式 ...

  7. 编程语言C语言用中文代写方法,C语言中如何输入汉字,C语言乱码详细解答

    OK,那么我们首先来看一下中文编码: 你以为会写中文就会编程吗?这就像你以为会写汉字就会写出好文章一样.编程是和机器沟通,因此要用机器的语言而不是人类的语言.最早的程序就是0和1的数字,不是中文也不是 ...

  8. 用友汽车软件java,java编程用什么软件最好?java编程软件分享

    程序员写编程,都想用好的编程软件,因为好的编程软件可以提高程序员的工作效率,那么java编程用什么软件最好?接下来,我们就来给大家讲解一下这方面的内容. 1.JDK JDK是java初学时用的,比较麻 ...

  9. MSP430C语言编程技巧,TIMSP430微控制器软件编程经验和应用技巧 - 全文

    本文主要介绍TIMSP430微控制器软件编程设计中的实践经验和应用技巧. 第一部分讲述基于中断的标准程序流程模式,适用于大多数的产品应用编程:另外一部分讲述MSP430微控制器编程人员在开发产品时需要 ...

最新文章

  1. php8的jit如何使用,PHP JIT 是什么?PHP8 新特性之 JIT 图文详解
  2. getDeclaredField(x);与set方法的用法
  3. HTML5最新漏洞:用户硬盘或被垃圾数据塞满
  4. 字节跳动获CVPR2021 细粒度图像竞赛双料冠军
  5. Java程序员从笨鸟到菜鸟之(一百零九)一步一步学习webservice(三)开发第一个基于XFire的webservice
  6. Seq2Seq+前缀树:检索任务新范式(以KgCLUE为例)
  7. 黔南民族师范学院计算机与信息学院,黔南民族师范学院
  8. Word -- 列表重新编号
  9. 电脑自带的画图工具怎么使用笔刷
  10. (15)FPGA面试技能提升篇(TDD-LTE协议、GTX IP)
  11. Shader实例:NGUI制作网格样式血条
  12. 漫画:什么是A*寻路算法?
  13. 博弈论 | 三姬分金与囚徒困境
  14. 勒让德多项式的正交性和归一化
  15. 关闭 135 139 445 转
  16. javax.mail 发送163邮件
  17. snakemake--我最喜欢的流程管理工具
  18. 对路径“C:\Inetpub\wwwroot\UploadFile\AssertTemple1.xls”的访问被拒绝。
  19. 不可能得到的最短骰子序列
  20. fedora7 WIFI驱动的加载与wpa_supplicant的配置

热门文章

  1. 服务器信号有杂音怎么回事,直播有杂音是怎么回事?奉上原因及解决方法
  2. ROOT/RStringView.hxx:32:37: error: ‘experimental’ in namespace ‘std’ does not name a type
  3. java发现城市_java实现简单注册选择所在城市
  4. 背景图自适应屏幕大小
  5. sonix c语言 pdf,松翰c语言(项目)例程(Sonix C language routines (project)).doc
  6. Spark环境搭建Standalone模式
  7. 正向代理和反向代理定义和区别
  8. 如何准备测试数据?用 DbUnit 和 Anthill 控制测试环境
  9. opencv-python cv2
  10. C# 固高Jog运动