TI教室 >
应用与设计 >
工业应用 >
工厂自动化与控制系统 >
Logistics Robots >
TI-RSLK 模块 3 - ARM Cortex M > TI-RSLK 模块 3 - ARM Cortex M 架构
- 课程目录
- 相关资源
- 课程笔记
大家好,
我是 Jon Valvano。
在本次讲座中,我们将讨论结构。
我们将讨论总线、RISK、寄存器。
在本次讲座中,我们要做的最重要的事情是,
观看计算机是如何访问内存的。
因此,我坚信,您对处理器的
工作方式了解的越多,您就越了解 Cortex M
实际上是如何执行软件的,也就越有可能
成为更加优秀的嵌入式系统工程师。
好的。
那么,让我们开始吧。
结构是计算机的
各种组件连接在
一起的方式。
正如我说过的,我们有一个 Cortex M 处理器。
这是执行软件的实体。
我们有两种类型的内存。
我们有可电擦除可编程的只读内存。
有时我们将其称为闪存,有时我们将其称为 ROM。
它位于该只读内存中,我们的
指令、操作码和机器码就存储在
该只读内存中。
另一种类型的内存是称为随机存取内存的
读取/写入内存。
该磁盘包含我们执行时的数据。
计算机的其他组件
是输入端口和输出端口。
正如我说过的,结构是这里的
组件在计算机内连接在一起的
方式。
因此,Cortex M 是哈佛结构,因为它具有
用于提取操作码的总线,该总线与另一条总线 --
第二条总线 --
是相分离的,它使用该第二条总线在内存中进行读取和写入。
因此,哈佛结构具有两条总线,
一条用于提取操作码,另一条用于提取数据。
这之所以很重要,是因为它可以使
您的计算机具有很快的运行速度,
因为它可以同时执行多个操作。
而冯·诺依曼结构是单条总线,
它使用该总线访问它的所有
组件。
Cortex M 不仅具有两条总线,
它实际上具有一大堆总线。
有一条完全用于调试的总线,
还有一条用于某些内部外设的总线。
那么,您需要从该幻灯片中获取的
信息是,Cortex M非常复杂。
此外,它针对速度进行了优化。
该特定结构的第二个优势
是精简的指令集结构。
这意味着它具有很少的指令。
它事实上是 200 条,有些人可能认为
该数量很多,但 200 不算多。
从某种意义上来说,RISK 结构
具有所有固定长度的指令。
事实上,在您的Thumb-2 结构中,
在 Cortex M 上的Thumb-2 指令集中,
大多数指令的长度是 16 位。
少量指令具有32 位的长度。
这已经足够接近该规则,可以将
Cortex M 分类为RISK 处理器。
现在,对于 RISK 处理器,您可以说的是,由于
指令非常非常简单,因此大多数指令
在一个或两个总线周期中执行。
因此,我们将以每秒4800 万个周期的速度
运行。
这意味着我们每秒
将执行大约2400 万条指令。
我们将看到,这是一个加载存储结构。
因此,将有一条用于将数据
从内存提取到处理器中的指令,
还有另一条用于获取数据并将其存储到
内存中的指令。
这是经典的 RISK 过程。
然后,我们将看到大量的寄存器和很少数量的
寻址模式。
现在,与 RISK 相反的是复杂指令集计算机
或 CISC,它们具有大量的指令,
其长度和执行时间都是可变的,
许多指令可以访问内存。
寄存器通常是专用的,
但我们将讨论RISK 处理器。
您将看到的是,当它分解为
机器码时,有大量的
指令。
但它仍将具有很快的执行速度。
这正是该节讨论的重点。
那么,我们讨论了存在大量的寄存器。
它们在这里。
您的 Cortex M 上有 16 个寄存器。每个寄存器的
宽度为 32 位。
这是一个 32 位结构。
我们将看到,寄存器 R0 用于存储
函数参数。
因此,如果您有单个函数参数,
它将在 R0 中传递。
如果您有第二个参数,它将在 R1 中传递。
第三个参数在 R2 中传递,第四个参数在 R3 中传递。
现在,函数的返回参数将
在 R0 中返回。
现在,让我们看看其他一些寄存器。
寄存器 13是堆栈指针。
我们将在几张幻灯片中看到堆栈。
它非常重要。
堆栈是临时信息,
我们可以将其用于局部变量
或临时存储。
连接寄存器用于函数调用。
我们也将看到它。
寄存器R14是连接寄存器,
而最重要的寄存器可能是
寄存器R15。
它是程序计数器。
它是一个指向 ROM 的东西,我们将从该 ROM 里面提取
我们的操作码。
该幻灯片中的重点是,数据
在软件中非常重要,您需要
知道数据可能存在于许多位置。
如果它存在于寄存器中,这意味着它具有很高的速度。
因为寄存器不位于内存中,它们位于
处理器中,它们的速度非常块,并且
它们是临时的。
如果我们将数据放置在 RAM 中,它会长时间地保存在那里,
直到我们关闭电源,因为 RAM 具有易失性。
因此,如果我们将信息放置在 RAM 中,并且我们关闭电源,
那么该信息将丢失。
不过,它的速度也很快,
我可以对其进行读取/写入。
请注意,ROM 具有非易失性,它是
我们放置常量和程序的地方。
非易失性意味着,
当电源打开并关闭后,它不会丢失其信息。
有时,我们可以看到数据位于 I/O 端口中。
因此,您学习结构的原因之一
是弄清您的数据位于何处
并确定您的数据是临时的还是永久的。
正如我们以前所指出的,程序、
命令、指令位于ROM 中,程序计数器
会指向它们。
好的。
那么,让我们来谈谈内存。
我们已看到它是哈佛结构,这样
当它提取操作码时,它使用 ICode 总线,
当它提取 RAM或 I/O 端口时,
它将使用系统总线。
即使这样,即使有多条总线,
也仅有单个地址空间。
您可以看到地址本身为
32 位,这意味着整个地址空间的
大小为 2 的 32次方或 4 千兆字节。
计算机中的每个地址宽度为 8 位。
这将在下一张幻灯片中为我们带来一个问题。
我们将向您展示如何访问多个字节,
如何访问 32 位值,即使它存在于四个不同的地址,
也可以访问它。
但请记住,程序计数器指向 ROM,
ROM 中包含机器码和
所有常量。
其他寄存器将指向 RAM,
我们的数据就存储在这里。
那么,我们的程序存储在 ROM 中,我们的数据存储在 RAM 中。
ROM 具有非易失性,而 RAM 具有易失性。
I/O 设备还将存在于该内存映射中。
因此,您将看到I/O 端口,您知道,
端口 1、端口 2、端口 3 --我们将在后续讲座中
讨论该话题 --
存在于这里的同一地址空间中。
我要向您指出,该图不是按比例
绘制的。
如果您看看实际上可以访问的字节
总数,就可以看到大约为 400,000 个稍微
不同的位置,这些位置将是可以访问的。
但有 40 亿个可能的地址。
因此,大部分地址空间是空的。
那么,再说一次,通过该幻灯片,您可以了解到程序存储在 ROM 中,
数据存储在 RAM 中。
我们必须弄清如何提取 32 位
数据,即使内存空间的
可寻址访问是按字节寻址的,
每次 8 位。
那么,可以通过两种方法来实现它。
如果您获取一个 32 位的数字,
有一个 32 位的数字,
分解为十六进制数。
这将需要四个字节的存储空间
和四个不同的地址来存储该 32 位数字。
那么,可以通过两种方法来实现它。
我们可以采用这里的最高有效字节,
将其作为第一个字节。
然后,将第二高有效字节作为第二个字节,
将第三高有效字节作为第三个字节,将最低有效字节
作为最后一个字节。
如果我们这么做,这称为大端字节序。
请注意,事实上 Cortex M并未采用这种方法。
才采用了相反的方法。
它采用小端字节序来实现它。
它采用最低有效字节,首先在其中存储数据,
然后将第二低有效字节作为第二个字节,将第三低有效字节作为第三个字节,
将最高有效字节作为最后一个字节。
这称为小端字节序。
好的。
如果我希望访问 16 位值,将发生类似的情况。
它使用两个字节并采用小端字节序,
我们的 Cortex M 采用的正是该方法,它将
首先在最低有效字节中存储数据,然后在最高有效字节中
存储数据。
再说一次,认识到这一点对您非常重要,
因为您将查看内存的内部 --
我的数据在哪里 -- 它可以
分解为多个字节。
它将首先在最低有效字节中存储数据。
请注意,有些内容并不遵守该规则。
换句话说,字符串是一个 ASCII 字符序列。
这里有一个 J、一个O 以及一个 N,然后
是 null,这意味着字符串的结尾。
如果我有一个字符串,它是一个数字序列,
那么它始终首先存储第一个字符。
这是 J。然后存储第二个字符,接下来
存储第三个字符,最后存储 null 字符。
无论计算机采用大端字节序还是采用小端
字节序,都是如此。
在您的固有理解中,计算机的
工作方式是不是如何从内存中提取数据?
如何将数据从内存转移到处理器呢?
它是通过寻址模式完成的。
因此,对于如何将数据转移到处理器中而言,
寻址模式正是该转移过程。
我们将首先讨论最简单的寻址模式,该模式称为立即寻址。
立即寻址在这里由该#号表示。
立即寻址模式意味着数据
本身以指令的机器码进行
编码。
那么,这是这些32 位指令之一,
它显然位于 ROM 中。
程序计数器指向机器码。
当这执行时,该特定的指令所做的是,它获取
值 100 并将其存储在寄存器的
32 个位中。
但是,如果我查看机器码,
我可以看到 100 等于 0x64。
我可以看到嵌入到机器码中的数字 100。
那么,这是立即寻址模式,其中
数据位于指令本身中。
有几条指令采用立即
寻址模式。
将数据提取到处理器中的最常见方式是使用
变址寻址模式。
这之所以很重要,
是因为作为一名程序员,
您需要了解指针和数据之间的区别,
指针是一个地址,而数据是一个值。
正是在这条简单的指令中,
我们可以看到这两项操作。
因此,在变址寻址模式中,
我们会通过某种方式获取一个指针。
那么,这是一个寄存器。
它可以是这些寄存器中的任何一个。
在该寄存器中,我们将存储一个地址,
而不是一个数字。
那么,这是一个 RAM 地址。
它将指向 RAM。
这是实际值,这里的指令
将在该地址提取相应的内容,
并将其存储到该寄存器中。
那么,当该指令执行时,12345678 --
再说一遍,这采用小端字节序进行存储 --
该值会加载到寄存器 R0 中。
我们可以看到,它是这些 16 位指令之一,
它的运行速度很快。
有一个变址寻址模式版本,其中,再说一次,
R1 是地址,但我要添加偏移地址。
因此,对于 R4 中的地址,我们要向其
添加 4,以获得另一个地址。
请注意,它不会修改 R1
如果 R1 等于20000004,我向其添加 4,
我得到 20000008。
该指令将提取这个值,87654321,
它是一个值。
那么,请注意这是一个地址,它表示
指针,这是其数据。
因此,它处于变址寻址模式,
对我而言,这是最强大的用于从内存提取数据
或将数据回写到内存中的方法。
现在,我们有一整套使用相对于程序寻址的
方法。
请注意,事实上,相对于程序寻址的方法是,我们
获取程序计数器,然后我们向其添加偏移地址。
因此,它实际上是采用偏移地址的变址寻址模式。
但我们要将其称为相对于 PC 寻址,因为我们
知道,它是相对于程序计数器而言的。
因此,再说一次,您必须了解的是,
我将如何访问内存。
因此,这里的伪操作,该 .field
将获取 Count 的值,该符号表模式
是其地址,因此在 ROM 中的该位置,
它将是一个 32 位值。
在这里 -- 这是30,这是 ROM。
这是 ROM。
这是 RAM。
那么,这是 ROM。
这是 RAM。
因此,存储到 ROM 中的是一个32 位值,它是 Count 的地址。
在这里的指令中,我们将提取 Count 的地址。
请注意,它是相对于 PC 的,
地址与程序一起存储在这里。
那么,这里的第一条指令将首先提取 --
首先提取地址,这样R1 现在就指向该变量。
第二条指令是我们在
前一张幻灯片中看到的指令,它将
提取值。
例如,如果count 等于 5,
这里的第二条指令会将该 5 传递到寄存器中。
第三条指令使用立即寻址模式和
寄存器寻址模式,并采用 R1,将 R1
添加到它,向其添加 1,然后将其存储回去。
因此,它会将这递增到 6。
这是第三条指令。
第四条指令是存储指令。
它将获取该 6,然后将其存储回到该位置。
我希望您在这里看到的是如何访问变量。
我们将首先获取其地址。
然后,我们将获取其值。
它将执行两条指令。
但再说一次,它的运行速度很快。
我之所以向您提出这个话题,是因为,顺便说一下,看看步骤 3。
让我们把这里放大,请注意,在步骤3处,
该变量的值位于两个不同的位置。
它位于 R0 中,它仍位于内存中。
但这两个值是不同的。
当我们转向中断时,这将
成为一个问题。
我们将向您展示如何解决它。
好的。
总之,我们讨论了 RISC 与 CISC。
我们讨论了小端字节序与大端字节序。
请记住,Cortex M 确实采用了小端字节序。
您需要了解的最重要的事情是 --
那么,如果我有一个称为 x 的变量,我想
访问该变量,我将创建一个
指向该变量的指针,一个 32 位
指针。
然后,当我执行时,我将选择一个寄存器 --
无论选择哪个都没有关系 --
我将采用相对于 PC 寻址,
我将引入指向它的
指针,从而使 R0 指向它。
然后我可以读取或写入。
在本例中,我要使用变址寻址来读取它。
因此,我们应该认识到如何访问数据,这一点
对我们而言非常重要。
关于结构的内容就是这样了,我强烈建议您
在本次课程中始终打开您的
Cortex M 手册,确保您了解
您的计算机在做什么。
我认为,您越是了解您的计算机的行为,您就越有可能
成为更加优秀的嵌入式系统工程师。
那么,在下一个视频中,我们将
看到 Cortex M 上的部分指令。
课程介绍
共计3课时,46分16秒
猜你喜欢
换一换
推荐帖子
- msp430g2553仿真器下载线制作
- 网上这方面的教程特别难找,以下是本人总结的msp430g2553和仿真器连接图。 单片机引脚图: 单片机引脚图 实际设计最小系统: 仿真器与电路板连接图: ...
- fish001 微控制器 MCU
- ccs编译错误
- 编译的时候出现了两个错误,cmd的错误在前,然后就是无法生成out文件的错误 Description Resource Path Location Type #10099-D program will not fit into available C5515.cmd /diyige line 74 C/C++ Problem Description Resource P...
- hrm DSP 与 ARM 处理器
- 【MSP430共享】基于蓝牙技术的生理参数采集系统设计
- 采用低功耗的单片机和蓝牙模块研制出一种便携式的住院病人生理参数采集系统,实现了医院内普通病房的无线生理数据采集功能。本文从硬件和软件两方面讨论了系统的设计和实现过程 ,并选择了体温测量模块的实现方法做重点介绍 ,阐明了蓝牙技术在医疗监护、生理参数采集中的应用方法。 [ 本帖最后由 鑫海宝贝 于 2011-10-12 09:21 编辑 ]...
- 鑫海宝贝 微控制器 MCU
- 这里有解决踏板动力更长续航时间方案
- 本帖最后由 qwqwqw2088 于 2019-6-16 14:21 编辑 随着电动自行车和电动摩托车越来越受欢迎,消费者对电池组的续航能力也提出了更高的要求。延长电池组的续航时间可让车辆行驶更远里程而无需频繁充电。 可以通过以下两种方法来提高锂离子(Li-ion)电池组的续航...
- qwqwqw2088 模拟与混合信号