单片机入门到精通

上传人:ji****72 文档编号:45612042 上传时间:2018-06-17 格式:PDF 页数:42 大小:408.42KB
返回 下载 相关 举报
单片机入门到精通_第1页
第1页 / 共42页
单片机入门到精通_第2页
第2页 / 共42页
单片机入门到精通_第3页
第3页 / 共42页
单片机入门到精通_第4页
第4页 / 共42页
单片机入门到精通_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《单片机入门到精通》由会员分享,可在线阅读,更多相关《单片机入门到精通(42页珍藏版)》请在金锄头文库上搜索。

1、删繁就简-单片机入门到精通 MCU EDU 第 92 页 作者:Dai ShangJu 第三章 单片机高级特性 第三章 单片机高级特性 时至今日,单片机的技术已经发展到前所未有的地步,PC 流行大旗刚刚树起的九十年代,主频终于突破 100MHz,简称 586 的奔腾一代开始用软解压向人们结结巴巴的演示多媒体的未来,就是INTEL 自己也为这一进步激动不已,从此电视广告中“Beng Beng Beng Beng”的旋律成为INTEL 的象征。 让我们来看看当时让INTEL 如此激动的奔腾电脑的摸样: 1996 年 100M 主频 Intel Pentuim CPU 16M 内存 1M 显存显卡

2、850M 硬盘 14 寸彩显 大概需要800010000 人民币 再来看一看现在iPhone 使用的三星 64xx 的MCU(以某开发板为例) : Samsung S3C6410,ARM1176JZF-S 内核,主频533MHz/667MHz 128M Bytes DDR RAM 256M Bytes NAND Flash 2M Bytes NOR FLASH 100Mbps 以太网接口 USB HOST 接口 USB Device 接口 AC97 接口 双高速SD 卡接口 双LCD 接口 VGA 接口 TV OUT 接口 S-VIDEO 接口 双摄像头接口 2D/3D 硬件加速 带800*4

3、80 的低成本液晶屏开发板成本大约为300400 人民币 删繁就简-单片机入门到精通 MCU EDU 第 93 页 作者:Dai ShangJu 只要简单对比就可以知道今天的高端单片机在性能方面已经远超当年的奔腾电脑,单片机要发展到这一步肯定不能拘泥在早期单片机技术的框架当中,需要不断引入一系列新技术,这些技术有可能是早期电脑才能采用“昂贵”技术,随着技术的不断进步才逐渐平民化为单片机所用,这一章让我们来一起了解单片机的这些高级技术。 本章的内容如果你看不明白并不要紧,你糊里糊涂的看就行了,知道有这么回事,等到有一天你面对这些技术时突然有恍然大悟的感觉时再回来与你的理想做对比。有告诉你一个秘密

4、,这一章中的内容其实我自己也不大明白,就是许多专家也不完全明白。 3.1.3.1. Cache Cache 首先得清楚什么Cache,Cache 是英文中对高速缓存系统的称谓,Cache 的概念在硬件和软件中都存在。这里我借鉴别人的一个例子来解释Cache 的作用:软件高速缓存的作用产生于人们使用数据不平均时,我们虽然常常拥有大量数据,但最经常使用的往往只有其中一小部分。如国标汉字不到7000 个,但经常使用的只有 20003000 个,其中几百个又占了50%以上的使用频率,如果将这几百个放到存取最快的地方,就可以用很小的代价大大提高工作速度。我们知道内存的存取速度比硬盘快得多,程序一起启动我

5、们就将常用几百个字模装入内存指定区域,当使用这部分字的时候直接从内存取字,其余的才会去读硬盘。我们知道内存的读取速度为硬盘的数万倍,假设我们有一本书需要显示,预装几百个字模到内存指定区域的方法差不多将平均读取速度提高一倍,如果将预装的字模数增加到常用20003000 个,读取速度甚至可以提高十倍。 这里我们要说的Cache 是指一种用来加速存储器读写操作的硬件存储器,象买电脑时常说的一级高速缓存/二级高速缓存就是 CPU 内部的这种硬件存储器,和软件高速缓存比虽然是两种不同的方式,但其作用是一样的,都是为了提高读写速度。 可能有人会有这样的疑问,明明 RAM 已经是一种存取速度非常快的硬件,为

6、什么还需要Cache呢,是的现在的RAM 可以提供超过100M 的读写速率,但这个速度同CPU 的处理速度相比并不存在优势,甚至远小于 CPU 的处理速度,象S3C6410 工作在667MHz 主频下,就是一条需要4 个周期的指令执行也只需要6ns,而RAM 的读写时间需要 10ns,显然RAM 的速度无法满足CPU 的高速处理要求。 如何解决CPU 与RAM 之间的这种速度差异问题?通常有下列方法: 一、在基本总线周期中插入等待,当CPU 需要读写RAM 数据的时候,先向RAM 发送读写命令,再等待RAM 处理好总线数据完成一些读写操作,这样做显然会浪费CPU 的能力,就象我们设计了速度都可

7、以达到 120 公里/小时的汽车和高速公路,可高速公路每隔十公里就设置一个收费站,这样再好的汽车也无法跑出快的速度来。 二、采用存取时间较快的 SRAM 或其它新型存储器材作存储器,这样虽然解决了 CPU 与存储器间速度不匹配的问题,但却大幅提升了系统成本。另外还有一个问题,大容量RAM 作为外部器件,需要通过外部连线将其与CPU 连接起来,这些外部连线因为分布电容等问题使得RAM 与CPU 之间的删繁就简-单片机入门到精通 MCU EDU 第 94 页 作者:Dai ShangJu 最高传输速率有限制,如果对PCB 布板要求过高不利于生产推广,这个问题同样可以用高速公路的例子来理解,汽车的速

8、度可以继续提高,收费站也可以撤掉,但实际生活中高速公路不可能设计成笔直宽阔的大道,所以还是不能满足汽车速度的需求。 三、在慢速的RAM 和快速CPU 之间插入一速度较快、容量较小的SRAM,起到缓冲作用,使CPU既可以以较快速度存取RAM 中的数据,又不使系统成本上升过高,这就是Cache 法。目前,一般采用这种方法,它是在不大增加成本的前提下,使CPU 性能提升的一个非常有效的技术。 当然Cache 的实现并不是简单的插入一块小容量高速存储器那么简单,是基于程序统计规律通过一系列复杂控制技术才得以实现,而且它并不是万能的,同样存在缺陷,后面我们会详细讲述这些细节。 先看一下ARM 关于存储器

9、的结构图。 图3.1.-1 ARM 存储器示意图 图3.1.-1 ARM 存储器示意图 TCM(摘自ARM 论坛) : TCM(摘自ARM 论坛) : TCM 是一个固定大小的RAM, 紧密地耦合至处理器内核, 提供与cache 相当的性能, 相比于cache的优点是,程序代码可以精确地控制什么函数或代码放在那儿(RAM 里)。当然TCM 永远不会被踢出主存储器,因此,他会有一个被用户预设的性能,而不是象cache 那样是统计特性的性能提高。 TCM 对于以下几种情况的代码是非常有用、也是需要的:可预见的实时处理(中断处理) 、时间可预见(加密算法) 、避免 cache 分析(加密算法) 、或

10、者只是要求高性能的代码(编解码功能) 。随着 cache 大小的增加以及总线性能的规模,TCM 将会变得越来越不重要,但是他提供了一个让你权衡的机会。 那么,哪一个更好呢?他取决于你的应用。Cache 是一个通用目的的加速器,他会加速你的所删繁就简-单片机入门到精通 MCU EDU 第 95 页 作者:Dai ShangJu 有代码, 而不依赖于存储方式。 TCM 只会加速你有意放入TCM 的代码, 其余的其他代码只能通过cache加速。Cache 是一个通用目的解决方案,TCM 在某些特殊情况下是非常有用的。假如你不认为需要TCM 的话,那么你可能就不需要了,转而加大你的cache,从而加速

11、运行于内核上的所有软件代码。 可以看出Cache 位于芯片内部,通过内部总线与CPU 相连,图中自上而下的存储器离处理器越远读写速度就越慢, Cache 本质也是 SRAM, 只是对其增加了一些特殊的读写控制方法。 同样是SRAM,片外的SRAM 速度比片内要慢,这就是外部总线的影响。Cache 是不能独立当作存储器使用的,对于程序员来说,它并没有特定的地址可以进行访问,只是处理器提供了一些控制指令可以让程序员对Cache 进行控制方法的设定,所以为了针对某些特殊应用芯片厂商会在芯片内部另外会放置一小段SRAM,这段SRAM 对于程序员来说就有特定的地址与之对应,程序可以当作普通RAM 进行读

12、写。 Cache 的工作原理 Cache 的工作原理 通常程序代码都是连续的,代码执行时都是一条接一条的连续执行,程序中跳转操作所占的比例并不高,即便是跳转指令,大多数时候跳转的距离都不会太远,加上指令地址的分布本来就是连续的,另外象程序中的循环体要重复执行多次,这样在一个较短的时间间隔内,由程序产生的地址往往集中在存储器地址空间的很小范围之内,因此对这些地址的访问就自然地具有时间上集中分布的倾向,对大量典型程序运行情况的统计分析结果也验证了这一点。 数据分布的这种集中倾向没有程序代码明显,程序中的数据读写操作虽然大多数时候也是处在相邻区域,但间距大过程序代码几率要高,不过数组的存储和访问还是

13、会让存储器地址相对集中。 UINT32 i; UINT32 data_buf11024; UINT32 data_buf21024; for(i=0;i #pragma vector isr_4 0x4 #pragma vector isr_8 0x8 #pragma vector isr_c 0xc /中断服务函数定义,如果需要中断在对应函数内添加相应代码 void isr_4() /external ISR void isr_8() /timer/event0 void isr_c() /ADC convert /- /安全初始化,可以去掉此函数自己初始化系统 /- void safegu

14、ard_init() _wdts = 0x00; _intc0 = 0x00; 删繁就简-单片机入门到精通 MCU EDU 第 123 页 作者:Dai ShangJu _tmr0c = 0x00; _tmr1c = 0x00; _ctrl0 = 0x00; _adcr = 0x00; /- /主程序 /- void main() safeguard_init(); while(1) /添加用户代码 有了这样的例子工程师就可以在此基础上编写自己的代码,即便改变芯片型号只要是同公司同一系列的芯片,也都很容易用照葫芦画瓢的方式建立自己的新项目工程。 嵌入式系统实际上就是起类似样例框架代码作用,是一

15、些专业公司针对某些硬件平台设计出基本程序框架,框架本身不包含实际的具体的功能实现,但要求尽可能的支持硬件平台的所有功能,也就是说其它工程师在此框架基础之上通过接口驱动函数可以使用硬件平台的所有功能。既然嵌入式系统由专业公司提供,所提供的功能自然相当强大,除了支持硬件所具备的各项特性外,还在软件方面做出了许多功能扩展,比如多任务控制管理等。 嵌入式系统要做到支持全部硬件功能,势必需要一定数量的代码方可实现,对于任意一个实际产品可能只是用到硬件平台的部分功能,这样会造成程序空间的浪费,所以嵌入式系统除了功能支持外还需要支持功能的可选择,对于不需要的功能,可以通过规定的方法从系统中将相应代码移除掉,这就是嵌入式系统的可裁剪性。象UC/OS 裁剪出最小内核只需要2kBytes 的空间,而如果加上对硬件平台的功能支持、TCP/IP 等通讯协议的实现则需要几百 kBytes,如果是自己设计一个最简支持多任务控制的操作系统模型,一两百kBytes 都可以实现。 提示提示:可以将嵌入式系统理解为带操作系统的单片机产品 嵌入式操作系统大都支持多任务,所以将嵌入式的操作系统称为多任务操作系统也是可以的。删繁就简-单片机入门到精通 MCU EDU 第 124 页 作者:Dai ShangJu 如

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

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

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