arm基础知识

2023-11-13

arm基础知识

基础:c语言 具有一定硬件基础

特点---》前后联系

arm目标:

看懂简单的汇编代码

会看电路图、芯片手册

学会如何用软件控制硬件思想

解决问题的办法

谈谈对嵌入式的理解?

计算应用为中心软硬件可裁剪的专用计算机系统对功耗、体积、性能,成本等有一定要求

特点:专用性强,专用的计算机;运行环境差异性大;比通用PC机资源少(适用性,够用就好);功耗低,体积小,集成度高,成本低;具有较长的生命周期

学习arm重点学习两方面:程序运行原理、硬件控制原理。

计算机基本理论

计算机系统中用高、低电平来表示逻辑1和0

数据在计算机中的存储、传输、运算(对数据的处理方式)都是以二进制的形式进行的

数据的传输通过总线真正传递的是电信号,高低电平(0、1)。内存只有高低电平。运算在电路中运行的,集成电路中完成运算。

计算机的组成

输入设备、输出设备、存储器、运算器、控制器共同组成了cpu

1.输入设备将其他信号转换为计算机可以识别的信号(电信号) 。

2.输出设备将电信号(0、1)转为人或其他设备能理解的信号。

3.存储器存放程序和数据的部件,也是计算机能够实现“存储程序控制”的基础。

程序:指令的有序集合 //汇编指令

特点:

        有穷性:算法必须保证在执行有限步骤后结束。

        可行性:算法是确切可行的,即使在数学中,该算法可行,但若在实际应用中,程序不可以被执行,那么 ,该算法也是不具有可行性的。

        确切性:算法的每一个步骤必须具有明确的意义。

        输入:一个算法必须要有0个或多个输入。输出:一个算法必须要有1个或多个输出。

ROM: flash (EMMC)、磁盘空间 、掉电不丢失数据 只读寄存器

RAM: 内存、掉电丢失数据 随机存储器

+ -->求和指令

32为操作系统,寻址为32位。寻址空间位2^32,4G一个32根总线。裸机只能执行一条任务要想执行其他任务需要借助中断,如过有8G那么就会浪费掉4G空间

4.运算器CPU对信息处理和运算的部件,常进行算术运算和逻辑运算,其核心是算术逻辑单元ALUCPU中用各种各样的数字电路搭配成各种各样的运算电路,如:加法、减法等。

如加法运算器:

程序存放在磁盘空间 但当他被运行时会加载到内存条上 因为再讲库的时候说过静态库会被加载一次 当动态库会被加载两次 所以每次程序运行时都会被加载到内存条上 然后当我要去执行的时候 要去内存条上把这些程序的有序的指令 拿过去然后cpu通过译码器解析

5.控制器整个计算机的指挥中心

重点想学习的是:程序运行的原理

思考:

1.如果有一个运算程序3*3 但是cpu中没有乘法运算器会怎么处理

        会把3*3解析成3+3+3用加法运算器来运算

2.游戏本为什么性能好 

        因为他的运算器多所以运算速度快 缺点就是体积较大

3.运算器不同(说明指令集不同),处理指令不同,及对应指令集不同。不同的处理器上如何运行同一个c语言程序?

(几个U就是几核就是有几个cpu 相当于有几个人再给你打工  不同的cpu指令集不同)

指令的解析

一条指令(机器码)的执行通常分为三个阶段:

1)取指:控制器将PC寄存器中的值发送给内存,内存将对应地址中的指令(机器码)传送回CPU的指令寄存器IR中
2)译码:指令译码器对IR中的指令进行识别,即将指令(机器码)翻译成具体的运算操作(+/-/*...)
3)执行:运算器执行对应的指令并将结果写入寄存器

 执行完一条指令后CPU内对应的硬件会将PC的值自动增加使PC指向内存中的下一条指令

  • 指令的执行是按照流水线
  • 取指--》取指器 根据PC值取指令
  • 译码--》译码器
  • 执行--》执行器

以上三个器件,都是单周期的器件,三个器件的工作是独立,

指令1 指令2 指令3 指令4 指令5

1 取指

2 译码 取指

3 执行 译码 取指

4 执行 译码 取指

5 执行 译码 取指

6 执行 译码

7 执行

  • PC永远指向当前正在取指指令的地址,一旦取到指令,pc后移4byte,保存下一条指令地址。

编译原理

C语言写的代码想在不同的计算机上运行 为什么需要编译器

CPU能够识别的唯一的语言是机器码,一个CPU能够识别哪些机器码是由处理器的硬件(运算器种类)决定的不同的机器码代表不同的运算,同样不同的CPU的机器码是不通用的即不可以移植,汇编是用一个标识符来代表一个机器码,所以不同的CPU汇编也不一样,即汇编语言不可以移植。

C语言编译的时候我们可以使用不同的编译器将C编译成不同的汇编和机器码,所以C可以不依赖CPU架构

总结面试题:

1.指令解析的过程

2.为什么不同处理器,要用不同的编译器编译程序代码?编译原理

ARM相关知识介绍

1.认识ARM

  • ARM含义?

        1. ARM代表一个公司

        2. ARM表示一种技术

        3. ARM可以表示一些处理器的统称

  • 架构:

         m-v4,arm-v5,arm-v6,arm-v7(32Bits),arm-v8(64Bits)

        架构指支持的汇编指令集 架构不同指令集也不同

  • 内核:

        cortex-a9,a53,a73,a77

        ARM公司授权芯片的公司,芯片产家在内核的基础上,增加了一些外设,发布一款芯片,这些芯片可以统称为SOC

  • SOC:

        System Of Chip:片上系统),S5P6818,骁龙855(高通),麒麟990(海思)

s5p6818:

  • ARM的发展历史

                1. 1978年,CPU公司

                Cambridge processing Unit(剑桥仓库)

                2. 1979年 Acorn(组装计算机)

                3. 1985年, 32位,8MHz,

                        使用的精简指令集RISC

                        芯片的名字ARM ----》 Acorn RISC machine(爱康精简指令集计算机)

                4.1990年,

                        iphone 150万英镑 VLSI: 25万英镑

                        12工程师+技术专利:150万英镑

                        ARM公司-》 Advanced RISC Machine(高级精简指令集计算机)

                        ARM公司不生产芯片,做技术的授权,提供解决方案。

                        例如:小米手机(买了高通芯片+UI+摄像头优化等)

                5. 2016年,日本软银收购

  • 指令集

  • 精简指令集(RISC)-->微处理器

        在复杂指令集里边选取了一些比较简单,使用频率较高的指令

        指令的宽度固定,多为单周期指令。

                举例:如有加法运算器 ,没有乘法运算器 3*3 ---》3+3+3

  • 复杂指令集(CISC)-->电脑CPU

             注重的指令的功能性,指令的周期,指令的宽度不固定

        eg精简:可以编译后,用反汇编查看代码指令。

                使用交叉编译工具编译程序,生成arm的可执行程序

                arm-linux-gnueabinf-gcc 1.c

                file a.out -->查看可执行文件属性

                使用反汇编的命令将elf文件转换为反汇编文件.dis

                arm-linux-gnueabinf-objdump -D a.out > a.dis

       查看ubuntu复杂指令集的指令:

                gcc 1.c --->编译生成a.out可执行文件

                file a.out 查看文件属性

                objdump -D a.out > a.dis ---->反汇编

  • ARM公司产品分布

  • Cortex-A:

        高通,联发科,海思,三星,飞思卡尔、面向尖端的基于虚拟内存的操作系统和用户应用。

  • Cortex-R:

        实时处理器为要求可靠性、容错功能和实时响应的嵌入式系统,提供高性能解决方案。汽车电子,照相机摄像机。

  • Cortex-M:单片机

        针对成本和功耗敏感的MCU和终端应用,一般不跑操作系统,可以运行实时操作系统:FreeRTOS,uCosII,LiteOS(华为),意法半导体(ST)STM32系列

  • ARM体系结构:

    • ARM-v8(A)--->Cortex-A53(8核)-->S5P6818 主频:1.4GHZ

  • ARM数据类型的约定

        ARM-v7架构:32bit处理器

  • char:8位
  • halfword:16位
  • word:32位
  • doubleword:64位(cortex-a)

ARM-v8架构:64bit处理器 ,向下兼容32位(我们学习32位)

  • char:8位
  • halfword:16位
  • word:32位
  • doubleword:64位(cortex-a)
  • quadword:128位(ARM-v8)

  • 处理器的32位和64位什么含义?
  • 32位:一条指令可以进行32位数据的运算
  • 64位:一条指令可以进行64位数据的运算

  • 大部分ARM core 提供:

ARM-v7架构:

  • ARM 指令集(32-bit)

        一条指令占32位内存空间

  • Thumb 指令集(16-bit )

        一条指令占16位内存空间

ARM-V8:向下兼容ARM-v7架构

  • ARM指令集:A64,A32
  • Thumb指令集:T32,T16
  • 不管是A64还是A32,每条指令都占32位空间
  • 不管是T32还是T16,每条指令都占16位空间

ARM-v7:

        ARM指令集:A32

        Thumb指令集:T16

        ARM指令集功能更全,性能更高

        thumb指令集比ARM指令集指令密度要大

  • ARM处理器的工作模式

        ARM内核的命名规格历史

        ARM7 ARM9 ARM10 ARM11 ,ARM11之后,命名规格改变

        Cortex-A9 A53 A75

        ARM7-11 有7种基本工作模式:

  •         User : 非特权模式,大部分任务执行在这种模式
    • FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式
    • IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式

        FIQ和IRQ打断当前正在做的事去做其他的事情,做了再回来继续做自己的事情。鼠标键盘等都是这样实现的。(Linux内核会有中断,驱动写中断驱动代码)

中断的概念:

  • Supervisor(SVC) : 当复位或软中断指令执行时将会进入这种模式

 (任务的切换会切入这个模式,权限最高的模式,刚启动的时候在这个模式下,权限高,可以做一些核心的操作。进行系统调用的时候会切换这个模式。)

  • Abort : 当指令存取异常时将会进入这种模式
  • Undef : 当执行未定义指令时会进入这种模式(执行乘法没有乘法运算器也没有可代替的)
  • System : 使用和User模式相同寄存器集的特权模式

        保证不同任务每次调用同一个函数都是从头开始。

Cortex-A特有模式:

  • Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;

        也是一种特权模式

特定的模式拥有特定的权限,执行特定的代码,完成特定的功能

  • CPU(内核)组成:

  • 运算器

        加法运算 --》加法器 --》加法指令

  • 控制器
  • 存储器---》REG Register:此寄存器由ARM公司集成到CPU的内部来存放机器码
  •         A32:每个寄存器可以存储一个32位数据
    • A64:每个寄存器可以存储一个64位数据

总结:

  • ARM7,9,11 有37个32-Bits长的寄存器
  • 1 个用作PC( program counter)
  • 1个用作CPSR(current program status register)
  • 5个用作SPSR(saved program status registers)
  • 30 个通用寄存器
  • Cortex-A多出3个寄存器及有40个32-Bits长的寄存器
  • Monitor 模式 r13_mon , r14_mon, spsr_mon
  • R0-r15, CPSR,SPSR 这些寄存器是由ARM公司提供,每个寄存器都是32位的。

这些寄存器没有地址,只有一个唯一的编号,通过这些编号,就可以访问对应的地址空间。R0- R15,cpsr,spsr就是对应的编号,每个编号都对应的几位二进制?32

  • R13:栈指针寄存器

        the stack pointer, sp

        存放栈顶的地址

  • R14:链接寄存器

        the link register, lr

  • 函数调用时,保存返回地址

(保存调用函对应指令的下一条指令地址,返回的时候把lr值给pc,可以继续执行接下来的代码)

  • R15:程序计数寄存器

        the program counter, pc

  • 存放当前取指指令的地址

cpu从内存中一条一条的拿指令(取值)

  • CPSR:当前程序状态寄存器
  • 存储当前程序运行状态

current program status register, cpsr

第五位的T状态为的含义 一旦你被切换到异常模式或者其他模式他会让你强制切换到微秒的arm模式 用arm指令集处理

第六位和第七位中断禁止的含义 如果没有禁止就会来一个中断去处理中断中又有中断再去处理然后再回来执行当前程序 要是中断过多就可能没法回来,把他禁止的话就是当前只执行一个中断这个中断处理完再去执行其他中断,防止中断叠加。

NZCV这几位叫条件位,后边八位叫控制位(C表示)

  • SPSR:保存程序状态的寄存器

        saved program status register

  • 用于保存cpsr

  • 时钟:负责发出CPU开始计时的时钟信号。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

arm基础知识 的相关文章

  • linux嵌入式开发常用下载链接

    linux kernel ARM 开源wike ARM GNU编译工具链下载
  • NXP i.MX6ULL 移植python3.9.5

    项目场景 在眺望电子TW AC6G EVM开发板上移植python3 9 5 编译环境及开发包 主机 ubuntu18 04 交叉编译器 arm linux gnueabihf gcc QT5 12 8 qt everywhere open
  • BES 的蓝牙串口SPP数据收发实验

    1
  • 数字电路的时序分析

    记录一下时序分析的学习 首先搞清楚以下时序分析时用到的名词 记录一下时序分析的学习 1 什么是setup time和hold time 为什么需要setup time和hold time 2 时序路径是什么 有哪些时序路径 3 如何分析时序
  • 33.输入捕获原理与配置

    输入捕获原理与配置 参考资料 STM32Fx开发板 STM32Fx开发指南 HAL库版本 第x章 输入捕获实验 STM32Fxx官方资料 STM32Fxx中文参考手册 第x章 通用定时器 笔记基于正点原子官方视频 视频连接https www
  • Win系统下安装Linux双系统教程(非常详细)从零基础入门到精通,看完这一篇就够了

    软件下载 软件 Linux 版本 18 0 4 语言 简体中文 大小 1 82G 安装环境 Win11 Win10 Win8 Win7 硬件要求 CPU 2 0GHz 内存 4G 或更高 下载通道 丨百度网盘 1 ubuntu18 0 4下
  • cmake 报错

    目录 错误 原因 错误 The C compiler identification is unknown The CXX compiler identification is unknown CMake Error at CMakeList
  • 【数据手册】LM1117L3芯片的使用

    1 特征 可调或固定输出 1A输出电流 低损耗 在1A输出电流时最大电压为1 3V 0 04 的线路调节 0 2 负载调节 100 热极限燃烧 快速瞬态响应 2 描述 LM1117系列正可调和固定调节器设计提供1A高电流效率 所有内部电路设
  • arm汇编指令详细整理及实例详解

    目录 一 简介 二 ARM 汇编指令说明 2 1 32位数据操作指令 2 2 32位存储器数据传送指令 2 3 32位转移指令 2 4 其它32位指令 三 实例讲解 3 1 MRS 3 2 MSR 3 3 PRIMASK 3 4 FAULT
  • ubuntu1604 虚拟机启动仅只有桌面文件和壁纸,ctrl+alt+t打不开终端解决办法

    使用ctrl alt f1进入tty命令模式 然后登陆账号密码 最后输入sudo sevice lightdm restart 这样就可以重启桌面 如果还是不行的话就重新装unity sudo apt get update sudo apt
  • 【GD32F303开发之开发工具的安装与配置】

    GD32F303开发系列文章目录 第一章 GD32微控制器开发工具的安装与配置 第二章 GD32基准工程实验 第三章 GD32串口通信实验 第四章 GD32EXMC与LCD显示实验 文章目录 GD32F303开发系列文章目录 前言 一 GD
  • RTL8762DK PWM(七)

    概述 本示例 只要介绍 如何使用PWM 又离成功进了一步 一 环境 1 硬件 RTL8762DK 128M Bits Falsh 2 软件 keil IDE 二 PWM的使用 1 创建examples ble pwm工程 基于 exampl
  • 01_I.MX6U芯片简介

    目录 I MX6芯片简介 Corterx A7架构简介 Cortex A处理器运行模型 Cortex A 寄存器组 IMX6U IO表示形式 I MX6芯片简介 ARM Cortex A7内核可达900 MHz 128 KB L2缓存 并行
  • 【buildroot】buildroot使用总结

    文章目录 一 buildroot使用步骤 1 构建图形配置界面 2 配置Target options 3 配置Build options 4 配置Toolchain 5 配置 System configuration 6 配置 Filesy
  • Linux学习第17天:pinctrl和gpio子系统开发:由0到1

    Linux版本号4 1 15 芯片I MX6ULL 大叔学Linux 品人间百味 思文短情长 本篇笔记的题目为 pinctrl和gpio子系统开发 由0到1 做嵌入式系统开发 肯定经历过单片机 ARM Linux这么一个过程 这是一个8位单
  • ARM学习系列 ---- ARM NEON

    ARM学习系列 ARM NEON 1 NEON概述 1 1 简介 NEON是指适用于Arm Cortex A系列处理器的一种高级SIMD 单指令多数据 扩展指令集 可执行并行数据处理 1 2 发展历史 arm v6 SIMD扩展 arm v
  • 在ubuntu20.04上安装arm-linux-gcc 4.4.3

    1下载地址 http www friendlyelec com cn download asp 2 将 arm linux gcc 4 4 3 tar gz 拷贝到 bin目录 无法拷贝怎么办 出现这种情况是 Linux 拷贝文件时权限不够
  • IIC UART SPI通信协议介绍

    UART 通用一部收发器 是一种通用的串行 异步通信总线该总线有两条数据线 可以实现全双工的发送和接收 在嵌入式系统中常用于主机与辅助设备之间的通信 波特率 波特率用于描述UART通信时的通信速度 单位为bps bit per second
  • linux应用程序直接return与exit的区别

    在Linux应用程序中 可以使用 return 语句直接从 main 函数返回 这将导致程序终止并返回给操作系统 然而 有时候使用 exit 函数比直接使用 return 语句更有优势 以下是一些原因 清理资源 exit 函数可以确保在程序
  • 移植useradd到嵌入式Linux设备

    友情提示 前面一大段描述的是在老版本Ubuntu14 4交叉编译新版本shadow 过程曲折 没有结果 分割线后面一段是重新换了一个较老版本shadow 4 4 过程丝滑 结果喜人 诸君如耐心有限可直接划拉至分割线后部分内容 对于其他程序的

随机推荐

  • C语言——打鱼晒网问题

    一 实例说明 如果一个渔夫从 2011 年 1 月 1 日开始每三天打一次渔 两天晒一次网 编程实现当输入 2011 年1月1日以后的任意一天 输出该渔夫是在打渔还是在晒网 二 实现代码 include
  • SCORE-BASED GENERATIVE MODELING THROUGH STOCHASTIC DIFFERENTIAL EQUATIONS 阅读笔记

    文章提出了一个基于随机微分方程的生成模型 Denoising Score Matching with Annealed Langevin Sampling SMLD 和 Denoising Diffusion Probabilistic M
  • prometheus + grafana 实时监控 Windows性能

    Prometheus 实时监控 Windows性能 Prometheus 简介 Prometheus 具有以下特点 Prometheus 组件 Prometheus功能特性 在业务层用作埋点系统 在应用层用作应用监控系统 在系统层用作系统监
  • 在运用tf_ops算子时出现InvalidArgumentError (see above for traceback): No OpKernel was registered to support

    在运用tf ops算子时出现InvalidArgumentError see above for traceback No OpKernel was registered to support Op FarthestPointSample
  • C++从入门到放弃之:C++ 模板之自制容器

    自制链表容器 1 include
  • DNS递归查询和迭代查询的区别

    1 递归查询 递归查询是由DNS 服务器主动帮主机查询的查询模式 在该模式下本地DNS 服务器接收到主机的请求 如果本地DNS 服务器没有存储相关的DNS 信息 那么该DNS 服务器会询问其他DNS 服务器 以此类推 最后不管成功与否 都将
  • 2020ciscn wp

    目录 1 签到电台 2 基于挑战码的双向认证 1 2 3 web Ezpo 4 基于挑战码的双向认证3 5 ISO9798 6 问卷调查 7 ez usb 8 login nomal 1 签到电台 操作内容 根据公众号提示 知道了模十的算法
  • SeleniumLibrary4.5.0 关键字详解(八)

    SeleniumLibrary4 5 0 关键字详解 八 库版本 4 5 0 库范围 全局 命名参数 受支持 简介 SeleniumLibrary是Robot Framework的Web测试库 本文档说明了如何使用SeleniumLibra
  • Zigbee协议栈(CC2530开发板) 修改发射功率

    Zigbee协议栈 CC2530开发板 修改发射功率 2010 12 07 15 11 43 分类 Zigbee 标签 zigbee 协议栈 发射功率 字号 订阅 CC2530 控制输出功率的寄存器是 TXPOWER 推荐功率设置 协议栈默
  • 矩阵求导——Numerator Layout & Denominator Layout

    突然想起这个问题了 刚刚看到有人在问某个的公式 自己闷头想了想居然都忘的差不多了 于是乎稍微整理一下供以后参考 其实 关于矩阵求导讲的最详细的还是wiki上的页面面http en wikipedia org wiki Matrix calc
  • 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器

    1 概述 翻译 http janino compiler github io janino janino as a 20compiler Janino 是一个超小 超快的 Java 编译器 Janino不仅可以像JAVAC一样将一组源文件编
  • Echarts特殊用法总结

    最近做了一个微信公众号项目 使用Echarts绘制降雨量曲线 水库水位及库容曲线 大坝断面监测等图表 通过查阅官方文档及示例 度娘 与Echarts的距离更近了一步 总结一下 不能直接在官网上找到答案的用法 有以下几处 x轴为value类型
  • JavaScript DOM和BOM

    目录 查找html元素 1 通过id 2 通过标签名 3 通过类名 DOM 1 创建动态的HTML内容 2 修改元素内容 3 改变HTML属性 4 改变css样式 DOM事件 DOM节点 1 添加HTML元素 2 删除HTML元素 浏览器对
  • nginx学习记录(一) 认识、了解

    本文记录个人学习nginx的学习笔记 方便自己日后查看 也希望各位大佬看到有什么不对可以指点一二 一 什么是nginx 基本介绍 Nginx 是一款轻量级的 Web 服务器 反向代理服务器 电子邮件 IMAP POP3 代理服务器 在BSD
  • 使用SVG绘制带箭头的线

  • 小程序实现小窗功能

    效果图 正常情况下 正常退出直播间后 可添加官方支持的小窗展示功能 小窗使用过程中 不会影响其他界面的使用 共存状态 用户端 主播段 异常情况下 1 当长时间悬挂小窗后 或者主播网络出问题的情况下 小窗会有加载loadding 点击进入直播
  • word中插入公式实现换行和对齐

    一 准备阶段 默认Unicode模式 进入公式编辑模式 输入 eqarray 紧接着按下空格键输入空格 如下 二 实现换行和对齐 将要编辑的公式输入到括号内 实现位置对齐 实现换行 三 结束公式编辑 输入完所有公式后 输入右括号 紧接着按下
  • 漂亮的表格样式(使用CSS样式表控制表格样式)

    依照WEB2 0风格 设计了几个表格样式 希望大家喜欢 WEB2 0提倡使用div开布局 但不是要完全放弃使用表格 表格在数据展现方面还是不错的选择 现在使用介绍使用CSS样式表来控制 美化表格的方法 lt html xmlns http
  • 蓝桥杯嵌入式创建第一个工程(点亮led灯)

    蓝桥杯嵌入式创建第一个工程 点亮led灯 一 keil导入stm32G431RX板级芯片包 1 1 下载板级芯片包 1 2 导入芯片包 1 2 1 我们首先打开keil 点击Pack installer 如图 1 2 2 然后选中file
  • arm基础知识

    目录 arm基础知识 谈谈对嵌入式的理解 计算机基本理论 计算机的组成 指令的解析 编译原理 ARM相关知识介绍 1 认识ARM ARM含义 架构 内核 SOC ARM的发展历史 指令集 ARM公司产品分布 ARM体系结构 ARM v8 A