历史上的今天
返回首页

历史上的今天

今天是:2025年03月24日(星期一)

正在发生

2021年03月24日 | 【ARM】Cortex-M3 存储器系统

2021-03-24 来源:eefocus

存储器(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内核的系统级组件,以及私有总线


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个字节


为什么能够提高效率?

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

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


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

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

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


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

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


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

#define DEVICE_REG0_BIT0 ((volatile unsigned long *) (0x42000000))

#define DEVICE_REG0_BIT1 ((volatile unsigned long *) (0x42000004))


*DEVICE_REG0 = 0xAB; 


*DEVICE_REG0 = *DEVICE_REG0| 0x2; //使用传统方法设置 bit1


*DEVICE_REG0_BIT1 = 0x1; // 通过位带别名地址设置 bit1


这里注意的是关键字 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 有效,非对齐的访问会导致不可预料的结果。

推荐阅读

史海拾趣

Big-Sun Electronics Co Ltd公司的发展小趣事

随着国内市场的逐步饱和,Big-Sun Electronics Co Ltd公司开始将目光投向国际市场。公司积极参与国际电子展会,与海外客户建立起了良好的合作关系。同时,Big-Sun还与国际知名电子企业开展技术合作,共同研发新产品,进一步提升了公司的国际竞争力。

Eurotech公司的发展小趣事

Eurofarad公司自创立之初,就专注于电容器技术的研发。在当时,电容器市场已经相当成熟,但Eurofarad公司凭借对材料科学的深入研究,成功开发出一种新型的高性能电容器。这种电容器不仅具有更高的能量密度,而且寿命更长,稳定性更好。这一技术突破为Eurofarad公司赢得了市场的初步认可,也为公司后续的发展奠定了坚实的基础。

Capar Components Corp公司的发展小趣事

随着电子行业的快速发展,Capar Components Corp意识到只有不断创新才能在市场中立足。于是,公司加大了对研发的投入,引进了一批高素质的技术人才。经过数年的努力,公司成功研发出了一种新型的高性能集成电路,这一创新不仅提升了产品的性能,还降低了生产成本,使公司在市场上获得了更大的竞争优势。

浙江东亚电子(DongYa)公司的发展小趣事

浙江东亚电子注重企业文化的建设,致力于为员工提供一个良好的工作环境和发展平台。公司关注员工的学习和成长,为员工提供持续长效的发展机会和有竞争力的薪酬。同时,公司还积极开展各类文化活动和社会公益活动,增强员工的归属感和凝聚力。

这些故事框架展示了浙江东亚电子在电子行业中发展起来的几个重要方面。通过技术创新、产业布局拓展、国际市场开拓、品质管理提升和企业文化建设等方面的努力,公司不断壮大自身实力,成为行业内的佼佼者。

CALMIRCO公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈,行业挑战也层出不穷。CALMIRCO公司始终保持敏锐的市场洞察力,积极应对各种挑战。在面对原材料价格波动、国际贸易摩擦等不利因素时,CALMIRCO公司及时调整战略,优化生产流程,降低成本,确保产品的竞争力。同时,公司还不断加大研发投入,推动技术创新和产业升级,以适应不断变化的市场需求。

这五个故事只是CALMIRCO公司在电子行业发展中众多精彩瞬间的缩影。正是这些不懈的努力和持续的创新,使得CALMIRCO公司在激烈的市场竞争中脱颖而出,成为电子行业的佼佼者。

Elektron公司的发展小趣事

随着业务的不断拓展和市场的不断扩大,Elektron公司逐渐将目光投向了全球市场。公司在全球范围内设立了多个代表处和分支机构,与当地的合作伙伴建立了紧密的合作关系。通过全球化战略的实施,Elektron成功进入了焊接设备、等离子切割设备和电池服务设备的高端市场,并成为了世界市场的领导者之一。

问答坊 | AI 解惑

等离子久亏损 长虹272亿改押注液晶面板

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 在6.75亿美元的等离子面板项目尚未获回报之际,长虹又计划斥272亿元巨资在成都建设8.5代液晶面板生产线,与成都市政府联合的中国大陆资本在该项目中占控股地位。台企富士康为避开中国台湾面板 ...…

查看全部问答>

WinCE6.0下UDA1380驱动

现在在做一个基于WinCE6.0+ARM9-LPC3250的音频驱动程序,驱动使用UDA1380音频编解码芯片和IIS接口。周立功提供的 LPC3250中WInCE6.0下BSP的wavedev driver只实现了放音的功能,并没有实现录音功能。对录音我该怎么设置DMA啊?哪位有完整的代码?给 ...…

查看全部问答>

100分 请问能不能把sqlce3.0或以上版本转换成sqlce2.0版

请问高手能不能把sqlce3.0或以上版本转换成sqlce2.0版,或者wince4.2能不能安装sqlce3.0或以上版本呢?…

查看全部问答>

招win ce + evc的兼职人员(上海)

急招win ce + evc的兼职人员(上海) 地点:上海 联系:13817161652…

查看全部问答>

希望那位朋友提供下CCS3的下载地址

希望那位朋友提供下CCS3的下载地址,用来调试28335,28027,2407A这些片子 谢谢…

查看全部问答>

【讨论】INFO FLASH的使用

版主:我用f149片子,资料上说它有256个字节的INFO FLASH,那么我是否可以拿来保存一些保存数据,当再次上电时我能读出这些数据呢?请问在IAR WORKBENCH里怎么定义呢?谢谢!…

查看全部问答>

【每日一片】Cortex-M4 指令集兼容性

        基于 Cortex-M3 的当前应用如果需要更强的计算能力,Cortex-M4 的引进将会扩展 Cortex-Mx 核心在这方面的应用。各大半导体原厂早已计划将 Cortex-M3 继续升级到 Cortex-M4 ,包括 TI、NXP、S ...…

查看全部问答>

关于IAR编译警告的问题

onversion from pointer to smaller integer…

查看全部问答>