当前位置:   article > 正文

【7.0】ARM单片机_cortex 什么结构 哈佛

cortex 什么结构 哈佛

嵌入式ARM处理器

ARM 处理器传统的命名是 ARM + 数字的方式:ARM7(冯诺依曼结构)、ARM9-ARM11(开始使用哈佛结构),在 ARM11 以后,ARM 公司使用了新的命名方式:Cortex,对比传统的方式就应该是 ARM12。Cortex 架构目前分为 3 个系列,性能及复杂度由低到高分别是:M、R、A。Cortex-M 系列主要的目标是微控制器市场,就是传统的 MCU、单片机之类,分为Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3、Cortex-M4 等几个档次。Cortex-R 系列主要目标是高端的实时系统,包括基带、汽车、大容量存储、工业和医疗市场等等,分为 Cortex-R4、Cortex-R5、Cortex-R7 几个档次。Cortex-A 系列主要面向通用处理应用市场,可向托管丰富 OS 平台和用户应用程序的设备提供全方位的从超低成本手机、智能手机、移动计算平台、数字电视和机顶盒到企业网络、打印机和服务器解决方案,处理器有:Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A12、Cortex-A15、Cortex-A17、Cortex-53、Cortex-A57 等等。

冯诺依曼结构:程序指令存储器和数据存储器合并在一起的存储器结构。只能顺序执行。也是这个原因限制了计算机的性能和数据处理速度。优点是硬件简单。冯诺依曼架构芯片采用的是复杂指令集(CISC)

哈佛结构:数据和程序分别存放,存储器分为数据存储器和程序存储器。哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令。哈佛架构芯片采用的是精简指令集(RISC),精简指令集相对于复杂指令集的汇编指令会少很多。

总结我用过的:

1、stm32是Cortex-M3核内核ARM v7构架构

2、K60是Cortex-M4核内核ARM v7架构

3、S3C2440是ARM9系列的ARM920T核心

4、ZYNQ7020型号为 XC7Z020-2CLG400I。芯片的PS系统集成了两个 ARM Cortex-A9 处理器。

ARM和DSP

  • ARM 具有比较强的事务管理功能,可以用来跑界面以及应用程序等,其优势主要体现在控制方面,它的速度和数据处理能力一般,但是外围接口比较丰富,标准化和通用性做的很好,而且在功耗等方面做得也比较好,所以适合用在一些消费电子品方面;
  • DSP 主要是用来计算的,比如进行加密解密、调制解调等,优势是强大的数据处理能力和较高的运行速度。由于其在控制算法等方面很擅长,所以适合用在对控制要求比较高的场合,比如军用导航、电机伺服驱动等方面。如果只是着眼于嵌入式应用的话,嵌入式 CPU 和 DSP 的区别应该只在于一个偏重控制一个偏重运算了单片机为了存储器管理的方便(便于支持操作系统),一般采用指令、数据空间统一编码的冯·诺依曼结构。 DSP 为了提高数据吞吐的速度,基本上都是指令、数据空间独立的哈佛结构。

RAM和ROM

RAM

RAM 又被称作“随机存储器”,是与 CPU 直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时 RAM 不能保留数据(掉电数据消失哦)如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。RAM 分为很多种,关于 SRAM、DDR、SDRAM、PSRAM,本文从软件的角度笼统一点,分为片内和片外 ram。对于软件工程师的来说,它们的区别就是访问速度,大体上片内的访问速度是片外 RAM 的 1.5~2 倍。

片内 RAM:用来存放中断处理 handler、RTOS调度器、任务上下文切换、内存分配释放等使用频率最高的代码和中断堆栈这种读写频率极高的内存区,如果有多余的部分也可以放一些经常被引用到的全局变量。

片外 RAM一般就是采购的市面上的成品,如 Samsung,Hynix,Apmemory 等,价格相对便宜,其容量的可选范围也较为宽松,从几M到几G的都有,它可以用来存储全局变量,bss,以及我们常用到的malloc所分配的堆空间等。

ROM

ROM 又被称为“只读存储器”,ROM 所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM 所存数据稳定,断电后所存数据也不会改变。RO 段应该放在 ROM 里,DATA 段放在 RAM 里。对于 DATA、BSS,这些段因为有频繁的写操作,所肯定要放到 RAM 里,但是只读数据(包括代码段)必须放在 ROM 里吗?答案是不一定。

ROM另一种指的就是flash。首先需要说明的是,很多做嵌入式应用开发的同学一直把 flash 比作 PC 上的硬盘,其实它们指的是 Nand flash,它和硬盘有一个显著的区别:flash里存放的代码是可以由CPU直接取指并执行的,而PC上硬盘里的程序都需要加载到内存里才能运行。flash并不是绝对的运行时不可写,有时候应用程序需要保存一些配置信息到flash里,类似于PC程序的配置文件,以保证掉电了之后它的内容不会丢失,下次开机时可以直接从 flash 读取到。

目前 Flash 主要有两种 NOR Flash和NADN Flash。NOR Flash的读取和我们常见的 SDRAM 的读取是一样,用户可以直接运行装载在NOR Flash里面的代码。用户不能直接运行NAND Flash上的代码。 NOR Flash结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM 的优势)首先考虑一下,有没有什么东西必须放在ROM里? 当然有,引导程序(系统的初始化代码)就必须放到 ROM 里。在 CPU 刚上电时,只能去一个默认的地址去取第一条指令,开始干活,这个地址都是映射到片内的 ROM里,原因很简单,此时,作为外设的 flash 和 DDR 等都还没有初始化,CPU 根本无法从它们那里读写数据,片内ROM里的这些代码就需要完成这些模块的初始化。

NAND Flash:前4k地址映射到片上ram。Nand启动时,地址0x00000000为SRAM映射的地址;Nor启动时,地址0x00000000为nor flash的实际起始地址。
NOR Flash  :可以直接读,代码可以运行在上面。向Flash中写数据需要特定的命令时序。而向内存中写数据可以直接向内存地址赋值。所以向0x00000000写数据,Nand启动就可以读到写的数据,而Nor启动就要去读flash,需要时序控制。

那有没有什么东西必须放 RAM 里?当然也有,应用程序经常读写的全局变量,堆、栈等等,都需要放在 RAM 里,根据访问的频率,将频率最高的少量数据放到片内 ram
只读数据(代码段、程序里的 const、字符串等)一般来说,这些数据应该放在 Flash 里,因为它们不需要被修改,而且前面提到过,rom 要比 ram 便宜的多。可能有人会有疑问,放在 flash 里,会不会读取的速度很慢?读 ROM的速度是比读 RAM 的数据要慢一点,但是不要忘了,现代 CPU 都有强大的cache,而且数据 Dcache 和指令 Icache 都是分开的,在系统运行中,cache的命中率可以高达 80~90%,所以大部分时候 CPU 都可以在第一时间就拿到想要的指令和数据。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/1022231
推荐阅读
相关标签
  

闽ICP备14008679号