合工大信安嵌入式考前自救
第一章绪论
嵌入式系统是在各方面有严格要求的专用计算机系统。
嵌入式系统按复杂程度主要分为:
- 简单系统:单片机、DPS
- 复杂系统:PDA、平板
注:简单系统也可分为小型和中型系统
三要素:
- 嵌入性
- 专用性
- 计算机系统
“实时性”主要分为:
- 强实时性:μs~ms
- 一般实时:ms~s
- 弱实时:s以上
实时性需求:
- 非实时
- 硬实时
- 软实时
软硬代表响应时间是否完全不超出所需时间。软实时允许极少数情况超出(平均不超出)
嵌入式系统的组成结构:
- 嵌入式处理器
- 外围硬件设备
- 嵌入式操作系统(可选)
- 用户的应用软件系统
第二章ARM微处理器与编程模式
计算机体系结构分两种:
- 哈佛结构:程序数据分开储存
- 冯诺依曼结构:程序也算数据,放一起
指令集:
- CISC:复杂指令计算机(80%的指令基本用不上)
- RISC:精简指令计算机(嵌入式系统)
指令集和体系结构并没有对应关系
流水线:同时运行多个指令的不同部分:
CPI:每时钟周期运行指令的个数,上述流水线的CPI为1
ARM微处理器命名的含义:
标志 | 含义 |
---|---|
T | 支持Thumb指令集(一种精简指令集) |
D | 片上调试 |
M | 支持长乘法 |
I | 支持片上断点和调试点 |
E | 增加DSP指令 |
J | JAVA加速器 |
S | 可综合 |
ARM芯片=ARM内核(CPU)+外部设备
运行模式:
除了用户模式都叫特权模式
除了用户模式和系统模式都叫异常模式
ARM是32位指令集,Thumb是16位。
状态切换:
- 进入异常的时候自动切到ARM,返回自动切到Thumb
- BX Rm:当寄存器Rm[0]为1时切到Thumb,为0时切到ARM
Rm并不特指哪个寄存器,可以是R0~R7中的任意一个
ARM的通用寄存器:
R0-R7:全状态通用寄存器
R8-R12:分组寄存器,FIQ状态单用5个,其他状态共用5个
R13(SP):堆栈指针,用户模式和系统模式共用1个,其他模式各一个
R14(LR):链接寄存器(R15的备份),用户模式和系统模式共用1个,其他模式各一个
R15(PC):全状态共用,程序计数器,由于流水线技术同时运行多个指令的不同部分,存放当前执行指令向后第二条指令的地址(当前指令地址+8)。
状态寄存器:
CPSR:current 当前状态
SPSR:saved 备份储存的状态
用户模式和系统模式没有SPSR
状态位格式:
高4位:
标志位 | 含义 |
---|---|
N | 补码有符号数运算的结果为负数 |
Z | 运算结果为0 |
C | 同汇编,进位,或带移位时移出的位 |
V | 符号位溢出 |
低8位:
控制位 | 含义 |
---|---|
I | 禁止IRQ中断 |
F | 禁止FIQ中断 |
T | 处于Thumb状态 |
M[4:0] | 运行模式 |
注意到用户模式和系统模式总是使用相同的寄存器,可以理解为系统模式是加了特权的用户模式
Thumb的寄存器:ARM扣掉R8-R12
储存格式:
- 大端:正常储存,但是高字节低地址(高位靠前,低位靠后,说起来奇怪,其实就是正常的)
- 小端:nt存法,高字节高地址,低字节低地址,说着好听,其实是8位一组倒着存
储存管理单元MMU:虚拟应用程序所需的空间,控制页表读取使用
页表详见PPT
异常处理的过程:
- 异常发生时,保护现场,进入异常处理程序
- 执行完异常处理程序后,恢复保存的现场,并返回到异常发生时的下一条程序
- 处理器允许多个异常同时发生,此时将按照优先级处理异常。
优先级从高到低:
- 复位
- 数据访问中止
- FIQ
- IRQ
- 指令预取中止
- 未定义指令
- SWI
具体介绍
异常类型 | 进入模式 | 具体含义 | 异常向量地址 |
---|---|---|---|
复位 | 管理 | 全部停止,从头运行 | 0x00000000 |
未定义指令 | 未定义 | 遇到不能处理的指令(硬件没有或编写错误) | 0x00000004 |
SWI(软件中断) | 管理 | 执行SWI指令,这种异常提供了在用户模式下调用特权操作的方法 | 0x00000008 |
指令预取中止 | 中止 | 取指令地址不存在,或地址不允许当前指令访问 | 0x0000000C |
数据访问中止 | 中止 | 取数据地址不存在,或地址不允许当前指令访问 | 0x00000010 |
IRQ | IRQ | 外部发出中断请求,且CPSR的I(禁止IRQ中断)位为0 | 0x00000018 |
FIQ | FIQ | 快速中断请求有效,且CPSR的F(禁止FIQ中断)位为0 | 0x0000000C |
数据访问中止与其后的IRQ中间留了一个异常向量地址,不清楚干什么用
异常处理具体步骤:
- 将下一条指令地址放入LR(不是PC的下一条,而是正在执行的下一条)
- 将CPSR复制到SPSR
- 根据异常类型,设置CPSR的运行模式位(T设为0,M[4:0])
- PC取异常对应的异常向量地址,跳转到异常处理程序,并设置中断禁止位(I,F)。
中断返回:
- LR的值减去偏移量送入PC
- SPSR复制回CPSR
- 清除中断禁止位?(这本就是CPSR的东西,按理说上一步应该已经清除了)
- 复位异常不用返回
返回:数据LR-8,FIQ,IRQ,指令预取-4,其他不变0.
和优先级有关,优先级越高的返回越多
第三章ARM指令集与汇编程序设计
寻址方式:
寄存器寻址:寄存器的值
立即寻址:#+0x…使用一个指定的16进制数
寄存器偏移寻址:ARM特有寻址方式,在传入的操作数后面加上",LSL 随便什么寻址",对数据先移位再计算。支持5种移位:(不可能考这么细吧)
寄存器间接寻址&基址寻址:
这俩倒不如说是操作符"[]"的用法:
操作符[]
的用法:接收两个参数,第一个为寄存器,第二个为立即数,计算这两个数的和X,并取X所对应地址内数据的值。若未指定第二个参数默认为0。
多寄存器寻址:{}
仅用于寄存器,最多16个。
用法:{}
内按照从低到高的顺序指定R0-R15寄存器,中间用逗号隔开,对于连续的可用横线代替中间的寄存器。如{R2-R7,R12}
堆栈寻址:带SP就算
几种模式
**满递增(FA):**堆栈向上增长,堆栈指针指向存放有效数据项的最高地址。指令如LDMFA、STMFA等;
**空递增(EA):**堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA、STMEA等;
**满递减(FD):**堆栈向下增长,堆栈指针指向存放有效数据项的最低地址。指令如LDMFD、STMFD等;
**空递减(ED):**堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMED、STMED等。
只是保存数据的话,入栈出栈用同一种模式就行
相对寻址:隐含了PC的基址寻址,其实就是跳转指令B+随便什么字母+地址,如BL HELL
ARM指令:
基本格式:
条件码cond:相当于直接套个了if(),比如EQ:相等,NE不相等
S:就是S,加上影响,不加不影响
跳转指令B:
B lable
或BX Rm
调用子程序,B可以加参数L或X或LX,用L会把PC-4放进LR,X会切状态,比如进入ARM,注意带X时不传入lable而是寄存器
数据处理指令:
MOV A,B 把B放进A
MVN A,B 把B的非放进A
CMP A,B 比较A和B的大小(结果存标志位)
CMN A,B 比较A和-B的大小(结果存标志位)
TST A,B 与(结果存标志位)
TEQ A,B 异或(结果存标志位)
ADD A,B,C 加
SUB A,B,C A=B-C
RSB A,B,C A=C-B(设计者指定是有点毛病)
ADC 带进位加
SBC 带进位减
RSC 带进位逆减(交换顺序便于LSL偏移寻址)
AND ORR EOR 与、或、异或,都是三个参数
BIC A,B,C 位清除A=B&(~C) (清除哪位哪位设为1比如0xFF0000清除第三第四字节)
MUL A,B,C 32位乘法
MLA A,B,C,D 32位乘法,但是还要+D
64位乘法:(盲猜不考,真考到这个估计及格的可能性也不大了)
储存器访问指令:
花式LDR:
花式STR:
总结:S是有符号,B是字节,不带是字,H是半字,T是用户模式
链表搜索程序:
search
CMP R0,#0
LDRNEB R2,[R0] //此处是为了展示LDR的用法,不然可以直接CMPNE R1,[R0]
CMPNE R1,R2
BNE search
MOV PC,LR //返回用这句
LDM和STM:
分两种运行模式:数据块和堆栈
简单说,LDM是前面的数放后面,STM是后面的数放前面
瞎几把指令,不想看。
下面这个八成要考:
BIC是清除指令
Thumb指令集,移除了B以外所有指令的条件位,移除了R8~R12
存储系统
按存储介质分:半导体存储器,光盘存储器,磁表面存储器
存取方式:
- 随机存取RAM
- 顺序存取SAM
- 直接存取DAM
- 只读ROM
- 闪速存储Flash Memory
存储系统结构:
注:上图的存储器名称并不代表存储器类型,比如Nor Flash属于ROM类型的存储器
内部寄存器:逻辑门
高速缓存:逻辑门
主存:SRAM、DRAM、SDRAM
主存引导区:EPROM、E2PROM、Nor Flash
外存:NAND Flash、磁盘、光盘、SD卡
外存被分为8个Bank(0~7),每个Bank128MiB,但Bank6和Bank7的大小可以设定。所以前7个Bank有固定的起始地址,而最后一个Bank不固定
Bank0作为引导区,只能接ROM存储器
Bank1~7:可以接ROM、SRAM、SDRAM
Bank6和Bank7的容量虽然可以设定,但两者必须相等。且不能超过128MiB。
8位存储芯片并联成16位:一半存高位数据,一半存低位数据,其他全并联
NorFlash:16位2M,通常配置到Bank0
NAND Flash:分为4096块,每块32页,每页528字节(但只有512存数据)
共26根地址线2514选择块,139选择页8~0选择列
A8是特殊的地址线,根据命令选择,命令0x01代表A8=1,0x00代表A8=0。先用A8选择两个半页中的一个,然后按照A0~A7 、 A9~A16 、A17~A24、A25传入地址。
存储器控制寄存器:我可去你的吧,谁能记住。
第五章通用外设与接口
通用输入输出端口:GPIO
S3C2440有9组GPIO:
FCLK=2×(MDIV+8)×(时钟源频率)/((PDIV+2)×2SDIV)FCLK=2\times(MDIV+8)\times(时钟源频率)/((PDIV+2)\times 2^{SDIV}) FCLK=2×(MDIV+8)×(时钟源频率)/((PDIV+2)×2SDIV)
看门狗定时器,当计数器为0时触发PCLK的复位
这第五章是重点,但是投入和回报不成正比,不看。
合工大信安嵌入式考前自救相关推荐
- python爬取合工大、安大、中科大就业信息网宣讲会信息——requests_htmlmongoDB
# -*- coding: utf-8 -*- """ Created on Fri Apr 27 15:12:18 2018 #python 3.6 "&qu ...
- 合工大与安大的计算机科学与技术好,计算机考研安徽大学和合工大两所学校哪个好?...
安徽大学的计算机录取分数低点,实力也稍强点,是安徽省省级A类重点学科,而安徽大学的.计算机科学与技术.信息与通信工程.土木工程,文科其他专业实力在全国就并不突出了.计算机科学与技术.统计学.生态学等理 ...
- 麒麟信安操作系统推动智慧电力高质发展
麒麟信安操作系统软件大规模应用于电力生产控制系统中,通过高安全.高可靠.高可用.强实时.兼容性强等技术优势,成为满足电力各细分领域技术需求的国产安全操作系统首选品牌.包括智能电网调度控制系统.智能电网 ...
- 聚焦 | 电力行业国产操作系统迎来大市场,麒麟信安积极承接发展新机遇
近年来,针对信息安全的外部环境不确定性加剧,作为关系到国计民生的电力行业,加速了自主创新的步伐. 从2009年起,电力行业就开始采用拥有自主核心技术的软硬件设施,到如今,整个电力行业已普遍完成了调度自 ...
- 武汉理工大学合肥工业大学 计算机,合工大为什么从985降到211?附合肥工业大学211地位(合工大不是985)...
选择科目 测一测我能上哪些大学 选择科目 领取你的专属报告 > 选择省份 关闭 请选择科目 确定 v> 合肥工业大学是安徽省一所著名高校,简称"合工大",也是安徽211 ...
- 网络攻防技术(郑大信安个人总结版)
网络攻防技术(郑大信安个人总结版) 目录 第1部分 绪论 2 第2部分 网络脆弱性分析 3 第3部分 网络侦察 5 第4部分 网络扫描 7 第5部分 拒绝服务攻击 11 第6部分 计算机木马 14 第 ...
- 计算机学习入门指北——计科软工网络信安侧重图析、解读专业术语、岗位分类、未来规划
申明:本博文偏技术向,主观性较强,其中部分理解必有偏差和误解,望指出改正! 计算机学习入门指北: 作为刚入学的计算机系学生,面对一片专业术语十分蒙.区块链?大数据?开源?数据库?嵌入式开发?前端后端? ...
- 润和软件携手高鸿信安助力构建可信计算生态
近日,润和软件推出的企业级通用操作系统HopeStage与高鸿信安旗下产品CTRUST HTE 操作系统可信增强系统完成兼容性互认证. 经测试,企业级通用系统HopeStageV1.0与高鸿信安CTR ...
- 率先完成息安全产品百万级装车应用,为辰信安完成新一轮融资
近日,广东为辰信息科技有限公司(以下简称"为辰信安")完成新一轮融资,投资方为国投招商.国投招商将支持为辰信安汽车信息安全产品研发及市场拓展,不断创新汽车信息安全底层技术,助力汽车 ...
最新文章
- JS基础入门篇(一)
- 化工原理各章知识点汇总
- C# 两时间,时间间隔
- 个人见解:*与(c语言)
- Hive _函数(系统内置函数、自定义函数、自定义UDF函数)
- LeetCode27——Remove Element(移除数组中指定的元素)
- 通过 getResources 找不到jar包中的资源和目录的解决方法
- 简单易用的开源ORM框架SqlSugar v5.0.0.19源码
- SpringMVC自学日志04(Controller 及 RestFul风格 )
- simplejson.scanner.JSONDecodeError: Extra data: line 1 column 22089 - line 1 column 22090
- java按钮添加事件_java中添加按钮并添加响应事件的方法(推荐)
- Access访问错误集锦:Access关键字
- Docker seaweedfs
- cactiEZ 使用
- HD AUDIO For XP SP3 声卡修正补丁下载
- 牛客刷题---年会抽奖
- stm32毕业设计 单片机车牌识别系统
- 解决DNS解析故障的几种方法
- 6-2 折半查找 (15分)_数据结构实验7_羊卓的杨
- Linkis和DSS本地和远程调试文档
热门文章
- 影响小红书KOL报价的4大因素,小红书品牌方推广投放经验分享
- 《关键信息基础设施保护条例》已上报国务院有望年内出台​
- 计算机毕业设计 基于JavaWeb的图书查询管理系统(源码+论文)
- SM5202高耐压防电池反接兼容TP4056脚位具有SOP8 MSOP8小型封装的通用1A线性充点芯片
- JavaScript 框架之jQuery
- 智能驾驶发展的前世今生 |既生瑜,何生亮,究竟何为PPP-RTK?
- 精密单点定位技术(PPP)和RTK技术有什么区别
- 使用迅雷快速下载慢速官网大文件
- 用户思维+:好产品让用户为自己尖叫
- visio中公式太小_学SolidWorks钣金必知的钣金折弯与展开计算原理与公式