ARM设计思想与高效C编程

发布者:纸扇轻摇最新更新时间:2015-04-10 来源: 21ic关键字:ARM  设计思想  高效C编程 手机看文章 扫描二维码
随时随地手机看文章
 一.RISC设计思想

ARM内核采用RISC体系结构。RISC是一种设计思想,其目标是设计出一套能在高时钟频率下单周期执行,简单而有效的指令集。RISC的设计重点在于由硬件执行的指令的复杂度,这是因为软件比硬件容易提供更大的灵活性和更高的智能。因此,RISC设计对编译器有更高的要求;相反,传统的复杂指令集的计算机(CISC)则更侧重于硬件执行指令的功能性,使CISC变得更复杂。

RISC设计思想主要由下面4个设计准则来实现:

·指令集

RISC处理器减少了指令种类,每条指令的长度都是固定的,允许流水线在当前指令译码阶段去取其下一条指令;而CISC处理器中,指令的长度通常不固定,执行也需要多个周期。

·流水线

在理想情况下,流水线每周期前进一步,可获得最高的吞吐率;而CISC指令的执行需要调用微代码的一个微程序。

·寄存器

RISC处理器拥有更多的通用寄存器,每个寄存器都可存放数据或地址。寄存器可为所有的数据操作提供快速的局部存储访问;而CISC处理器都是用于特定目的的专用 处理器。

·load-store结构

处理器只能处理寄存器中的数据。独立的load和store指令用来完成数据在寄存器和外部存储器之间的传送。因为访问存储器很耗时,所以把存储器访问和数据处理分开。这样有一个好处,那就是可反复地使用保存在寄存器中的数据,而避免多次访问存储器。相反,在CISC结构中,处理器能够直接处理存储器中的数据。

二.ARM设计思想

为降低功耗,ARM处理器已被特殊设计成较小的核,较高的代码密度。ARM内核不是一个纯粹的RISC体系结构,这是为了使它能够更好的适应其主要应用领域-嵌入式系统。在某种意义上,甚至可以认为ARM内核的成功,正是因为它没有在RISC概念上沉入太深。现在系统的关键并不在于单纯的处理器速度,而在于有效的系统性能和功耗。

面向嵌入式系统的指令集

·一些特定指令的周期数可变

例如:多寄存器装载/存储的load/store指令的执行周期就是不确定的

·内嵌桶形移位器产生了更为复杂的指令

·Thumb 16位指令集

·条件执行

·增强指令

三.高效的C编程

1)C数据类型的有效用法

·对于存放在寄存器中的局部变量,除了8位或16位的算数模运算符外,尽量不要使用char和short类型。而要使用有符号或者无符号的int类型。除法运算时使用无符号数执行速度更快。

·对于存放在主存储器中的数组和全局变量,在满足数据大小的前提下,应尽可能使用小尺寸的数据类型,这样做可以节省存储空间。ARMv4体系结构可以有效的装载和存储所有宽度的数据,并可以使用递增数组的指针来有效的访问数组。对于short类型数组,要避免使用数组基地址的偏移,因为LDRH指令不支持偏移寻址。

·由于隐式或者显式的数据类型转换通常会有额外的指令周期开销,所以在表达式中应尽量避免使用。load和store指令一般不会产生额外的转换开销,因为load和store指令是自动完成数据类型转换的。

·对于函数参数和返回值应尽量避免使用char和short类型。即使参数范围比较小,也应该使用int类型,以防止编译器做不必要的类型转换。

2)高效的编写循环体

·使用减计数到零的循环结构,这样编译器就不需要分配一个寄存器来保存循环中止值,而且与0比较的指令也可以省略。

·使用无符号的循环计数值,循环继续的条件为i!=0而不是i>0,这样可以保证循环开销只有两条指令。、

·如果事先知道循环体至少会执行一次,那么使用do-while循环要比for循环好,这样可以使编译器省去检查循环计数值是否为0的步骤。

·展开重要的循环体可降低循环开销,但不要过度展开,如果循坏的开销对整个程序来说占的比例很小,那么循环展开反而会增加代码量并降低cache性能。

·尽量使数组的大小是4或8的倍数,这样就可以容易地以2,4,8次等多种选择展开循环,而不需要担心剩余数组元素的问题。

3)高效的寄存器分配

·应该尽量限制函数内部循环所用局部变量的数目,最多不超过12个,这样,编译器就可以把这些变量都分配给ARM寄存器。

·可以引导编译器,通过查看是否属于最内层循环变量来确定某个变量的重要性

4)高效的调用函数

·尽量限制函数参数不要超过4个,这样函数调用的效率会更高。也可以将几个相关的参数组织在一个结构体中,用传递结构体指针来代替多个参数。

·把比较小的被调用函数和调用函数放在同一个原文件中,并且要先定义,后调用,编译器就可以优化函数调用或者内联较小的函数。

·对性能影响较大的重要函数可使用关键字_inline进行内联。

5)避免指针别名

·不要依赖编译器来消除包含存储访问的公共子表达式,而应建立一个新的局部变量来保存这个表达式的值,这样可以保证只对这个表达式求职一次。

·避免使用局部变量的地址,否则对这个变量的访问效率会比较低。

6)高效的结构体安排

·结构体元素要按照元素的大小来排列,以最小的元素放在开始,最大的元素安排在最后。

·避免使用很大的结构体,可以使用层次化的小结构体来代替。

·为了提高可移植性,人工对API的结构体添加填充位,这样,结构体的安排将不会依赖于编译器。

关键字:ARM  设计思想  高效C编程 引用地址:ARM设计思想与高效C编程

上一篇:ARM+DSP双核处理器应用程序攻略
下一篇:基于ARM7数字化多功能焊接电源的控制实现

推荐阅读最新更新时间:2024-03-16 13:57

ARM处理器异常处理的返回地址分析
ARM 处理器一共有7 种类型的异常,按优先级从高到低排列如下: Reset Data Abort FIQ IRQ Prefetch Abort SWI Undefined instruction 当任何一个异常发生并得到响应时,ARM内核自动完成以下动作: 1、拷贝CPSR到SPSR_ mode 2、设置适当的CPSR位: 改变处理器状态进入ARM状态; 改变处理器模式进入相应的异常模式; 设置中断禁止位禁止相应中断。 3、更新LR_ mode 4、设置PC到相应的异常向量 当一个异常处理返回时,一共有3 件事情需要处理:通用寄存器的恢复、状态寄存器的恢复以及PC 指针的恢复。 通用寄存器的恢复采用一般的堆栈操作指令,
[单片机]
<font color='red'>ARM</font>处理器异常处理的返回地址分析
基于ARM的智能家居远程控制系统设计
  随着互联网技术和信息通信技术向普通家庭生活的不断普及,如何将消费电子、计算机和通信融为一体,已成为人们非常关心的一个问题。智能家电网络管理系统能够实现家用电器的网络化、智能化管理。通过该系统将家中的网络电器与互联网和GPRS网络相连,这样无论何时何地,用户都可以通过该系统远程操纵家用电器。本文主要讨论智能家居远程控制系统的设计与实现。    智能家居系统的总体结构   智能家居远程控制系统的核心部分是一个嵌入式Web服务器,系统集有线和无线Web服务器于一体,用户可以利用办公室的PC或者手机登录家中的Web服务器,在通过用户名和密码验证后,便可以查看并控制家用电器;系统带有LCD和键盘,具有良好的人机界面;用户还可以通过键
[嵌入式]
ARM汇编外部中断
主要是中断向量表的设置和现场保护。 调试比较久的原因:使用main: b main时调试发现,不能死循环,可能是main标签是保留的 1)在主程序中的步骤一般是: 1.关中断,并设置各主要模式的堆栈指针和容量 2写1清SRCPND,INTPND寄存器 3.配置INTMSK使能相应中断 4.开全局中断 3)中断服务程序中的流程是: 1.屏蔽中断(硬件自动关irq中断) 2.执行任务 3.写1清相应SRPND,INTPND等寄存器(可以利用SRPND=SRPND,INTPND来清零,防止出错) 4.把屏蔽的中断使能回来 5.返回 参考u-boot的start.S自己写了一个外部中断程序,mini2440的按键K1
[单片机]
基于ARM的MP3播放器设计与实现
0 引言 MPEG(Moving Picture Experts Group)是运动图像专家组的英文缩写。MP3是MPEG Audio Layer-3的缩写,即MPEG第3层音频编码标准,使用MP3标准对音频数据编码既可以获得较大的音乐数据压缩比,又可以得到较好的音乐回放质量。国内外现有的MP3解码方案实现有2种方案:硬件和软件解码。利用专用解码芯片的硬件解码,其灵活性不好,并且硬件解码芯片的价格昂贵。基于DSP或ARM等处理器开发平台的软件解码,扩展新能好,性价比高。 ARM(Advanced RISC Machines)既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术。目前,采用ARM技
[单片机]
基于<font color='red'>ARM</font>的MP3播放器<font color='red'>设计</font>与实现
ARM针对台积电40与28纳米制程拓展处理器优化包解决方案
2012年4月18日,中国上海——ARM今日宣布针对台湾积体电路制造股份有限公司(以下简称:台积电)的40与28纳米制程,大幅拓展用于一系列ARM Cortex™ 处理器的全新处理器优化包(POP)解决方案。未来,至少会有9款针对Cortex-A5、Cortex-A7、Cortex-A9与Cortex-A15处理器核心的最新处理器优化包推出。处理器优化包作为ARM全面实现策略中的重要一环,能让ARM的合作伙伴突破功耗、性能与面积优化等限制,迅速完成单核、双核与四核实现。同时,这一解决方案可帮助降低基于Cortex处理器的系统级芯片(SoC)的开发风险并缩短产品上市时间,合作伙伴最快只需六周便可开发出具有竞争力的产品。 在28
[单片机]
ARM之PWM定时器
PWM定时器概述 在Exynos 4412处理器中,共有5个32位的具有脉冲宽度调制(PWM)功能的定时器,这些定时器都可产生内部中断信号给ARM子系统。另外,定时器0、1、2、3具有脉冲宽度调制功能,并可驱动其对应的I/o口。其中,定时器O有可选的死区(dead-zone)产生功能,用以支持大电流设备;定时器4是内置的,没有外部引脚。 PWM定时器的特点: 脉宽调制定时器的特点: 提供静态配置方式,在PWM没有启动时使用; 提供动态配置方式,在PWM运行期间使用; 支持自动重载模式和触发脉冲模式; 两个PWM输出具有死区发生器; 工作原理 简单描述一下上面的图,他的四个定时器都是从时钟总线上获取时钟,之后通过两次分频
[单片机]
<font color='red'>ARM</font>之PWM定时器
ARM总裁:单芯片一半在台生产
    全球行动装置IP领导厂安谋(ARM)于昨(17)日在台湾展开为期2天的2011年安谋年度技术论坛,由于安谋全球市占率持续提升,今年与会人士创下历史新高,而安谋全球总裁多德布朗(Tudor Brown)亦正式宣布将在新竹科学园区成立「安谋新竹设计中心 (ARM Hsinchu Design Center)」,而今(18)日的新竹场次论坛,台积电(2330)研发副总蒋尚义将受邀担任演讲佳宾。      多德布朗指出,安谋今年在全球约出货70亿颗处理器系统单芯片(SoC),有一半由台湾生产,显见台湾扮演先进技术工程的重要枢纽,因此安谋也决定在竹科正式成立安谋新竹设计中心,这将是安谋在全球成立的第11个研发中心。      随着智能
[手机便携]
基于嵌入式ARM Linux步进电机驱动程序的设计
0 引言 随着激光雕刻机的不断发展和改进,嵌入式Linux的激光雕刻机比CNC(Computer numerical control)激光雕刻的优势不断显现,它大幅度提高了处理能力,方便了设计开发,节约了成本,是未来经济型激光雕刻机发展的趋势。而嵌入式ARM(Advanced RISC Machines)Linux步进电机驱动是实现激光雕刻的核心。 嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素较多,实现过程较为复杂。本文以Samsung公司的友善之譬S3C2440开发板为例,探讨如何使用嵌入式Linux开发字符设备驱动程序来驱动步进
[单片机]
基于嵌入式<font color='red'>ARM</font> Linux步进电机驱动程序的<font color='red'>设计</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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