状态寄存器

微处理器寄存器结构(通用寄存器、指针和状态寄存器)

我的梦境 提交于 2019-12-22 15:04:07
寄存器可以分为两大类,一类为通用寄存器,一类为指针寄存器和变址寄存器。 通用寄存器 通用寄存器主要包括:EAX、EBX、ECX、EDX EAX Accumulator 累加器,其中EAX(32位)、AH(16位)、AX,AL(8位) 累加器用作乘除法时由特殊用途,但通常情况下视为通用寄存器 EBX Base 基址寄存器,其中EBX(32位)、BH(16位)、BX,BL(8位) 基址寄存器用作存放访问存储单元的偏移地址 ECX Count 计数器,其中ECX(32位)、CH(16位)、CX,CL(8位) CL用于移位和循环移位计数,CX用作重复的串操作指令计数,CX或ECX用作LOOP/LOOPD计数 EDX Data 数据寄存器,其中EDX(32位)、DH(16位)、DX,DL(8位) 数据寄存器是一个用用寄存器,在乘除法运算时也可用于记录部分积和部分被除数 指针寄存器和变址寄存器 指针寄存器和变址寄存器包括:ESP、EBP、ESI、EDI ESP Stack Pointer 堆栈指针寄存器,该指针用于存储堆栈存储器数据 EBP Base Pointer 基址指针寄存器,该指针用于存放堆栈段的数据区的“基地址” ESI Source Index 源变址指针寄存器,用于寻址串操作指令的源数据串 EDI Destination Index 目的变址指针寄存器

sd卡驱动

有些话、适合烂在心里 提交于 2019-12-21 20:48:53
linux设备驱动那点事儿之SD卡驱动理论篇 (2011-08-01 13:56) 标签 : 电子产品 多媒体 存储器 消费类 分类: linux设备驱动程序分析 一.SD/MMC卡介绍 1.1.什么是MMC卡 MMC:MMC就是MultiMediaCard的缩写,即多媒体卡。它是一种非易失性存储器件,体积小巧(24mm*32mm*1.4mm),容量大,耗电量低,传输速度快,广泛应用于消费类电子产品中。 1.2.什么是SD卡 SD:SD卡为Secure Digital Memory Card, 即安全数码卡。它在MMC的基础上发展而来,增加了两个主要特色:SD卡强调数据的安全安全,可以设定所储存的 使用权限,防止数据被他人复制;另外一个特色就是传输速度比2.11版的MMC卡快。在数据传输和物理规范上,SD卡(24mm*32mm*2.1mm,比MMC卡更厚一点),向前兼容了MMC卡.所有支持SD卡的设备也支持MMC卡。SD卡和2.11版的MMC卡完全兼容。 1.3.什么是SDIO SDIO:SDIO是在SD标准上定义了一种外设接口,它和SD卡规范间的一个重要区别是增加了低速标准。在SDIO卡只需要SPI和1位SD传输模式。低速卡的目标应用是以最小的硬件开销支持低速IO能力。 1.4.什么是MCI MCI:MCI是Multimedia Card Interface的简称,即多媒体卡接口

ARM处理器和体系结构介绍(Cortex-A9)

↘锁芯ラ 提交于 2019-12-21 18:07:29
ARM(Advanced RISC Machines) 概述 :有三种含义,它是一个公司的名称,是一类微处理器的通称,还是一种技术的名称。 技术特征 体积小、低功耗、低成本、高性能。 支持Thumb(16位)/ARM(32位)双指令集,能很好地兼容8/16位器件。 大量使用寄存器,指令执行速度更快。 大多数数据操作都在寄存器中完成。 寻址方式灵活简单,执行效率高。 指令长度固定。 嵌入式RISC微处理器 概述 :RISC(Reduced Instruction Set Computer)是精简指令集计算机,RISC把着眼点放在如何使计算机的结构更加简单和如何使计算机的处理速度更加快速上。RISC选取了使用频率最高的简单指令,抛弃复杂指令,固定指令长度,减少指令格式和寻址方式,不用或少用微码控制。 嵌入式CISC微处理器 概述 :传统的复杂指令级计算机(CISC)更侧重于硬件执行指令的功能性,使CISC指令及处理器的硬件结构更加复杂。 RISC和CISC的区别 ARM的基本数据类型 ARM采用32位架构,ARM的基本数据类型有以下3种。 Byte:字节,8bit。 Halfword:半字,16bit(半字必须与2字节边界对齐)。 Word:字,32bit(字必须与4字节边界对齐)。 注意 ARM 系统结构 v4 以上版本支持以上3种数据类型,v4 以前版本仅支持字节和字。

计算机基础系列一:计算机硬件

 ̄綄美尐妖づ 提交于 2019-12-21 04:41:30
一 为何要学习计算机基础 python是编程语言,即python是语言 语言有英语、法语、葡萄牙语等,但凡是语言,都是用来沟通的介质。 程序员编程的本质就是让计算机去工作,而编程语言就是程序员与计算机沟通的介质 程序员要想让计算机工作,必须知道计算机能干什么,怎么干的,这也就是我们必须学习计算机基础的原因 然而光有编程语言和硬件也并不能满足大家的编程需求,为什么这么说呢? 程序用编程语言写程序,最终开发出的结果就是一个软件,既然是软件,那就与腾讯qq、暴风影音、快播等软件没有区别了。这些软件必须运行在操作系统之上,你肯定会问:为何要有操作系统呢?没错,远古时代的程序员确实是在没有操作系统的环境下,用编程语言之间操作硬件来编程的,你可能觉得这没有问题,但其实问题是相当严重的,因为此时你必须掌握如何操作硬件的所有具体细节,比如如何具体操作硬盘(现在你得把硬盘拆开,然后你能看见的所有的东西,你都得研究明白,因为你编程时要用到它),这就严重影响了开发的效率,操作系统的出现就是运行于硬件之上,来控制硬件的,我们开发时,只需要调用操作系统为我们提供的简单而优雅的接口就可以了 所以一套完整的计算机系统分为:计算机硬件,操作系统,应用软件,如下图。因而我们的python编程之路分为计算机硬件基础,操作系统基础,和python编程三部分,就让我们先从计算机硬件学起吧 二 本节目标

计算机基础

早过忘川 提交于 2019-12-20 20:08:20
计算机系统分为:计算机硬件,操作系统,软件 一 编程语言的作用及与操作系统和硬件的关系: 1.编程语言的作用:用来定义计算机程序的形式语言,用来向计算机发出指令。 2.关系:硬件是基础,操作系统是用来管理硬件资源的。 二 应用程序&操作系统&硬件 1.硬件系统 :运算器+控制器+存储器+输入设备+输出设备 运算器:是负责算数运算与逻辑运算。 控制器:是负责发送和接收指令。与控制器共同组成了中央处理器(CPU)。 存储器:是用来存储正在进行程序,将要进行程序的数据及刚处理完的数据。 输入设备:是用来进行输入的设备。如键盘,扫描仪等。 输出设备:是用来进行输出的设备。如显示器,音箱等。 主板:安装了组成计算机的主要电路系统,一般有BIOS芯片,I/O控制芯片,键和面板开关接口,指示灯插接件,扩充插槽,主板及插卡的直流电源供电接插件等元件。 总线:以上所有的设备都通过总线连接,总线相当于人的神经。 2.操作系统:操作系统是控制和管理计算机软硬件资源、合理组织计算机工作流程,以及方便用户操作的程序集合。它的职责常包括对硬件的直接监管、对各种计算资源(如内存、处理器时间等)的管理、以及提供诸如作业管理之类的面向应用程序的服务等等。简单的说;操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。 3.应用程序:指为完成某项或多项特定工作的计算机程序,它运行在用户模式

数字SOC设计之低功耗设计入门(七)——门级电路低功耗设计优化(续)

只愿长相守 提交于 2019-12-20 17:25:48
前面讲解了门级功耗的优化方法,包括静动态和总体的功耗。现在来记录一下门级层次(有点书也说是在系统级)常用的一种低功耗方法—— 电源门控 。 ①电源门控概述与原理   电源门控是指芯片中某个区域的供电电源被关掉,即该区域内的逻辑电路的供电电源断开。电源门控(Power Gating)的设计如下图所示:              如果某一模块在一段时间内不工作,可以关掉它的供电电源(关掉供电电源可以使用MTCMOS开关,通常在使用后端工具进行布局布线时加入MTCMOS,这属于后端知识,这里不进行介绍)。断电后,设计进入睡眠模式,其漏电功率很小。唤醒时,为了使模块尽快恢复工作模式,需要保持关电前的状态。 保持寄存器 (retention register)可用于记忆状态。使用保持寄存器设计电源门控如下图所示:              下面来解释一下上面的设计:   ·在睡眠模式,寄存器的电源 Vdd2被切断 ,因此它的漏电功耗极小;这时候仅仅保持锁存器处于工作状态,寄存器的值保留在锁存器里。由于锁存器是用 高阈值电压 的晶体管组成,漏电功耗很低。   ·当Restore信号被激活时,寄存器的电源Vdd2被加上,保留在锁存器里的值被载入到寄存器。寄存器在工作(活跃)状态时,它作为一般的寄存器工作。 Save/Restore引脚也称为电源门控引脚(power gating pins)

stm32寄存器版学习笔记01 GPIO口的配置(LED、按键)

≯℡__Kan透↙ 提交于 2019-12-19 02:18:20
  STM32的I/O口可以由软件配置成如下8种模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能及开漏复用功能。每个I/O口由7个寄存器来控制:配置模式的端口配置寄存器CRL和CRH(模式、速度);数据寄存器IDR和ODR;置位/复位寄存器BSRR;复位寄存器BRR;锁存寄存器LCKR。 I/O口模式: GPIO的8种模式 通用输出 推挽输出(Push-Pull) 可以输出高、低电平,连接数字器件 开漏输出(Open-Drain) 开漏引脚不连接外部的上拉电阻时,只能输出低电平;如果需要同时具备输出高电平的功能,则需要接上拉电阻 复用功能输出 复用功能推挽输出 片内外设功能(I2C的SCL,SDA) GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用) 复用功能开漏输出 片内外设功能(TX1,MOSI,MISO,SCK,SS) 输入 模拟输入 应用ADC模拟输入,或者低功耗下省电 浮空输入 可以做KEY识别,外部按键输入 IO的电平状态是不确定,完全由外部输入决定 下拉输入 IO内部下拉电阻输入 不确定信号->低电平 上拉输入 IO内部上拉电阻输入 不确定信号->高电平    1.GPIO口配置步骤 ①使能PORTx(x=A~G)   APB2外设时钟使能寄存器(RCC_APB2ENR) 置1开启。清0关闭。 8-2位使能GPIO G-A

系统调用

痞子三分冷 提交于 2019-12-18 22:57:29
由前2篇文章做基础,现在可以理解系统调用了。 用户空间栈&系统空间栈 中断&异常 系统调用定义 系统调用是内核提供的一系列强大的函数。它们在内核中实现,然后通过一定的方式(X86是软中断,也即门陷入)呈现给用户,是用户程序与内核交互的接口。 注意,我们在程序中用调用read、write函数时,这些不是系统调用函数,而是glibc库包装后,进行一些处理,然后再调用系统调用。如果想在程序中直接调用 的 话,需要调用_syscall()函数。 上下文(context) 上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。 一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。 用户级上下文: 正文、数据、用户堆栈以及共享存储区; 寄存器上下文: 通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP); 系统级上下文: 进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。 当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的模式 切换(mode switch)

volatile的作用

前提是你 提交于 2019-12-17 11:08:41
[转] http://blog.21ic.com/user1/2949/archives/2007/35599.html   一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。 假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。 1). 一个参数既可以是const还可以是volatile吗?解释为什么。 2). 一个指针可以是volatile 吗?解释为什么。 3). 下面的函数有什么错误: int square(volatile int *ptr) { return *ptr * *ptr; }

《30天自制操作系统》笔记(12)——多任务入门

大兔子大兔子 提交于 2019-12-16 23:42:14
《30天自制操作系统》笔记(12)——多任务入门 进度回顾 上一篇 介绍了设置显示器高分辨率的方法。本篇讲一下操作系统实现多任务的方法。 什么是多任务 对程序员来说,也许这是废话,不过还是说清楚比较好。 多任务就是让电脑 同时 运行多个程序(如一边写代码一边听音乐一边下载电影)。 电脑的CPU只有固定有限的那么一个或几个, 不可能 真的同时运行多个程序。所以就用近似的方式,让多个程序 轮换 着运行。当轮换速度够快(0.01秒),给人的 感觉 就是"同时"运行了。 多任务之不实用版 我们首先从最基本的想法开始,做一个不实用版的多任务作为例子。在学习这个例子的过程中引入真正的多任务必须的TSS、TR、far模式JMP的概念,为后续内容打基础。 当你向CPU发出任务切换的指令时,CPU会先把寄存器中的值全部 写入 内存某处;然后,从内存另一位置把所有寄存器的值 读取 出来。这就完成了一次任务切换。 任务切换消耗的时间就是读写内存消耗的时间,大概为 0.0001秒 。 任务状态段TSS 存取全部寄存器的值这件事,当然需要有一个数据结构,这就是 "任务状态段" (Task Status Segment)简称TSS。 1 struct TSS32 2 { 3 int backlink, esp0, ss0, esp1, ss1, esp2, ss2, cr3; 4 int eip,