Arm设计思想与高效C语言编程联系

发布者:colchery最新更新时间:2017-01-05 来源: eefocus关键字: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语言编程联系

上一篇:CPLD被STM32读写VHDL程序
下一篇:ARM与MIPS平台优劣对比分析

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

基于ARM9处理器的家用远程医疗监护终端设计
  远程医疗是网络科技与医疗技术相结合的产物,随着我国经济的发展、科技的进步以及进入老龄化社会的需要,发展远程医疗已成为一种必然趋势。远程医疗从使用对象上可分为:面向医院的远程医疗系统和面向家庭的远程医疗系统。面向家庭的远程医疗系统的功能包括:远程 看医生 、远程监护、远程医学信息查询 /咨询等。   国外的远程家庭医疗更加注重远程 看医生 ,个人/ 患者在家中就可与医生进行实时语音、图像信息交流,可实现在线检测人体生理信号并给出诊断。这种系统是以视频会议系统为核心,但目前还难以在我国普及,原因一是该系统的价格太贵,一般家庭承受不起;原因二是受到通信信道带宽的限制,国外一般使用综合业务数字网(ISDN),而我国现在普及到家庭的是普通
[单片机]
基于<font color='red'>ARM</font>9处理器的家用远程医疗监护终端<font color='red'>设计</font>
如何处理ARM体系下浮点数Middle-Endian问题
  随着嵌入式微处理器芯片性能的日益提高,嵌入式设备也得到了广泛的应用。随着应用的扩展,嵌入式软件开发也呈现出功能多样化、平台多样化、体系结构多样化的特点。   由于可移植性好,相当一部分嵌入式软件都是用C/C++语言开发的,而C/C++语言编写的程序中数据存储字节顺序是与编译平台所用的CPU相关的,所以嵌入式软件移植过程中,数据存储字节顺序是需要重点处理的地方。   在嵌入式GIS软件从x86体系结构下移植到ARM体系结构的过程中,遇到了浮点数据存储字节顺序的问题。该问题既不是Big-Endian,也不是Little-Endian,而是Middle-Endian字节顺序。本文先介绍该嵌入式GIS软件开发平台和运行平台,再
[单片机]
如何处理<font color='red'>ARM</font>体系下浮点数Middle-Endian问题
ARM寄存器的操作方法
#define GPIOCOUT *((volatile unsigned int *)0xc001c000) #define GPIOCOUTENB *((volatile unsigned int *)0xc001c004) #define GPIOCALTFN0 *((volatile unsigned int *)0xc001c020) void delay(unsigned int); void led_test(void) { /*配置选择GPIOC12管脚的功能1*/ GPIOCALTFN0 &= ~(3 24);//清0 bit24 25 GPIOCALTFN0 |= (1 24);//置1
[单片机]
ARM汇编指令ARM寻址方式、汇编指令、伪指令
1、寻址方式 所谓寻址方式就是:处理器根据指令中给出的地址信息来寻找物理地址的方法。 1)立即寻址 立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就是在指令中给出的。 只要取出指令也就是取得了操作数,这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。 例如: △:ADD R0,R0,#1 ;R0 -R0+1 △:ADD R0,R0,#0X3F ;R0 -R0+0X3F 2)寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常使用的一种方式, 也是一种执行效率较高的寻址方式。 例程: ADD R0,R1,R2 ;R0 -R1+
[单片机]
<font color='red'>ARM</font>汇编指令<font color='red'>ARM</font>寻址方式、汇编指令、伪指令
基于ARM的可信计算的实现
引言 随着计算机应用的不断发展,安全威胁问题越来越严重,传统的单纯依靠软件来抵抗安全威胁往往不能解决问题。可信计算的基本思想是从芯片、硬件结构和操作系统等方面制定安全规范保证计算机和网络结构的安全。可信计算平台基于可信平台模块(TPM),以密码算法技术作为基础、安全操作系统作为核心,通过信任域的不断扩展形成安全的平台。 目前市场上的TPM芯片主要应用在PC终端上,但是随着嵌入式系统的不断发展,TPM在嵌入式系统上的应用也越来越广,程序员在编写可信计算应用程序的时候,其切入点应该是TSS,本文就TPM和TSS的概念、TSS在ARM平台上的移植、调用TSS的API编写应用程序以及如何与TPM进行交互做了详细的介绍,最终实现了在嵌入
[单片机]
基于<font color='red'>ARM</font>的可信计算的实现
ARM流水线关键技术分析与代码优化
引 言 流水线技术通 过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。ARM7处理器核使用了典型三级流 水线的冯·诺伊曼结构,ARM9系列则采用了基于五级流水线的哈佛结构。通过增加流水线级数简化了流水线各级的逻辑,进一步提高了处理器的性能。 ARM7的三级流水线在执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器读写操作、ALU操作以及相关器件之间的数据传输。执行单元的工作往 往占用多个时钟周期,从而成为系统性能的瓶颈。ARM9采用了更为高效的五级流水线设计,增加了2个功能部件分别访问存储器并写回结果,且将读寄存器的操 作转移到译码部件上,使流水线各部
[单片机]
<font color='red'>ARM</font>流水线关键技术分析与代码优化
arm linux 从入口到start_kernel 代码分析 - 6
5. 开启mmu 开启mmu是又函数 __enable_mmu 实现的. 在进入 __enable_mmu 的时候, r0中已经存放了控制寄存器c1的一些配置(在上一步中进行的设置), 但是并没有真正的打开mmu, 在 __enable_mmu 中,我们将打开mmu. 此时,一些特定寄存器的值如下所示: r0 = c1 parameters (用来配置控制寄存器的参数) r4 = pgtbl (page table 的物理基地址) r8 = machine info (stru
[单片机]
基于Proteus和ADS的ARM虚拟实验室建设
引 言 ARM技术是一门实践性很强的技术,其实验是电子类教学中十分重要的实践教学环节,是培养学生实验技能、创新思维的重要课程。掌握ARM技术已是电子类学生就业的一个基本条件。 目前各个高校相继开设了ARM课程,并逐步开始建立ARM实验室。这些实验室基本都是采用相应的硬件仿真设备来构建的,但由于ARM的种类繁多再加上资金的限制,不可能在一个实验室包括所有种类的ARM仿真设备。虚拟实验作为传统实验的重要补充,克服了诸多条件的限制,丰富了实践性教学的手段,有利于现代实验教学观念的更新。 1 ARM实验教学存在的问题 目前,ARM教学中存在如下问题: ①ARM课堂教学多以理论教学为主,教学中需要很多硬件设
[单片机]
基于Proteus和ADS的<font color='red'>ARM</font>虚拟实验室建设
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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