96KB存储器的怎么算地址范围_【ARM】Cortex-M3 存储器系统

0f4eedec0c932d7cb6017c2a52976ff3.png

存储器(Memory)作为计算机系统的重要组成部分,可分为RAM,ROM。可以是片内,也可在片外。一般来说,片内容量小,速度较快一些,片外的容量大,速度较慢一些。

片内/片外 是针对于MCU而言,而不同芯片厂家的MCU芯片,都可以采用同样的内核,比如说CM3。

CM3提供了预先定义好的存储器地址映射表,极大的方便了软件在各种基于CM3的MCU间的移植。

1 存储系统功能概览

CM3 的存储器系统与从传统 ARM 架构的相比,已经脱胎换骨了:

第一, 它的存储器映射是预定义的, 并且还规定好了哪个位置使用哪条总线。

第二, CM3 的存储器系统支持所谓的“位带”( bit‐band)操作。

第三, CM3 的存储器系统支持非对齐访问和互斥访问。 这两个特性是直到了 v7M 时才

出来的。

最后, CM3 的存储器系统支持小端配置和大端配置。

2 存储器映射

主要分为6大区域:

1 code区,存放指令,只读不可改,一般是flash

2 sram区,存放数据,片内静态ram,由芯片厂商决定使用多大的内存,可读可写

3 peripheral区,外设寄存器地址,由芯片厂商布局各式各样的外部设备

4 external ram区,片外扩展ram,当片内资源不够时,可进行扩展

5 external device区,片外扩展设备

6 private bus区,CM3内核的系统级组件,以及私有总线

1f28abe9cd50ed2b46e9bb86f8a2737d.png

3 位带操作

位带操作,在于通过访问字的方式来访问单个比特位,达到提高访问效率以及原子操作的目的,同时具有消耗了多余内存的缺点。

扩展成字的区域 称之为 位带别名区(bit-band alias)。

支持单个比特位扩展成字的区域 称之为 位带区(bit-band)。

支持位带操作的两个内存区的范围是:

0x2000_0000‐0x200F_FFFF( SRAM 区中的最低 1MB)

0x4000_0000‐0x400F_FFFF(片上外设区中的最低 1MB)

扩展的对应关系:(n为位序号(0<= n <= 7))

AliasAddr = 0x22000000+((A‐0x20000000)*8+n)*4 =0x22000000+ (A‐0x20000000)*32 + n*4;

’*8‘ 表示一个地址中存放了一个字节,一个字节中包含8位

’*4‘ 表示一个位扩展为32位的字,这样的一个字包含4个字节

为什么能够提高效率?

传统的写操作--读,改,写。包含这三步骤

位带的写操作--读,写。

dc440d610d8cdae078ce0dd99f1101ae.png

传统的读操作--读,移位,提取。包含这三步骤

位带的读操作--总线单次读。

49282667ab969037feb0d983b0f89571.png

从以上汇编代码可以看出,通过操作位带别名区来操作位带区中的单个比特位,汇编指令较少,CPU执行效率较高。

在 C 语言中使用位带操作:

不幸的是,在 C 编译器中并没有直接支持位带操作。比如, C 编译器并不知道同一块内存能够使用不同的地址来访问,也不知道对位带别名区的访问只对 LSB 有效(最低位有效,因为最终作用到的是位带区的单个比特位,所以高位是无效的)。欲在 C 中使用位带操作,最简单的做法就是#define 一个位带别名区的地址。例如:

#define DEVICE_REG0 ((volatile unsigned long *) (0x40000000))

这里注意的是关键字 volatile

volatile 本意是指”易变的“,目的在于告诉编译器:”这个变量(内存区域)是容易改变的,不要进行编译优化(存放在寄存器中,或者cache中,来提高执行效率)“。因为一旦优化了,CPU每次对这块区域的访问不再是如实的读写内存,而是与寄存器(或cache)进行数据交互,最后才把结果写回内存,这样的话,若其他地方对该内存进行的修改,将不能被及时知晓,从而导致数据丢失或出错。

4 非对齐访问

在ARMv6之前,是不支持非对齐访问的,一旦非对齐访问,将引发异常。

在CM3(ARMv7-M)中,支持非对齐访问,但是,非对齐的数据传送只发生在常规的数据传送指令中,如 LDR/LDRH/LDRSH/STR。

其它指令则不支持,包括:

1 多个数据的加载/存储(LDM/STM)

2 堆栈操作 PUSH/POP。堆栈指针SP(R13)的最低两位默认为0,也就是表示了四字节对齐

3 互斥访问(LDREX/STREX)。如果非对齐会导致 fault

4 位带操作。因为只有 LSB 有效,非对齐的访问会导致不可预料的结果。

关于内存对齐的细节,可以参考:内存对齐 到底怎么回事?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《ARM Cortex-M3与Cortex-M4权威指南(第三版)》是一本深入浅出介绍ARM Cortex-M3与Cortex-M4处理器原理的权威指南。本书作者 Joseph Yiu 博士具有丰富的ARM处理器软硬件开发经验和教学经验,能够从理论和实践两个方面详细讲解这两种处理器的特点和优势。 本书对Cortex-M3与Cortex-M4处理器内部结构、寄存器、中断处理机制、存储器系统、指令系统等方面进行了详细的解释和分析,并提供了丰富的实例和代码来帮助读者更好的理解和掌握这些知识。此外,本书还专门介绍了M3和M4在不同应用场合下的特点和优势,读者可以根据自己的需求选择合适的处理器。 总之,《ARM Cortex-M3与Cortex-M4权威指南(第三版)》是一本非常有价值的ARM处理器开发技术书籍,既适合初学者深入学习,也适合从事ARM处理器软硬件设计的工程师作为参考书籍。 ### 回答2: 《Arm Cortex-M3与Cortex-M4权威指南(第三版)PDF》是一本极具权威性的指南,介绍了两个极为流行的嵌入式处理器平台Cortex-M3和Cortex-M4。该书由Joseph Yiu所著,总共分为三部分,共31章,涵盖了Cortex-M3和Cortex-M4的体系结构、编程模型、内存映射和预测性代码执行等方面的知识。 该书从掌握机器指令、中断处理和嵌入式系统的基本原理开始,系统地介绍了Cortex-M3和Cortex-M4的体系结构和编程模型。它对ARM处理器的内部机制、中断处理和系统级编程进行了详细的阐述;对器件的外部接口和预测性代码执行等也作出了深入的讲解。此外,该书还介绍了Cortex-M3和Cortex-M4的调试工具和开发环境。 最后,该书通过一组实际的引导程序和案例,展示了基于Cortex-M3和Cortex-M4的具体设计方案。这对于嵌入式开发人员来说,是一本不可多得的指南。 综上所述,《Arm Cortex-M3与Cortex-M4权威指南(第三版)PDF》是一本全面介绍Cortex-M3和Cortex-M4处理器的权威指南,它的内容深入浅出,适合各级别的读者阅读。无论是初学者还是有经验的开发人员,都可以从中获得实际的指导和借鉴。它是嵌入式处理器的必读之书。 ### 回答3: 《ARM Cortex-M3与Cortex-M4权威指南(第三版)PDF》是一本关于ARM Cortex-M3和Cortex-M4处理器的权威指南,对于计机科学、嵌入式系统、电子工程等领域的学者和工程师都具有非常重要的参考价值。 本书主要介绍了ARM Cortex-M3和Cortex-M4处理器的体系结构、指令集、内存、异常处理、能效与低功耗、外设以及调试和优化等方面的内容。通过阅读本指南,用户可以深入了解这两种处理器的基本工作原理,具体的编程方法和调试技巧。 另外,本书还介绍了一些实用的嵌入式系统设计技巧和开发工具,包括CMSIS组件库、IDE、仿真器、调试器等,这些工具可以帮助用户更加快速、高效地进行嵌入式系统开发和调试。 总之,ARM Cortex-M3与Cortex-M4权威指南(第三版)PDF是一本非常实用的嵌入式系统开发指南,对于想要深入了解ARM Cortex-M3和Cortex-M4处理器的学者和工程师都是非常有价值的参考读物。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值