存储器

STM32F103处理器内部存储器

◇◆丶佛笑我妖孽 提交于 2020-02-24 23:02:10
STM32F103处理器内部存储器结构及映射    STM32F103存储器映像为 预定义形式 ,严格规定了哪个位置使用哪条总线。    STM32F103的程序存储器、数据存储器、寄存器和IO端口被组织到一个4GB的线性地址空间。数据字节以小端模式存放在存储器中。地址空间分8块,每块512MB。 注: 小端模式 :与大端模式相对应,将数据的低字节保存在内存的低地址中,高字节保存在高地址中。 其中:      代码区 :(0x00000000 ~ 0x1FFFFFFF,512MB)      主要包括 : 启动空间 (0x00000000 ~ 0x07FFFFFF,128MB)                Flash (0x08000000 ~ 0x08xxxxxx,16KB~1MB)                系统存储区 (0x1FFFF000 ~ 0x1FFFF800,2KB)     Flash :用于存放用户编写的程序     系统存储区 :存放串口下载程序,当系统上电后,根据用户设定的启动配置,将Flash或系统存储区映射到启动空间,执行用户程序或串口下载程序。    内部 SRAM (0x20000000 ~ 0x200xxxxx,6~96KB):保护程序运行时产生的临时数据的随机存储器。     外设区 :外设寄存器地址空间,用于调试组件等私有外设。例如:FPB

第七周学习报告

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-23 13:52:21
第六章 存储器层次结构 存储器系统是一个具有不同容量、成本、和访问时间的存储设备的层次结构。 6.1存储技术 随机访问存储器分为两类:静态和动态。静态SRAM比动态DRAM更快,但也贵的多。 CPU 寄存器、高速缓存存储器、主存储器、磁盘。 1、静态RAM SRAM将每个位存储在一个双稳态的存储器单元里。每个单元是用一个六晶体管电路来实现。 2、动态RAM DRAM将每个位存储为对一个电容的充电。 关于两种存储器中的特性书384页图6-2有示 3、传统DRAM DRAM芯片中的单元(位)被分成d个超单元,每个超单元都由w个DRAM单元组成。 一个d*w的DRAM总共存储了dw位信息。 将DRAM组织成二维阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量, 信息通过引脚流入流出芯片,每个引脚携带一个1 位 的信号。 4、存储器模块 DRAM芯片包装在存储器模块中,它是插到主板的扩展槽上的。常见的包装包括168个引脚的双列直插存储器模块,它以64位为块传送数据到存储控制器和从存储控制器传出数据,还包括72个引脚的单列直插存储器模块,它以32位块传送数据。 通过将多个存储器模块连接到存储控制器,能够聚合主存,当控制器收到一个地址 A 时,控制器选择包含 A 的模块 k ,将 A 转换为它的 (i, j) 的模式,并将 (i, j) 发送到模块 k 。 5、增强的DRAM

什么是ROM、RAM、DRAM、SRAM和FLASH的区别

青春壹個敷衍的年華 提交于 2020-02-23 03:33:02
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态。 RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。 DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。 DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus DRAM。在很多高端的显卡上,也配备了高速DDR

2.微嵌第一章讲义阅读

二次信任 提交于 2020-02-21 09:40:32
1.计算机发展史 从文明诞生开始,出现各种计算方式 工业革命对计算工具提出高要求,诞生了一批机械设计的计算设备 1936年 Turing发表《论数字计算在决断难题中的应用》,数学上说明“可计算性”,提出了图灵机的设想 1943年,二战时期为了解决火炮弹道计算问题,开始研制电子计算机,设计出一个庞然大物,ENIAC,成为人类科学技术史上的划时代产品 1944年。冯诺依曼参与到ENIAC的改进,1945年,发表的关于EDVAC的报告提出二进制计算和存储,在逻辑结构上将计算机分为:运算器、控制器、存储器、输入设备、输出设备五类,1952年,EDVAC完工 1946年,威尔克斯得到EDVAC方案,设计制造EDSAC,这是世界上第一个存储程序式电子计算机 2.现代电子计算机发展的五阶段 第一阶段 1946至1950年代,使用电子管,体积庞大、功耗大,稳定性差且昂贵 第二阶段 1955至1960中期,使用晶体管代替电子管,内存采用快速磁芯存储器,外存是磁带、磁鼓。减少了体积,降低功耗和成本。此时出现了工业控制机,面向过程的程序设计语言相继面世 第三阶段 1965到1970年,开始采用中小型规模集成电路,体积变小,可靠性提高,速度更快,操作系统逐渐成熟,计算机范围变广,小新机出现 第四阶段 1972~1990,大规模集成电路和超大规模集成电路出现并广泛应用,计算机体积进一步缩小

存储管理(4)

六月ゝ 毕业季﹏ 提交于 2020-02-21 05:43:37
存储管理 存储管理的主要模式 逻辑地址 逻辑地址:又称相对地址,即用户编程所使用的地址空间 逻辑地址从0开始编号,有两种形式: 一维逻辑地址(地址) 二维逻辑地址(段号:段内地址) 段式程序设计 把一个程序设计成多个段 代码段、数据段、堆栈段等等 用户可以自己应用 段覆盖技术 扩充内存空间使用量 这一技术是程序设计技术,不是OS存储管理的功能 物理地址 物理地址:又称绝对地址,即程序执行所使用的地址空间 处理器执行指令时按照物理地址进行 主存储器的复用 多道程序设计需要复用主存 按照分区复用: 主存划分为多个固定/可变尺寸的分区 一个程序/程序段占用一个分区 按照页架复用: 主存划分为多个固定大小的页架 一个程序/程序段占用多个页架 存储管理的基本模式 单连续存储管理:一维逻辑地址空间的程序占用一个主存固定分区或可变分区 段式存储管理:段式二维逻辑地址空间的程序占用多个主存可变分区 页式存储管理:一维逻辑地址空间的程序占用多个主存页架区 段页式存储管理:段式二维逻辑地址空间的程序占用多个主存页架区 存储管理的功能 地址转换 地址转换:又称重定位,即把逻辑地址转换成绝对地址 静态重定位:在程序装入内存时进行地址转换 由装入程序执行,早期小型OS使用 动态重定位:在CPU执行程序时进行地址转换 从效率出发,依赖硬件地址转换机构 主存储器空间的分配与去配 分配:进程装入主存时

第五周学习总结

橙三吉。 提交于 2020-02-19 23:24:29
信息安全系统设计基础第六周学习总结 【学习时间: 6 小时】 一、学习过程 1.一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构。 2.程序员可见的状态: Y86程序中的每条指令都会读取或者修改处理器状态中的某些部分。这称为程序员可见状态。 3.存储器:从概念上来说是一个很大的字节数组,保存着程序和数据。 4.程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态;它会指示是正常运行还是出现了某种异常。 5.Y86指令不允许从一个存储器地址到另一个存储器地址,也不允许从立即数到存储器。 6.halt指令停止指令的执行。并将状态码设置为HLT。 7.Y86利用绝对地址进行寻址,而且使用小端法编码。 8.指令集的一个重要性质就是字节编码必须有唯一的解释。 9.Stat包括四种状态,除了AOK表示正常执行外,其他状态都会导致处理器停止。在更完整的设计中,处理器通常都会调用一个异常处理程序。 10.Y86与IA32代码主要的区别就是,前者需要多条指令去执行一条IA32指令完成的功能。 11.以“.”开头的是汇编器命令,它们告诉汇编器调整地址,以便在那产生代码或者是插入一些数据。 12.指令模拟器YIS 目的是模拟Y86机器代码程序的执行,而不用试图去模拟任何具体处理器实现的行为。 13.将很多的逻辑门组合成一个网,就能构建计算块,称为组合电路。限制如下:

信息安全系统设计基础第五周学习总结

ε祈祈猫儿з 提交于 2020-02-19 23:07:54
第四章 处理器体系结构 4.1 Y86指令集体系结构 指令集体系结构,包括定义各种状态元素、指令集和他们的编码、一组编程规范和异常事件处理。 程序员可见的状态:Y86程序中的每条指令都会读取或修改处理器状态的某些部分。 8个程序寄存器:%eax、%ebx、%ecx、%edx、%esi、%edi、%esp、%ebp。存储一个字。 存储器:可以理解为很大的字节数组,保存着程序和数据。Y86用虚拟地址来引用存储器位置。 物理地址:硬件和操作系统软件联合将虚拟地址翻译成实际,指明数据实际保存在存储器的那个位置。 状态码Stat,表明程序执行的总体状态。 Y86指令:基本上是IA32指令集的一个子集。 指令编码 每条指令的第一个字节表明指令的类型。高四位是代码部分,第四位是功能部分。 !指令集的重要性质——字节编码必须有唯一的解释。 Y86异常 Y86程序 没有伸缩寻址模式; !以“.”开头的词是汇编器命令 YIS(指令集模拟器)目的是Y86机器程序代码的执行 一些Y86指令的详情 两个特别的指令组合需要注意! 4.2 逻辑设计和硬件控制语言HCL 逻辑门 AND &&. OR ||. NOT 组合电路——将很多逻辑门组合成一个网,构建计算块。 !两个限制: (1) 两个或多个逻辑门的输出不能连接在一起,否则它们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障; (2)

2月书单 《编码隐匿在计算机软硬件背后的语言》 17-20章

左心房为你撑大大i 提交于 2020-02-17 09:44:57
第17章 自动操作 人类是非常富于创造性而且是十分勤勉的,但是,人类在本质上也是十分懒惰的。非常明显,人类并不愿意去工作,这种对工作的反感导致人们用大量的时间来设计和制造可以把工作日缩短到几分钟的设备。幻想使人感到兴奋,甚至远比我们所看到新奇的事物更令人兴 奋得多。 享乐 ——锁定技,当你成为一名角色使用【杀】的目标后,除非该角色弃置一张基本牌,否则此【杀】对你无效。 本章将通过设计更精密的机器,使加减法运算更加自动化。 我们知道,人是很懒惰的,尤其讨厌做重复又无聊的任务,于是我们想外包给机器来帮我们完成无聊的累加。 设想一下,如果想把1 0 0个二进制数加起来,你就得坐在加法机前耐着性子输入每一个数字并累加起来。当你完成时,却发现有两个数字是输入错误的,你只好又重复全部的工作。但是如果我们先将数据存入RAM,再由CPU将数据进行运算,这样的话,数据修改就会方便得多。下图就是一个可行的模型。 但是这种电路也有很多问题:1.当计数器最终到达F F F F h时,它又会翻到0 0 0 0 h(就像汽车里程表)2.它只能用于加法,并且只能加8位数。 之后介绍了存储器与运算器的简单协同工作,以及初步介绍了汇编代码,比较简单,不予赘述。 第18章从算盘到芯片 纵观历史,人类发明了很多灵巧的工具和机器以满足广泛的需求,从而使数学运算变得更容易了些。虽然人类天生就有使用数字的能力

STM32F4x系列的DMA配置

不想你离开。 提交于 2020-02-15 20:47:28
以SPI2 为例,将存储器中的数据,通过DMA方式搬运到外设,DMA配置步骤: 1、选择DMA1还是DMA2:通过图1可查看到SPI2是在DMA1表里,所以选择DMA1。   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE); 2、选择数据流:该配置应该放在所有信息配置完在使能。   DMA_Cmd(DMAX_StreamY, ENABLE);   其中X = 1、2,Y=0、1…7,有两个DMA,分别是DMA1和DMA2,每个DMA控制器有又有8个数据流。   问题1:一个外设怎么知道选哪个数据流呢?   答:先查看参考手册,找到DMA1/2请求映射表,如下图1、2 图1 图2   比如现在用到外设SPI2_TX(存储器的数据搬运到外设,所以得找发送) ,选择数据流4。   DMA_Cmd(DMA1_Stream4, ENABLE); 3、通道选择,有8个通道,不是随便选择的,得查看图1和图2,SPI2外设所对应的通道0。   DMA_InitStructure.DMA_Channel = DMA_Channel_0; 4、设置外设基地址。   DMA_InitStructure.DMA_PeripheralBaseAddr = 0Xxxxx;    问题2:怎么知道当前选用外设的基地址?看人家例子都是写好了的,到时换其他外设

c语言指针

[亡魂溺海] 提交于 2020-02-15 07:50:02
1.计算机会为变量在存储器中分配空间。 2.局部变量位于栈中。 3.全局变量位于全局变量段。 4.指针只是一个保存“存储器”地址的变量。 5.&运算符可以找到变量的地址。 6.*运算符可以读取存储器地址中的内容 7.*运算符还可以设置存储器地址中的内容 如: int x = 3; int *address = &x; *address中保存的就是x变量的存储地址 通过&提取x的地址,保存在了*address中 #include <stdio.h> int main() { int x = 3; int *address = &x; // 打印结果:一样相等 printf("%p----%p", *address, x); return 0; } 讲解: &运算符用于接收一个数据并获取地址 而 *运算符则是用于接收一个地址并保存数据 c语言中的指针在其他语言中叫法为引用类型,*就算对于地址的解析,生成具体的值 相当于其他语言中的,引用地址的具体值 C语言中声明一个指针变量: 指针变量是什么呢? 答:用来保存内存地址的变量,相当于其他语言的引入地址传给函数假参 声明指针变量: int *名称(或标识符) = &变量; 如: int x = 3; int *address = &x; &提取了变量x的地址并赋值给了address变量,*就是接收地址来表示这是一个指针变量 这时如果你去改变