cortexm3中c语言传参数,STM32学习之路入门篇之指令集及cortex——m3的存储系统

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

1)、0x2000_0000-0x000F_FFFF(SRAM区中的最低1MB)和0x4000_0000-0x400F_FFFF(片上外设区中的最低1MB)。

2)、对于SRAM位带区的某个比特,记它所在字节地址为A,位序号为n,则该比特在别名区的地址是:

1a749f65dafe87448280d00dfee24fe0.png

3)、对于片上外设位带区的某个比特,记它所在字节地址为A,位序号为n,则该比特在别名区的地址是:

99c5d077a26516fb54c5376e651f0984.png

5、位带地址映射

1)、SRAM区中的位带地址映射

866e1464f924ec3100a78ad74e0118e7.png

2)、片上外设区中的位带地址映射

caf47df2d812fa92846baa6421e1fc57.png

二)、位带操作的优越性

1、位带操作对硬件I/O密集型的底层程序提供了很大方便。

2、位带操作可用来化简跳转的判断。是代码更整洁。

3、在多任务中用于实现共享资源在任务间的“互锁”访问。

三)、其他数据长度上的位带操作

1、位带操作并不限于以字为单位的传送。亦可以按半子节和字节为单位传送。

五、在C语言中使用位带操作

1、C编译器中并没有直接支持位带操作。欲在在C中使用位带操作,最简单的做法就是#define一个位带别名区的地址。为了简化位带操作,也可以定义一些宏。

2、当使用位带功能时,要访问的变量必须用vollatile来定义。

六、非对齐数据传送

1、Cortex-CM3支持在单一的访问中使用非(地址)对齐的传送,数据存储器的访问无需对齐。

2、非对齐传送实例

77b715b6984bdc1cb1a4c57af6536b03.png

3、在Cortex-CM3中,非对齐的数据传送只发生在常规的数据传送指令中,其他的指令则不支持:

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

2)、栈堆操作(PUSH/POP)。

3)、互斥访问(LDREX/STREX)。

4)、位带操作。

4、应该养成好习惯,总是保持地址对齐。为此可以变成NVIC,使之监督地址对齐。

七、互斥访问

1、在Cortex-CM3中,用互斥体访问取代了ARM处理器中的SWP指令。

2、互斥访问的理念同SWP非常相似,不同点在于:在互斥访问操作下,允许互斥体所在的总线被其他master访问,也允许被其他运行在本机上的任务访问,但是Cortex-CM3能驳回有可能导致竟态条件的互斥访问。

3、互斥访问分为加载/存储,相应的指令为LDREX/STREX,LDREXH/STREXH,LDREXB/STREXB,分别对应于字/半字/字节

4、使用方式(以LDREX/STREX为例)

1)、语法格式

9cbb9913385936523f538cc9b4d423fd.png

2)、LDREX指令与LDR相同。而STREX不同,STREX指令的执行是可以被驳回的。

I、当处理器同意执行STREX,Rxf的值会被存储到(Rn+Offset)处,并且把Rd的值更新。

II、若处理器驳回了STREX的执行,则不会发生存储动作,并且把Rd的值更新为1。

3)、驳回规则:只有在LDREX执行后最近的一条STREX才能成功执行。其他情况下,驳回此STREX

I、中途有其他STR指令执行。

II、中途有其他的STREX执行。

4)、当时用互斥访问时,LDREX/STREX指令必须成对使用。

八、端模式

1、Cortex-CM3支持both小端模式和大端模式。在绝大多数情况下,Cortex-CM3都是用小端模式——为了避免不必要的麻烦,推荐使用小端模式。

2、Cortex-CM3中对大端模式的定义与ARM7的不同(小端定义都相同)。在ARM7中大端模式称为“字不变大端”,而在Cortex-CM3中,使用的是“字节不变大端”。

1)、Cortex-CM3的字节不变大端:存储器视图

244eef7a952b1000ce237d39c43d3187.png

2)、Cortex-CM3的字节不变大端:在ABH上的数据

1ed26893f6071cfdd5ad7ade9553efed.png

3)、ARM7字节不变大端:在ABH上的数据

3eb9d48f76b0676d4745b949bab4c313.png

3、在Cortex-CM3,是在复位时确定使用那种端模式的,且运行时不得改变。指令预取永远使用小端模式,在配置控制存储空间的访问也永远小端模式(包括NVIX,FPB之流)。另外外部私有总线地址区0xE0000000至0xE00FFFFF也永远使用小端模式。

c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] 610626052e95c7fbe3d254abc769d9ad.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值