让单片机运行速度更快一些

上传人:豆浆 文档编号:36846897 上传时间:2018-04-03 格式:PDF 页数:3 大小:80.75KB
返回 下载 相关 举报
让单片机运行速度更快一些_第1页
第1页 / 共3页
让单片机运行速度更快一些_第2页
第2页 / 共3页
让单片机运行速度更快一些_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《让单片机运行速度更快一些》由会员分享,可在线阅读,更多相关《让单片机运行速度更快一些(3页珍藏版)》请在金锄头文库上搜索。

1、602 0 0 4 . 8经验交流EXPERIENCE EXCHANGE让单片机运行速度更快一些 清 华 大 学 林 彬 北京邮电大学 石玉泽1 问题的提出1 . 1 硬件技术背景单片机的频率越来越高,RAM的访问速度也来也快,但单片机系统的效率并不一定成比例的提高。目前,使用的主流单片机有 8 0 3 8 6 E X ( 5 0 M H z ,外部地址 / 数据总线 1 6位) 、M P C 8 6 0 T ( 6 6 M H z ,外部地址/ 数据总线 3 2位) 以及 D S 8 0 C 3 2 ( 2 5 M H z ,外部地址/ 数据总线8位) ;使用的S D R A M有H Y 5

2、 7系列、K 4 1 6系列( 访问速度 1 0 0 M H z 或 1 3 3 M H z ) ;使用的S R A M 如I D T 7 1 0 2 4 、I D T 7 2 5 6( 5 0 M H z ) ;使用的F l a s h 有A T 2 9 C 5 1 2 、S S T 3 9 V F 0 4 0 、A T 2 9 C 0 1 0 ( 8 M H z 或1 5 M H z ) 等。可见,S D R A M ,S R A M 的速度和单片机是匹配的,甚至比单片机的速度更快一点,不需要单片机插入等待状态。而F l a s h的访问频率则比单片机慢 2 6倍,单片机往往要通过插入多个

3、等待状态来和它相匹配,况且F l a s h多为8位,而当前单片机多为 1 6 ,3 2位,更多的降低了单片机的工作性能。根据上述分析,如果提高F l a s h的访问速度,扩展F l a s h为1 6位或 3 2 位,那么程序执行的速度就快了,单片机的性能也就提高了。如果能够将这一想法变成事实,而且成本低廉的话,那是最好不过的事情。事实上,可以将 8 位的 F l a s h 扩展为1 6位、甚至3 2位,但要付出2 4 倍的成本。由于F l a s h 结构及工艺原因,在目前不可能有高达 6 6 M H z的商用化且价格低廉的F l a s h 。所以,只能通过其它方式来提升单片机的运行

4、速度。1 . 2 软件技术背景首先,看看传统单片机程序的运行原理,为了便于说明,假定硬件平台为8 6 0 T ,时钟为5 0 M H z ;S D R A M空间 4 M 3 2 b i t ,地址范围从0 x 0 0 0 0 0 0 0 0 0 x 0 0 F F F F F F ,访问时间 1 0 n s ;F l a s h 空间5 1 2 K 8 b i t ,访问时间为1 0 0 n s ,地址范围从 0 x 0 2 8 0 0 0 0 0 0 x 0 2 8 7 F F F F ( 至于其它单片机,运行原理大致相同,可以类推) 。8 6 0 T 在上电后,P C ( P r o g

5、 r a mC o u n t e r ) = 0 x 2 8 0 0 1 0 0 ,程序从P C 指定的地方执行,首先执行初始化代码( B o o t C o d e ) ,再执行主程序( A p p C o d e ) 。程序从 F l a s h 中读取指令( c o d e ) ,来完成数据的传输 可能是 S D R A M和内部寄存器的传输,S D R A M之间的传输,SDRAM和外设的传输,中断处理等各项工作。可见在程序运行时,很大一部分时间是从F l a s h中读取指令,而这个过程是很费时间的。以假定的 8 6 0 T硬件平台为例,因为F l a s h 访问时间为1 0 0

6、 n s ,所以读一条指令的时间至少是 1 0 0 n s ,也就是说 8 6 0 T 读一条指令的时候要等待1 0 0 n s 。 ( 指令c a c h e 通过预取指令的方式,可以使实际取指令时间短一些,但这种方法的效果并不明显,况且很多单片机还没有指令c a c h e 。 )8 6 0 T平台的内存分配如图1所示。2 将代码从F l a s h 搬运到S D R A M 中的原理通过上述分析,初始化代码B o o t C o d e只在程序启动的时候执行,就是慢一点,也可以接受。真正影响性能的是主程序( A p p C o d e ) ,因为这里的代码在不停的重复执行,如果可以缩短它

7、的取指令时间,则单片机的空闲时间将大大减少,性能也就提高了很多。SDRAM的速度比较快,如果将代码搬运到 SDRAM中,取指令时间就减少了很多;而且 S D R A M空间大,不会因为代码占用了一部分空间而影响性能。但这不仅仅是简单的搬运过程,有物理存储器地址的变化牵涉在这个过程中。将软件源代码转换成可执行的二进制映像包括三个步骤:首先,每一个源文件都必须被编译或汇编到一个目标文件( o b j e c t f i l e ) ;第二步,所有的目标文件要连接成一个目标文件, 它叫可重定位程序( r e l o c a t i o n p r o g r a m ) ;最后,在一个称为重定址(

8、r e l o c a t i o n ) 的过程中,要把物理存储器地址指定给可重定位程序里的每个相对偏移处,生成一个可执行的二进制映像文件。如果在F l a s h中运行,则所有的物理存储器地址应该在F l a s h的地址空间中。如0x028000000x0287FFFF(Flash, 存放代码, 含BootCode和AppCode) 空空0x000000000x00FFFFFF(SDRAM, 存放数据)图1 传统单片机的内存分配模式61Microcontrollers C o d e L e n w h i l e ( C o d e L e n ! = 0 )该段代码是将开始地址为 F

9、 l a s h C o d e _ A d d ,长度为C o d e L e n 的F l a s h 代码搬运到开始地址为 R a m C o d e _ A d d ,长度为C o d e L e n的S D R A M 中。( 2 ) 主函数及跳转模块# d e f i n e F l a s h C o d e _ A d d _ V 0 x 0 2 8 1 0 0 0 0# d e f i n e R a m C o d e _ A d d _ V 0 x 0 0 f 0 0 0 0 0# d e f i n e C o d e L e n _ V 0 x 0 0 0 7 0 0

10、 0 0 / 4v o i d m a i n ( ) U W O R D * I = ( U W O R D * ) F l a s h C o d e _ A d d _ v ;0x00F000000x00F6FFFF 放置应用代码 ( RAMapp.bin)0x000000000x00EFFFFF 放 置数据( data)0x028100000x0287FFFF 放置应用代码 ( RAMapp.bin) 0x028000000x0280FFFF 放置初始化及搬运代码 (RAMapp.bin) SDRAM地址映射表Flash地址映射表图2 地址映射表860T上电复位, 执行初始化代码( 在

11、RomTool.bin中运行)运行代码搬运函数, 将RAMapp.bin搬运到SDRAM中改变PC的值, 无条件转移到SDRAM中运行图3 从F l a s h 到S D R A M 搬运代码的过程622 0 0 4 . 8经验交流EXPERIENCE EXCHANGET M S 3 2 0 F 2 4 x 的混合编程方法 哈尔滨理工大学 纪铁军 柳长源 赵爱明T M S 3 2 0 F 2 4 x系列D S P软件设计通常有三种方法。第一,用C语言开发。T I公司提供了用于 C语言开发的 C C S ( C o d e C o m p o s e r S t u d i o ) 平台。该平台

12、包括了优化 A N S I C编译器,从而可以在 C源程序级进行开发调试。这种方式大大提高了软件的开发速度和可读性,方便软件的修改和移植。但是在某些情况下,C代码的效率还是无法与手工编写的汇编代码的效率相比;并且C C S 中的C编译器只提供 I E E E 3 2 位浮点数和3 2位长整数,在某些应用中精度不够,需要扩展精度,这时 C语言就无能为力了。此外,用 C语言实现 D S P芯片的某些硬件控制也不如汇编程序方便,有些甚至无法用 C语言实现。第二,全用汇编语言开发。T I公司提供了用于汇编语言开发的针对T M S 3 2 0 F 2 4 x的汇编语言,用户可以用它进行软件开发。此种方法

13、可以更为合理地利用芯片提供的硬件资源,其代码效率高,程序执行速度快。但是用汇编语言编写程序比较繁杂,由于芯片的升级换代或类型不同,其汇编语言也不同。因此,用汇编语言开发基于某些芯片的产品周期较长,并且软件的可维护性和升级较困难。第三,C和汇编语言混合编程开发。为了充分利用D S P芯片的资源,更好发挥 C语言和汇编语言进行软件开发的各自优点,可以将两者有机结合起来,兼顾两者的优点,避免其弊端。因此在很多情况下,采用混合编程的方法能更好地达到设计要求, 完成设计任务。 但是,采用 C和汇编语言混合编程必须遵循一些有关的规则,否则会遇到一些意想不到的问题。T M S 3 2 0 F 2 4 x 系

14、列D S P的C 语言和汇编语言混合编程有以下几种方法。 独立编写汇编程序和C程序,分开编译或汇编形成各自的目标代码模块,用链接器将 C模块和汇编模块链接起来,这是一种灵活性较大的方法。但用户必须自己维护各汇编模块的入口和出口代码,自己计算传递参数在堆栈中的偏移量,工作量较大,但能做到对程序的完全控制。 在 C程序中使用汇编程序中定义的变量和常量。 在C程序中直接内嵌汇编语句。此种方法可以在C程序中实现 C语言无法实现的一些硬件控制功能,如U W O R D * j = ( U W O R D * ) R a m C o d e _ A d d _ v ;U W O R D * k = ( U

15、 W O R D * ) C o d e L e n _ V ;M o v e C o d e F _ t o _ R A M ( ( U W O R D * ) i , ( U W O R D * ) j , ( U W O R D* ) k ) ;# 跳转模块a s m (“a d d i s r 2 , 0 , 0 x 0 0 f 0 ” ) ;a s m (“o r ir 2 , r 2 , 0 x 0 0 0 0 ” ) ;# 代码起始地址0 x 0 0 f 0 0 0 0 0a s m (“m t s p r L R , r 2 ” ) ;a s m (“b c l r2 0 ,

16、0 ” ) ;# 无条件转跳到链接寄存器# ( L R ) 中的地址F l a s h C o d e _ A d d _ V :被搬运代码的首地址,在F l a s h 中。R a m C o d e _ A d d _ V :被搬运代码的目标地址,在R A M 中。C o d e L e n _ V :被搬运代码的长度,按3 2位计算。该函数在调用代码搬运 M o v e C o d e F _ t o _ R A M函数,将代码从 F l a s h搬运到S D R A M中后,将程序指针转移到S D R A M中。注意跳转的地址一定要和R a m C o d e _ A d d _ V一致。4 小 结可见, 正确完成代码搬运的关键在于: 确定被搬运代码的物理地址映射规则, 物理地址一定是在 S D R A M中; 被搬运代码是被烧结在 F l a s h中,后来又被搬运到 S D R

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号