Cortex-M3
_WindChimes
Just be nice,always thinks twice.
展开
-
Cortex-M3-栏目-文章来源
Cortex-M3-栏目-文章来源首先我也是个学者,这个栏目的绝大部分的见解来自CM3权威指南.我只仅仅学习记录,将来可以复习一些需要的知识 然后也可以和大家分享,也希望能帮到大家 我用一个小记,说明一下文章来源,以后此栏目就不在注明啦...原创 2020-09-04 17:09:30 · 151 阅读 · 0 评论 -
Cortex-M3-MPU(存储器保护单元)
Cortex-M3-MPU(存储器保护单元)MPU使命-关键系统 这种系统往往都用于性命攸关的场合,且必须连续无故障地工作,比如,火车调度系统、生命维持系统、大型发动机驱动器、核子反应堆控制、网络/电信的数据交换中枢等。如果失能,将导致惨重的经济与损失,甚至会使无数人死于非命。因此,决不允许这类系统出现 上述情况。然而,这些系统的复杂度往往都非常高,几乎不可能由开发人员保证这种可靠性。因此,需要在硬件水平上加入一个“公安机关”。通过它设置各种类型的“禁地”,并且施加多种规章条例。一旦发现违章,则原创 2020-09-11 16:44:56 · 1267 阅读 · 0 评论 -
Cortex-M3-指针和野指针
Cortex-M3-指针和野指针什么是指针?指针在内存中实际上是一个无符号整数(unsigned int),但是它的值被赋予特殊的解释:表示变量或函数的地址。所以才被形象地称为“指针”,就好像指向谁家似的。在使用指针前,都必须先让它指向有意义的,并且允许由程序使用的实体——数据和代码。而所谓“野指针”,就是指某个指针变量的值因故超出合法的范围,使其“枪口”乱指。程序逻辑错误、数组越界、堆栈溢出、指针未经初始化、对缓存与缓冲的处理不当、多任务环境中的紊乱条件,甚至是恶意地破坏等,都可以制造出野指针。如原创 2020-09-11 16:35:23 · 272 阅读 · 0 评论 -
Cortex-M3-建立向量表
Cortex-M3-建立向量表如果在程序执行的从头到尾,都只给每个中断提供固定的中断服务程序(这也是目前单片机开发的绝大多数情况),则可以把向量表放到 ROM 中。在这种情况下不需要运行时重建向量表。然而,如果想让自己的设备能随机应变地对付各种复杂情况,就常常需要动态地改变中断服务例程,更新向量表就是必需的了。此时,向量表必须被转移到可读写存储器中(如内存)。 在把向量表重定位之前,往往要把现有的向量表往新的位置复制一份。需要拷贝的向量主要是系统异常的服务例程,如各种 fault 的、NMI 的以.原创 2020-09-11 14:04:23 · 362 阅读 · 0 评论 -
Cortex-M3-建立堆栈
Cortex-M3-建立堆栈当开发的程序比较简单时,可以从头到尾都只使用 MSP。这时,只需要保证开出一个容量够大的堆栈,再把 MSP 初始化到其顶即可——这也是单片机开发最常见的做法。堆栈用穿是非常致命的错误,必须非常严肃地计算安全容量。在计算时,除了要计入最深函数调用时对堆栈的需求,还需要判定最多可能有多少级中断嵌套。一个笨方法(但是很保险)是假设每个中断都可以嵌套。对于每一级嵌套的中断,至少需要 8 个字(32 字节),而且如果 ISR 过于复杂,还可能有更多的堆栈需求。 因为 CM3 中的堆栈原创 2020-09-11 13:54:24 · 684 阅读 · 0 评论 -
Cortex-M3-中断/异常的响应序列
Cortex-M3-中断/异常的响应序列当CM3开始响应一个中断时,会在它看不见的体内奔涌起三股暗流:入栈:把8个寄存器的值压入栈. 取向量:从向量表中找出对应的服务程序入口地址. 选择堆栈指针MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC.入栈响应异常的第一个行动,就是自动保存现场的必要部分:依次把xPSR,PC,LR,R12以及R3‐R0由硬件自动压入适当的堆栈中:如果当响应异常时,当前的代码正在使用PSP,则压入PSP,即使用线程堆栈;否则压入MSP...原创 2020-09-11 11:27:40 · 1368 阅读 · 0 评论 -
Trumb/ARM 指令模式
Trumb较新的ARM处理器有一种16-bit指令模式,叫做Thumb,也许跟每个条件式运行指令均耗用4位的情形有关。 在Thumb模式下,较小的opcode有更少的功能性。例如,只有分支可以是条件式的,且许多opcode无法访问所有CPU的寄存器。 然而,较短的opcode提供整体更佳的编码密度(注:意指代码在存储器中占的空间),即使有些运算需要更多的指令。特别在存储器端口或总线宽度限制在32以下的情形时,更短的Thumb opcode能更有效地使用有限的存储器带宽,因而提供比32位代码更佳的性能原创 2020-07-08 19:05:19 · 1150 阅读 · 0 评论 -
字对齐、半字对齐、字节对齐
一般情况下字为32位(4字节)、半字为16位(2字节)、字节为8位(1字节)。大多数计算机使用字节(8位的数据块)作为最小可寻址的存储器单位,而不是访问存储器中单独的位。存储器的每一个字节都由唯一的数字标识,称为该字节的地址,所有可能地址的集合称为存储器空间。举例来说,ARM处理器工作状态有如下两种:(具体参阅:点击指令集)ARM状态:执行字对齐的32位ARM指令。 Thumb状态:执行半字对齐的16位Thumb指令。字对齐、半字对齐、字节对齐只要明白其中一个,另外两个自然也就理解了。所..转载 2020-09-08 13:30:55 · 1429 阅读 · 0 评论 -
Cortex-M3-寄存器
Cortex-M3-寄存器Cortex‐M3 处理器拥有 R0‐R15 的寄存器组。其中 R13 作为堆栈指针 SP。SP 有两个,但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。寄存器组R0-R12:通用寄存器R0‐R12 都是 32 位通用寄存器,用于数据操作。但是注意:绝大多数 16 位 Thumb 指令只能访问 R0‐R7,而 32 位 Thumb‐2 指令可以访问所有寄存器。Banked R13: 两个堆栈指针Cortex‐M3 拥有两个堆栈指针,然而.原创 2020-09-07 19:23:35 · 927 阅读 · 0 评论 -
Cortex-M3-复位(序列)
Cortex-M3-复位(序列)在离开复位状态后,CM3 做的第一件事就是读取下列两个 32 位整数的值:从地址 0x0000,0000 处取出 MSP 的初始值。 从地址 0x0000,0004 处取出 PC 的初始值——这个值是复位向量,LSB 必须是 1。然后从这个值所对应的地址处取指。图为复位序列请注意,这与传统的 ARM 架构不同——其实也和绝大多数的其它单片机不同。传统的ARM 架构总是从 0 地址开始执行第一条指令。它们的 0 地址处总是一条跳转指令。在 CM3中,0 地址处原创 2020-09-07 16:35:55 · 1991 阅读 · 0 评论 -
Cortex-M3-异常与中断-向量表 s
Cortex-M3-异常与中断Cortex‐M3 支持大量异常,包括 16‐4‐1=11 个系统异常,和最多 240 个外部中断——简称 IRQ。具体使用了这 240 个中断源中的多少个,则由芯片制造商决定。由外设产生的中断信号,除了 SysTick 的之外,全都连接到 NVIC 的中断输入信号线。典型情况下,处理器一般支持 16 到 32 个中断,当然也有在此之外的。 作为中断功能的强化,NVIC 还有一条 NMI 输入信号线。NMI 究竟被拿去做什么,还要视处理器的设计而定。在多数情况下,NMI原创 2020-09-07 14:49:34 · 675 阅读 · 0 评论 -
Cortex‐M3-指令集
Cortex‐M3-指令集:Cortex‐M3 只使用 Thumb‐2 指令集。这是个了不起的突破,因为它允许 32 位指令和 16 位指令水乳交融,代码密度与处理性能两手抓,两手都硬。而且虽然它很强大,却依然易于使用。 在过去,做 ARM 开发必须处理好两个状态。这两个状态是井水不犯河水的,它们是:32 位的ARM 状态和 16 位的 Thumb 状态。当处理器在 ARM 状态下时,所有的指令均是 32 位的(哪怕只是个”NOP”指令),此时性能相当高。而在 Thumb 状态下,所有的指令均是 16原创 2020-09-04 17:03:23 · 533 阅读 · 0 评论 -
Cortex‐M3-存储器保护单元(MPU)
Cortex‐M3 有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。当检测到犯规(violated)时,MPU 就会产生一个 fault 异常,可以由 fault异常的服务例程来分析该错误,并且在可能时改正它。 MPU 有很多玩法。最常见的就是由操作系统使用 MPU,以使特权级代码的数据,包括操作系统本身的数据不被其它用户程序弄坏。MPU 在保护内存时是按区管理的(“区”的原文是 region,以后不再中译此名词——译注)。它可以把某些内存 re...原创 2020-09-04 16:53:48 · 551 阅读 · 0 评论 -
Cortex‐M3-总线接口
Cortex‐M3-内核框图Cortex‐M3 内部有若干个总线接口,以使 CM3 能同时取址和访内(访问内存),它们是:指令存储区总线(两条): 负责对代码存储区的访问,分别是 I‐Code 总线和 D‐Code 总线。前者用 于取指,后者用于查表等操作,它们按最佳执行速度进行优化。 系统总线: 用于访问内存和外设,覆盖的区域包括 SRAM,片上外设,片外 RAM,片外扩展设备, 以及系统级存储区的部分空间。 私有外设总线: 负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统..原创 2020-09-04 16:50:04 · 5182 阅读 · 4 评论 -
Cortex‐M3-存储器映射
总体来说,支持 4GB 存储空间:Cortex‐M3 存储器映射由半导体厂家说了算,Cortex‐M3 预先定义好了“粗线条的”存储器映射。通过把片上外设的寄存器映射到外设区,就可以简单地以访问内存的方式来访问这些外设的寄存器,从而控制外设的工作。结果,片上外设可以使用 C 语言来操作。这种预定义的映射关系,也使得对访问速度可以做高度的优化,而且对于片上系统的设计而言更易集成(还有一个重要的,不用每学一种不同的单片机就要熟悉一种新的存储器映射——译注)。 Cortex‐M3 的内部拥有一个总线基础原创 2020-09-04 16:41:44 · 668 阅读 · 0 评论 -
Cortex-M3 处理器内核
Cortex-M3 处理器内核采用 ARMv7-M 架构原创 2020-09-02 13:43:46 · 928 阅读 · 0 评论