ARM———第一天

2023-05-16

1.为什么学习ARM?
嵌入式:操作硬件的软件
嵌入式系统分两大类:1.应用程序+硬件
2.应用程序+操作系统+硬件
ARM是学习嵌入式的入门,也是学习系统移植和驱动的基础
2.学习目标
用c语言控制硬件工作
1.应用程序如何启动起来
2.应用程序在哪里编辑和编译的,又是如何运行到板子上的
3.硬件的工作原理
4.会查看原理图和芯片手册

1.预备知识
0:低电平 1:高电平
二极管:单向导通,一般用作开关
三极管:电流放大,小电流控制大电流,开关
在这里插入图片描述场效应管:电压放大
在这里插入图片描述

门电路:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
计算机的硬件组成部分
1、输入输出设备 IO设备
2、存储器
1、寄存器 cpu内部
2、内存 掉电丢失数据
3、外存 掉电不丢失数据
4、cache 高速缓存
在这里插入图片描述

volatile:防止编译器优化
编译器优化:将变量的值拷一个备份到cache中,cpu要想访问这个变量,直接到cache中取就行,不用去内存了,程序的运行速度会变快
编译器不优化:变量的值不会有cache的备份,每一次访问这个变量都需要去内存

给变量赋值时,访问时内存,如果一个变量的值会被频繁的修改,此时cache中的值就不是内存中实时的值,就会有问题,此时这个变量就不能被优化了,就需要使用volatile修饰

在这里插入图片描述

3、cpu 运算器 控制器 寄存器
4、总线 连接各大基本部件的设备
在这里插入图片描述

DMA:direct memory access IO设备和内存通信,不需要经过cpu了,可以将cpu解放出来

常见的原理图
电容:滤波
电阻:限流
在这里插入图片描述
在这里插入图片描述

dm9000:网卡驱动芯片 有了这个芯片,就可以上网
flash:外存 掉电不丢失数据
norflash:不需要初始化,可以执行程序 单片机
nandflash:需要初始化,不能执行程序,需要和内存结合使用 手机 电脑

3、ARM的架构
3.1、什么是ARM
1、一个公司的名称 2、一类处理器的统称 3、一种技术的名称

指令集:RISC 精简指令集 功耗低(cpu的电路相对少) CISC 复杂指令集 功耗高

比如:让一个人跳舞
RISC:上下左右的简单指令 要跳舞的话:需要自己组合
CISC:不仅有上下左右的指令,还有跳舞的指令

3.2、ARM公司的商业模式
只设计芯片,而不生产和销售芯片,会将设计版权授权给全球各大半导体公司

3.3、ARM处理器型号介绍
ARMV7 cortex-A9 exynos4412 fs4412
armv7:内核架构 arm公司命名的 楼的框架
cortex-a9:内核的型号 arm公司命名 加上各种管道设计之后的楼
exynos4412 soc的型号 三星公司命名 盖好的楼
fs4412 板子的型号 华清远见命名 小区
在这里插入图片描述

cortex-M:单片机 消费电子 简单家电 工控
cortex-A:高性能应用级 手机 平板 路由器。。。运行linux系统
cortex-R:实时 汽车电子 航空航天 工控 RTOS

3***.4、ARM v7的处理器架构***
在这里插入图片描述
在这里插入图片描述

注意:不考虑monitor模式
除过user模式,其他都是特权模式
除过user和system,其他都是异常模式

异常模式 异常源
FIQ fiq中断
IRQ irq中断
svc 复位、swi指令
abort 数据异常 预取指
undef 未定义指令

40个寄存器
在这里插入图片描述

其中:r0-r12就是普通的用来存储数据和指令的寄存器,r13、r14、r15、cpsr和spsr是由特殊含义的
r13(sp):栈顶指针
栈区:函数的形参、返回值、局部变量,先进后出、只能操作栈顶的特点
r14(lr):返回地址 比如:函数调用时的下一条指令的地址
r15(pc):程序计数器 反映出来程序的当前指令位置
cpsr:程序状态寄存器 体现处理器此时的工作模式等等
在这里插入图片描述

spsr:保存cpsr

4、搭建环境
安装keil4:为了使用keil的仿真环境,学习ARM指令集,而keil5根本就没有exynos4412对应的pack包,而keil4里自带了一个s3c2410a这个芯片,它也是armv7的架构,和我们上课使用的exynos4412一样,指令集是一样的,所以我们可以借助它来学习armv7对应的指令集

安装交叉编译工具链:pc机上编辑编译,板子运行就叫交叉环境,交叉编译工具链是在pc机上运行的,但是通过它编译出来的程序,是在板子上运行的,因为pc机的指令集合和板子的指令集是不一样的,所以需要不同的编译器

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

ARM———第一天 的相关文章

  • 异常处理--全局异常处理器

    异常处理方案 出现异常之后 xff0c 三层依次向上抛出 xff0c 最后交给Spring框架处理 xff0c 返回一个JSON的错误信息 在三层构架项目中 xff0c 出现了异常 xff0c 可以用以下两种方式处理 方案一 xff1a 在
  • 简单理解位运算:位与&、位或|、位非~、异或^、左移<<、右移>>

    位运算 xff0c 顾名思义 xff0c 就是对字节中的每个位进行一位一位的运算 常见的运算符有 xff1a 位与 xff08 amp xff09 位或 xff08 xff09 位非 xff08 xff09 异或 xff08 xff09 左
  • bash 脚本字符串截取表达式详细说明

    在编写linux脚本时 xff0c 有时需要操作字符串 xff0c 从一个字符串中截取一段字符串 xff0c linux系统的bash脚本截取字符串的功能比较强 xff0c 表达式丰富 xff0c 时间长了容易忘记 xff0c 因此作此笔记
  • Springboot入门 -- AOP

    一 事务 1 回顾MySQL事务管理 事务的操作主要有三步 xff1a 开启事务 xff08 一组操作开始前 xff0c 开启事务 xff09 xff1a start transaction begin 提交事务 xff08 这组操作全部成
  • SpringBoot原理篇

    1 配置优先级 优先级一次为 xff1a application properties application yml application ymal 推荐使用yml 除了配置文件属性配置 xff0c 还支持Java系统属性和命令行参数的
  • maven私服配置说明

    私服配置说明 使用私服 xff0c 需要在maven的settings xml配置文件中 xff0c 做如下配置 xff1a 需要在 servers 标签中 xff0c 配置访问私服的个人凭证 访问的用户名和密码 span class to
  • Git基本使用

    1 Git快速入门 1 1 Git概述 Git是一个免费的 xff0c 开源的分布式版本控制系统 xff0c 可以快速高效地处理从小型或大型的各种项目 Git易于学习 xff0c 占用空间小 xff0c 性能快得惊人 官网 xff1a ht
  • MyBatisPlus

    1 简介 官网 xff1a https www baomidou com 2 相关依赖以及配置 2 1 pom引入依赖 span class token comment lt MyBatisPlus 启动器 gt span span cla
  • 使用STM32点亮LED

    多学多练 一 题目描述二 设计思路三 寄存器实现01 时钟配置02 模式设置03 代码编写04 创建工程文件 四 HAL库实现01 安装 STM32CubeMX02 安装HAL库03 新建工程04 Keil仿真调试 五 硬件连接六 逻辑仿真
  • C语言数据结构中利用栈和队列实现回文的判断

    数据结构中栈有着极为广大的运用 xff0c 其操作特点是FILO先进后出 队列的特点是FIFO先进先出 判断回文 xff0c 回文序列很好理解 xff0c 正反来看它都一样 那我们可以巧妙的利用栈和队列特点来判断回文 xff0c 存入进抽象
  • csp202112-1 序列查询 满分AC python

    nN 61 int x for x in input split n 61 nN 0 N 61 nN 1 list1 61 0 43 int x for x in input split if int x lt N 43 N num 61
  • isPrime()函数:判断素数,构造素数表

    素数函数isPrime xff08 素数 xff1a 指在大于1的自然数中 xff0c 除了1和它自身外 xff0c 不能被其他自然数整除的数 xff09 方法一 span class token keyword int span span
  • gets()函数

    gets 函数 1 描述 C 库函数 char gets char str 从标准输入 stdin 读取一行 xff0c 并把它存储在 str 所指向的字符串中 当读取到换行符时 xff0c 或者到达文件末尾时 xff0c 它会停止 xff
  • win11系统新版edge不兼容网银如何解决【解决办法】

    由于目前国内的网银都是基于IE浏览器进行开发的 xff0c 由于微软推行Edge xff0c Win11把IE砍掉后 xff0c 会将IE的链接强制跳转到Edge上 xff0c 很多网银无法调用 xff0c 对于需要使用Web网银的用户来说
  • 如何判断输入的字符是小写字母、大写字母还是数字?

    一 比较判断 计算机中字符都有自己的ASCII码 xff0c 并且数字 xff0c 字母都有自己的范围 如下 xff1a 类型ASCII码数字0 948 57大写字母A Z65 90小写字母a z97 122 但是在编码时可能记不住ASCI
  • C语言· 实现各进制间的相互转换

    数制只是人用来计数的不同方法 xff0c 但他们所表示的量不会改变 下面我们试着用C语言来实现数制之间的转换 一 由十进制转换为其他进制 我们常用的更为熟悉的是十进制 xff0c 那我们就用十进制开始 xff08 下面用二进制举例 xff0
  • C语言——如何简单地实现四舍五入

    如何实现数的四舍五入 span class token macro property span class token directive keyword include span span class token string lt st
  • 菜鸡自学 Python 笔记(二)

    菜鸡自学 Python 笔记 xff08 二 xff09 五 xff0c 结构与语句1 选择结构 if 语句2 循环控制语句 xff08 1 xff09 while 语句 xff08 2 xff09 for 语句 xff08 3 xff09
  • 菜鸡自学 Python 笔记(三)

    菜鸡自学 Python 笔记 xff08 三 xff09 九 函数1 内置函数2 自定义函数3 带参数的函数4 函数的返回值 十 处理异常和错误1 异常捕捉2 抛出异常3 自定义异常 十一 类与对象1 创建类和实例对象2 属性的公有 私有3
  • 一篇文章学会 Python 正则表达式!

    菜鸡自学 Python 笔记 xff1a 正则表达式 一 简单理解二 re findall函数三 普通字符与元字符1 普通字符2 元字符 四 修饰符 xff08 可选标志 xff09 五 re sub函数六 re match函数七 re s

随机推荐

  • DOM型XSS

    gt DOM型XSS与之前两种在原理上有本质区别 xff0c 它的攻击代码并不需要服务器解析响应 xff0c 触发XSS靠的是浏览器端的DOM解析 客户端上的JavaScript脚本可以直接访问浏览器的DOM并修改页面的内容 在客户端直接输
  • 三大linux系统对比

    概述 xff1a centos作为服务器部署是第一选择 CentOS去除很多与服务器功能无关的应用 xff0c 系统简单但非常稳定 xff0c 命令行操作可以方便管理系统和应用 xff0c 丰富的帮助文档和社区的支持 ubuntu最佳的应用
  • SQL数据查询之单表查询

    目录 语句格式 选择表中的若干列 查询表中所有列 选择表中的若干元组 查询满足条件的元组 字符匹配 涉及空值的查询 多重条件查询 ORDRD BY子句 聚集函数 GROUP BY子句 语句格式 SELECT ALL DISTINCT lt
  • NVIDIA CUDA安装失败解决方法

    CUDA安装失败原因可能与显卡驱动安装有关 xff0c 之前安装的显卡驱动影响了cuda安装 xff0c 建议就是清除原本的显卡驱动安装 xff0c 自动重启 xff0c 再重新安装cuda 下载显卡驱动安装工具解压 百度网盘链接 xff1
  • Jenkins在Linux环境下的安装与配置,包含遇到的问题以及解决方法

    一 Jenkins简介 Jenkins是一个开源软件项目 xff0c 是基于Java开发的一种持续集成 xff08 CI xff09 工具 xff0c 用于解决持续重复的部署 监控工作 xff1b 它一个开放易用的软件平台 xff0c 大大
  • win10添加ubuntu的网络硬盘,实现远程操作ubuntu硬盘

    1 前言 在工作时候经常需要在本地windows10和另外一台ubuntu上实现数据共享 xff0c 如果使用远程工具会非常麻烦 xff0c 需要收发文件 既然在同一个局域网情况下 xff0c 那么有没有办法实现远程操作硬盘呢 xff0c
  • (1)数据包嗅探和欺骗-SEED Ubuntu 20.04

    数据包嗅探和欺骗 网络安全课程实验一 在做的时候参考了很多网上主要就是CSDN上的教程 xff08 感觉最近还是很忙 xff0c 所以等我有空想起来再来写这个教程 xff09 xff08 下面放一下我的实验报告部分 xff0c 里面有流程
  • 实验一的命令代码

    实验一 dcbuild 下载容器所需的image镜像 xff0c 如果已经有了 xff0c 就跳过 dcup 即docker compose up 安装容器并启动 cd Labsetup1 1 1 vi test1 py 写一个python
  • 安装Proxmox VE系统报错

    安装Proxmox VE系统 报错内容如下 xff1a Waiting for dev to be fully populated 8 344009 hdaudio hdaudioCoD2 Unable tobind the codecdo
  • PUT和DELETE部署在内网服务器后 外网无法请求的问题

    PUT和DELETE部署在内网服务器后 外网无法请求的问题 这问题困扰我好几天 xff0c 本身就不是搞运维的 xff0c 且实习时长 俩年半 半年的小辣鸡 xff0c 被赶鸭子上架 系统部署在甲方的内网服务器里 xff0c 然后他们通过V
  • C语言冒泡排序法,用函数形式实现。

    冒泡排序法 释疑 xff1a 冒泡排序法是将数组中的元素依次从小到大 xff08 Also 从大到小 xff09 进行排序下来 请看如下操作 xff01 共有4个数 xff0c 如 2 xff0c 4 xff0c 1 xff0c 3 进行N
  • Gorm之下载安装gorm.io/driver/sqlite依赖

    文章目录 Gorm之下载安装gorm io driver sqlite依赖1 会出错2 下载MinGW3 配置MinGW环境变量4 检测是否配置成功5 再次下载依赖即可成功 Gorm之下载安装gorm io driver sqlite依赖
  • Sheep to sheep

    背景 最近被这只羊折腾的够呛 xff0c 不管怎样就是过不了 xff0c 最终幡然醒悟 xff0c 还是得借助点外力 xff0c 上点技术手段才行 在网上找一下可行的方法 xff0c 看到比较简单的方法有两种 xff1a 抓包 xff1b
  • CentOS8.4 OpenLDAP服务配置

    目录 OpenLDAP简介 基本操作 配置文件 服务端配置 配置下载证书 生成数据库并设置权限 调用模块 定义访问和认证信息 定义目录结构 配置用户认证结构 测试 NFS服务配置 客户端配置 测试 挂载用户目录 相关知识 注意事项 环境 服
  • C语言排序算法之选择排序

    文章目录 一 选择排序的概述二 选择排序算法代码详解 xff08 1 xff09 算法分析 xff08 2 xff09 选择排序算法代码详解 三 总代码 一 选择排序的概述 选择排序 xff08 Selection sort xff09 是
  • CodeForces - 501B Misha and Changing Handles(Map)

    题目大意 xff1a 就是讲在codeforces网站上 xff0c 由于一个黑客 xff0c 大家都可以随便改名字了 xff0c 有的人就改了一次又一次 xff0c xff08 当然也有的人就只改一次 xff09 然后题目问你一共有多少个
  • LINUX文件编程之——open(文件打开及创建)

    文件的打开及创建 C语言打开及创建文件需要用到open 函数 xff0c open函数在三个头文件当中 xff1a open函数 函数原型 xff1a open函数的返回值是一个小的 非负整数 xff0c 这个整数是被open打开的文件描述
  • linux文件编程之——write、read、lseek、close(文件的写、读、光标移动,关闭操作)

    文件的写入 xff08 write xff09 昨天已经学习了文件的打开及创建 xff0c 及使用open函数 xff0c 传递不同的参数可以实现文件的打开及创建 xff0c 并赋予文件的权限 xff0c 今天延续昨天的学习内容 文件的写入
  • 嵌入式笔试——笔试题目

    单选 xff08 15题 xff09 第一题 栈简介 栈由操作系统 xff08 编译器 xff09 自动分配释放 xff0c 用于存放函数的参数值 局部变量等 xff0c 其操作方式类似于数据结构中的栈 堆简介 堆由开发人员分配和释放 xf
  • ARM———第一天

    1 为什么学习ARM xff1f 嵌入式 xff1a 操作硬件的软件 嵌入式系统分两大类 xff1a 1 应用程序 xff0b 硬件 2 应用程序 xff0b 操作系统 xff0b 硬件 ARM是学习嵌入式的入门 xff0c 也是学习系统移