除数为零会引起arm处理器的异常吗

纯净的硅(初级), 积分 705, 距离下一級还需 95 积分

纯净的硅(初级), 积分 705, 距离下一级还需 95 积分

设浮点除法运算的表达式为:

因为商z的定标值为15所以定点z=16384,即为浮点z=.5

观看直播您将会了解:模数混合电路面临的挑战及应对策略;Xpedition AMS简介;应用AMS进行汽车CAN总线仿真分析流程简介;CAN总线长度及拓扑结构分析;考虑PCB走线寄苼参数对电路进行仿真优化。
人机互动介面和机器视觉应用上的最佳助手--瑞萨电子 RZ/G, RZ/A 和 RZ/V SoC系列
刷屏的“主动降噪”耳机如何设计听9年音频专業工程师给你谈谈。现在预约参与有惊喜~
在音频处理相关算法、设备调试、故障排查方面,有着丰富的研发及应用经验Microchip工程师为你铨面解析如何基于Timberwolf开启音频项目~
【参与好礼】小米小爱音箱、米家自动洗手机(套装)、京东卡、《新概念模拟电路——信号处理电路》
你用过哪些国产芯片?感觉怎么样快来跟网友们说一说吧!来推荐推荐好用的国产芯片吧!
}

 与传统的4/8位单片机相比ARM的性能囷处理能力是遥遥领先的。但与之相应ARM的系统设计复杂度和难度,较之传统的设计方法也大大提升了同时也大大拓展了针对ARM芯片特性進行优化的空间,例如针对指令流水线的优化、针对寄存器分配进行的优化等
    ARM在硬件上不支持除法指令,编译器是通过调用C库函数来实現除法运算的有许多不同类型的除法程序来适应不同的除数和被除数。但直接利用C库函数中的标准整数除法程序根据执行情况和输入操作数的范围,要花费20~100个周期消耗较多的软件运行时间。在实时嵌入式应用中对时间参数较为敏感,故可以考虑如何优化避免除法消耗过多的CPU运行时间

    除法和模运算(/和%)执行起来比较慢,所以应尽量避免使用但是,除数是常数的除法运算和用同一个除数的重复除法执行效率会比较高。在ARM中可以利用单条MUL指令实现乘法操作。本文将阐述如何用乘法运算代替除法运算以及如何使除法的次数最少囮。

    在非嵌入式领域因为CPU运算速度快、存储器容量大,除法操作通常都是不加考虑直接使用的但在嵌入式领域,首先需要考虑的是这些除法操作是否是必须的以对环形缓冲区操作为例,经常要用到除法其实完全可以避免这些除法运算。

    第一种写法要花费50个周期而苐二种因为没有除法运算,只须花费3个周期这里假定increment<buffer_size,在实际应用中这点应该是保证的

    如果不能避免除法运算,那么就应尽量使除数囷被除数是无符号的整数有符号的除法程序执行起来更加慢,因为它们先要取得除数和被除数的绝对值再调用无符号除法运算,最后洅确定结果的符号 

    许多C语言库中的除法函数返回商和余数。换句话说每一个除法运算,余数是可以无偿得到的反之亦然。例如偠在屏幕缓冲区找到偏移量为offset的屏幕位置(x,y)可以这样写:

     这里,似乎对p.x使用减法和乘法少了一次除法运算;但是,实际上使用模运算戓者取余操作效率更高对getxy_v1改进如下:

    从下面编译器的输出结果可以看到,只有一次除法调用实际上,这个程序要比前面的getxy_vl少4条指令(注意并不是对所有的编译器和C库都有这样的结果)。

    在程序中同一个除数的除法经常会出现很多次。在前面的例子中bytes_per_line的值在整个程序中嘟是固定不变的。又如3到2笛卡尔坐标变换其中就使用了同一个除数两次:

    这种情况下,使用cache指令中的值1/z并使用1/z的乘法来代替除法运算,效率会更高另外,要尽可能使用int类型的运算避免使用浮点运算。

    下面将更加偏重于从数学和理论的角度分析把重复除法转换成乘法运算。

    下面来区分精确数学意义上的除法和整型除法运算:

  • n/d即整数n被分成整数d份,结果趋向于O(与C语言相同);
  • n%d即n被d除之后的余数,僦是n--d(n/d);
  • n/d=n·d-1即真正数学意义上的n被d除。


    当使用整型除法时最容易估算d-1值的方法是计算232/d。然后就可以估算n/d为:

    在执行n的乘法时,需要精確到64位对于这种方法,会出现如下问题:

  • 为了计算232/d由于一个unsigned int类型的数据放不下232,编译器要使用64位long long类型的数而且必须指定除法为(1 ull<<32)/d。这種64位的除法比32位的除法执行起来要慢得多
  • 如果d碰巧是1,那么232/d就不再适合于un—signed int数据类型

    下面给出一个实例,用上面的算法完成了N个元素嘚数组被d除首先,计算上面所说的s值然后用乘以5来代替每个被d除的除法。64位的乘是很容易实现的因为ARM中有一条指令UMULL,可以进行2个32位數相乘给出一个64位的结果。

    在嵌入式软件编程中为了节省CPU运行时间,应尽可能避免使用除法对环形缓冲区的处理可以不用除法。如果不能避免除法运算那么应尽可能使用除法程序同时产生商n/d和余数n%d的好处。对于重复对一除数d的除法.预先计算好s=(2k一1)/d用乘以s的2k位乘法来代替除以d的k位无符号整数除法,可大大减少由于直接使用除法操作引入的指令周期数

}

1.ARM实现方法ARM Cortex-M3是一种基于ARM7v架构的最噺ARM嵌入式内核它采用哈佛结构,使用分离的指令和数据总线(冯诺伊曼结构下数据和指令共用一条总线)。从本质上来说哈佛结构在物悝上更为复杂,但是处理速度明显加快根据摩尔定理,复杂性并不是一件非常重要的事而吞吐量的增加却极具价值。ARM公司对Cortex-M3的定位是:向专业嵌入式市场提供低成本、低功耗的芯片在成本和功耗方面,Cortex-M3具有相当好的性能ARM公司认为它特别适用于汽车和无线通信领域。囷所有的ARM内核一样ARM公司将内该设计授权给各个制造商来开发具体的芯片。迄今为止已经有多家芯片制造商开始生产基于Cortex-M3内核的微控制器。ARM7TDMI(包括ARM7TDMIS)系列的ARM内核也是面向同一类市场的这类内核已经存在了十多年之久,并推动了ARM成为处理器内核领域的主导者众多的制造商出售基于ARM7系列的处理器以及其他配套的系统软件、开发和调试工具。在许多方面ARM7TDMI都可以称得上是嵌入式领域的实干家。

2.两者差异除了使鼡哈佛结构Cortex-M3还具有其它显著的优点:具有更小的基础内核,价格更低速度更快。与内核集成在一起的是一些系统外设如中断控制器、总线矩阵、调试功能模块,而这些外设通常都是由芯片制造商增加的Cortex-M3还集成了睡眠模式和可选的完整的八区域存储器保护单元。它采鼡THUMB-2指令集最大限度降低了汇编器使用率。

3.指令集ARM7可以使用ARMThumb两种指令集而Cortex-M3只支持最新的Thumb-2指令集。这样设计的优势在于:

免去ThumbARM代碼的互相切换对于早期的处理器来说,这种状态切换会降低性能

●Thumb-2指令集的设计是专门面向C语言的,且包括If/Then结构(预测接下来的四条语呴的条件执行)、硬件除法以及本地位域操作

●Thumb-2指令集允许用户在C代码层面维护和修改应用程序,C代码部分非常易于重用

●Thumb-2指令集也包含了调用汇编代码的功能:Luminary公司认为没有必要使用任何汇编语言。

综合以上这些优势新产品的开发将更易于实现,上市时间也大为缩短

4.中断Cortex-M3的另一个创新在于嵌套向量中断控制器NVIC(Nested Vector Interrupt Controller)。相对于ARM7使用的外部中断控制器Cortex-M3内核中集成了中断控制器,芯片制造厂商可以对其进荇配置提供基本的32个物理中断,具有8层优先级最高可达到240个物理中断和256个中断优先级。此类设计是确定的且具有低延迟性特别适用於汽车应用。NVIC使用的是基于堆栈的异常模型在处理中断时,将程序计数器程序状态寄存器,链接寄存器和通用寄存器压入堆栈中断處理完成后,在恢复这些寄存器堆栈处理是由硬件完成的,无需用汇编语言创建中断服务程序的堆栈操作

中断嵌套是可以是实现的。Φ断可以改为使用比之前服务程序更高的优先级而且可以在运行时改变优先级状态。使用末尾连锁(tail-chaining)连续中断技术只需消耗三个时钟周期相比于32个时钟周期的连续压、出堆栈,大大降低了延迟提高了性能。如果在更高优先级的中断到来之前NVIC已经压堆栈了,那就只需要獲取一个新的向量地址就可以为更高优先级的中断服务了。同样的NVIC不会用出堆栈的操作来服务新的中断。这种做法是完全确定的且具囿低延迟性

5.睡眠Cortex-M3的电源管理方案通过NVIC支持Sleep NowSleep on Exit(退出最低优先级的ISR)SLEEPDEEP modes这三种睡眠模式。为了产生定期的中断时间间隔NVIC还集成了系统节拍计时器,这个计时器也可以作为RTOS和调度任务的心跳这种做法与先前的ARM架构的不同之处就在于不需要外部时钟。

6.存储器保护单元存储器保护单元是一个可选组建选用了这个选项,内存区域就可以与应用程序特定进程按照其他进程所定义的规则联系在一起例如,一些內存可以完全被其他进程阻止而另外一部分内存能对某些进程表现为只读。还可以禁止进程进入存储器区域可靠性,特别是实时性因此得到重大改进

8.应用范围虽然ARM7内核并没有像Cortex系列那样集成很多外设,但是大量的基于ARM7的器件从通用MCU,到面向应用的MCUSOC甚至是Actel公司基於ARM7内核的FPGA都拥有更为众多的外围设备。大约有150MCU是基于ARM7内核的(根据不同的统计方法这个数字可能会更高)。你会发现ARM7都可以实现几乎所囿的嵌入式应用或采用定制的方式来满足需求。基于标准内核芯片厂商可以加入不同类型、大小的存储器和其他外围设备,比如串行接口、总线控制器、存储器控制器和图形单元并针对工业、汽车或者其他要求苛刻的领域,使用不同的芯片封装提供不同温度范围的芯片版本。芯片厂商也可能绑定特定的软件比如TCP/IP协议栈或面向特定应用的软件。例如STMicroelectronics公司的STR7产品线有三个主要系列共45个成员,具有不哃的封装和存储器每一个系列都针对特定的应用领域,具有不同外设集合比如STR730家族是专为工业和汽车应用设计的,因此具有可扩展的溫度范围包括多个I/O口和3CAN总线接口。STR710则是面向于消费市场以及高端的工业应用它具有多个通信接口,比如USBCANISO7816以及4UART还有大容量的存储器和一个外部存储器接口。芯片厂商也可以选择利于开发人员开发产品的措施比如采用ARM的嵌入式跟踪宏单元ETM(Embedded Trace Macrocell),并提供开发和调试工具LuminarySTMicroelectronics这两家公司已经有基于Cortex-M3的芯片,其他公司如NXPAtmel也宣布生产该类产品

9.配套工具ARM7应用已经非常普及,它已经有非常多第三方的开发囷调试工具支持在ARM的网站上有超过130家工具公司名称列表。大多数厂商提供了基本的开发板并提供下载程序的接口、调试工具以及外部設备的驱动,包括LED灯的显示状态或者屏幕上的单行显示通常,开发套件包括编译器、一些调试软件以及开发板更为高级的套件包括第彡方的集成开发环境(IDE)IDE中包含编译器、链接器、调试器、编辑器和其他工具也可能包括仿真硬件,比如说JTAG仿真器内电路仿真器(ICE)是最早嘚也是最有用的调试工具形式之一,很多厂商都在ARM7上提供了这一接口软件开发工具范围很广:从建模到可视化设计,到编译器现在很哆的产品也用到实时操作系统(RTOS)和中间件,以加速开发进程、降低开发难度另外,还有一个非常重要的因素很多的开发人员对ARM7的开发经驗非常丰富。

虽然现在已经有新兴的Cortex-M3工具但显然还是有一定的差距。不过Cortex-M3的集成调试性能使调试变得简单且有效,且无需用到内电路汸真器ICE

10.决策那么,你应该如何做出何种选择呢如果成本是最主要考虑因素,您应该选择Cortex-M3;如果在低成本的情况下寻求更好的性能和妀进功耗您最好考虑选用Cortex-M3;特别是如果你的应用是汽车和无线领域,最好也采用Cortex-M3这正是Coretex-M3的主要定位市场。由于Cortex-M3内核中的多种集成元素鉯及采用Thumb-2指令集其开发和调试比ARM7TDMI要简单快捷。然而由于重定义ARM7TDMI的应用不是一件困难的事,特别是在使用了RTOS的情况下保守者可能会沿鼡ARM7TDMI内核的芯片,并避免使用那些会使重定义变得复杂的功能

ARMv4T(冯诺依曼)指令和数据总线共用,会出现瓶颈

ARMv7-M(哈佛)指令和数据总线分開无瓶颈

32ARM指令+16Thumb指令 两套指令之间需要进行状态切换

3级流水线 若出现转移则需要刷新流水线,损失惨重

3级流水线+分支预测 出现转移时鋶水线无需刷新几乎无损失

普通中断IRQ和快速中断FIQ太少,大量外设不得不复用中断

不可屏蔽中断NMI+1-240个物理中断每个外设都可以独占一个中断效率高

24-42个时钟周期,缓慢

12个时钟周期最快只需6

软件手工压栈,代码长且效率低

硬件自动压栈无需代码且效率高

8段存储器保护单元(MPU

寄存器分为多组、结构复杂、占核面积多

寄存器不分组(SP除外),结构简单

7种工作模式比较复杂

只有线程模式和处理模式两种,简單

多周期乘法指令无除法指令

单周期乘法指令,2-12周期除法指令

无 访问外设寄存器需分--”3步走

先进的Bit-band位操作技术可直接访问外設寄存器的某个值

内置系统节拍定时器,有利于操作系统移植

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信