嵌入式复习总结

嵌入式复习总结

(图片转存失败的请查看资源)

第一章(不考)

第二章

2.1 RISC机特点总结

image-20230430100525651

ARM中的R就代表是RISC机,RISC的特点:
1.从指令角度来看
	1)指令系统中仅使用频率最高的一些简单指令,比如转移类指令只有一个B指令
	2)指令长度固定,指令格式种类少,寻址方式种类少;(固定+规整)
	3)只有取数LDR/存数STR两条指令可以访问存储器,其余指令的操作都在寄存器内完成;
2.从流水线角度来看
	采用流水线技术以及超标量和超流水线技术,使得大部分指令在一个时钟周期内完成(这里的流水线指的是指令流水线,浮点流水线没有涉及到;此外,ARM采用哈佛结构使流水线发挥最大性能)
3.从通用寄存器角度来看
	CPU中设计了多个通用寄存器,共37个(X86只有4到8个)
4-.控制器采用组合逻辑控制
5-.采用编译优化程序

2.2 两个指令集

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GTZLIWI7-1683103825604)(img/image-20230430101605063.png)]

1.为什么要设计两个指令集?
	正常情况下使用32位,如果采用16位指令,可以缩短代码长度,提高代码密度,减少内存的使用率。
2.需要解决的问题以及解决思路
	1)写汇编指令时怎么告诉汇编器哪些要汇编成32位,哪些要汇编成16位
		如果希望某段代码汇编成32位,前面加一个CODE32
		如果希望汇编成16位,前面加一个CODE16(本质是使用BX指令修改程序状态寄存器CPSR中的Thumb位)
	2)控制器如何正确取指令
		设置两种操作状态,ARM态(32)和Thumb态(16),两种状态的切换是通过CODE32/16来切换
	3)执行指令的时候控制器已经知道是32位或者16位,但是两种指令的编码格式都不一样,如何正确执行
		因为16位指令和32位指令一一对应,所以使用一个解码器将16位指令装换成32位,所以在真正执行的时候都是32位

2.3 哈佛结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HftiOUXl-1683103829093)(null)]

哈佛结构是指主存有两个或者主存一个但有两个Cache(ARM采用,一个专门放数据,一个专门放指令,这样流水线在执行过程中不会有太多资源相关问题),哈佛结构的目的是为了让数据和指令分开,配合流水线让流水线发挥最大的性能。
指令在不同阶段都要进行访问,多条指令如果在流水线里面同时访问,一个存储器很难实现同时访问,那么流水线的速度就会下降。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vb1FRKYe-1683103825605)(img/image-20230430103046590.png)]

2.4 7种工作模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Op6MvE0W-1683103825606)(img/image-20230430103637357.png)]

1.为什么要设置7种模式?
	分配寄存器,各个模式下相互之间不要相互干扰,当出现某种异常就自动的进入相应模式,每种模式下使用自己的寄存器和堆栈,这样的话可以减少保护现场恢复现场等操作的次数。
	
2.7种模式的切换
	上电进入管理模式,进行初始化操作,然后进入用户态。出现某种异常就去相应的模式下处理,处理完再回到用户模式。

3.切换方法
	修改CPSR寄存器相关位

4.几个重要寄存器的作用
	R0 - R7 所有状态共用  8
    R8 - R12 做了两组,一组专门为快中断用,其他的模式共用另一组 5 * 2
    R13 - R14 system和user模式共用一组,其他五组各分配两个 2* 6  -- 每个模式都在内存中有各自的堆栈
        R13(SP)栈顶指针
        R14(LR)链接寄存器 
            断点保存在R14中,PC-->R14
    R15 (PC) 只有一个   1
    CPSR状态寄存器 只有一个,大家共用  1
    SPSR每种状态1个    5  用户和系统模式没有

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yLOdU5PL-1683103829062)(null)]

2.5 异常

image-20230430104317450

此处主要关注微处理器响应中断的时候要做什么事,至于中断请求和中断判优等操作在第六章中详细分析

1.CPU响应中断的流程
	***自己完善
	断点保存的值一般是PC-4(原因:流水线)
	断点保存在R14链接寄存器(第一个断点没有保存在堆栈,但是如果要嵌套的时候,需要把前面的断点保存在堆栈)
	然后要去执行中断服务程序,硬件自动的设置PC值,让他转到相应的入口地址去执行中断服务处程序(8条B指令)(不像X86去查表,去查中断向量表)

2.中断返回的时候,有时候直接将断点赋值给PC,有时候需要-4,有时候还要再-8,原因:
	【需要完善】

第三章 指令系统

3.1 指令语法

3.2 & 3.3 第二个源操作数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W1d7iSDq-1683103825607)(img/image-20230430105444863.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V8o6z3eW-1683103829174)(null)]

1.对于立即数型,直接装载的要求以及在不满足要求的条件下如何解决?
	两种方法;
		多次拼接
		使用伪指令LDR(文字池)

2.弄清楚这个问题,其实也把立即数寻址和寄存器移位寻址的道理想明白了

3.4 寻址方式

image-20230430105801939

都是重点,尤其是堆栈寻址的4种方式和相对寻址,考法:给例子,然后看出采用的是什么寻址方式,是怎样寻的,最后的结果又是多少?

3.5 重要指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5xLN74wr-1683103825608)(img/image-20230430105954366.png)]

3.6 常用伪指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YMo3enr7-1683103829548)(null)]

3.7 LDR伪指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nxQKnaBN-1683103825609)(img/image-20230430110054183.png)]

3.8 阅读或者书写程序段

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hMKtkK19-1683103829257)(null)]

3.9 例题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xyaIUMsG-1683103825610)(img/image-20230430110203850.png)]

交换指令的含义:
	从内存单元[R2]读出的内容放到R0中,再把R1中的数据写回[R2]

指令特点
	原子操作,写一次内存,读一次内存,这两个操作是原子的,不可分割的

主要应用
	可以实现信号量、锁等底层功能

image-20230430110452723

要求
	这个数必须能给用8位立即数循环右移偶数次得到,这样的话,立即数用8位表示,移位次数用4位表示,压缩成12位

不满足要求的解决方法
	把立即数拆成几个数
	使用LDR伪指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ScbEdCG0-1683103829578)(null)]

(1)
	指令1是汇编指令,
	寻址方式:相对寻址(坑,后面虽然直接给了地址,但是ARM中不支持直接寻址,因为32位地址放不下)【004表示偏移地址】
	LDR就是读存储器,把后面地址的内容放到前面的寄存器中,所以最后R0中内容是0xe1a00000
	
(2)
	指令2是伪指令
	汇编变成一条真正的LDR汇编指令
	00000810处是文字池,存放的是_start标号的值,就第二条nop指令的地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTcwjtgR-1683103829565)(null)]

采用相对寻址的指令有哪几个?
	LDR
	STR
	B指令(偏移地址24位,实际上是26位)

image-20230430112033390

重点***
	画图时要按字节画(大小端方式)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ihBOYhTP-1683103825613)(img/image-20230430112319547.png)]

基址加变址(4种选其1)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hKbUwbnv-1683103825613)(img/image-20230430112310936.png)]

B指令,偏移地址-2补两个0,就变成了-8
B . -> 死循环

image-20230430124942802

BL指令子程序调用指令,偏移范围:+-32M
超过这个范围,解决方法:
	1)三级跳(跳两次)先用一条B指令,跳到一个位置,那个位置放一条BL指令(如果非要写一条B指令也可以,自己保存断点并进行返回)
	2)修改PC的值,mov pc xxx,自己保存断点并进行返回

第四章

4.1 Image

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-adUnwz3f-1683103829601)(null)]

ROBase与RWBase:
	ROBase:第一个代码段(只读段)的起始位置,汇编器、链接器在汇编和链接程序的时候先把ROBase设置为某一个特定的值,链接器在链接代码的时候,第一条指令的地址就是ROBase。如果不进行设置,默认为0,那么第一条指令的地址就是0.开机的时候,代码要搬到主存中去,由于ROBase设置的不一定是0,所以需要搬到特定的位置,但是PC的值刚开始是0,所以第一段代码的ROBase必须设置为0,(Entry Point),后面的代码段由第一段代码搬到合适的位置
	RWBase:链接器在链接数据段的时候,你设置的多少就链接到哪里。将来装到主存的时候,必须装到这个位置。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sjfsbgeg-1683103825615)(img/image-20230430130120773.png)]image-20230430130308746[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ln0yKanc-1683103825615)(img/image-20230430130319534.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p0PlkoS2-1683103829678)(null)]

考法:
	先问一下Image相关问题(ROBase和RWBase)
	另外,代码中有指令,可以问指令的寻址方式,问代码含义

4.2 ATPCS(直接考编程)

image-20230430130358120

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RKovrEtT-1683103829657)(null)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bwRXjxDl-1683103829700)(null)]

对S3C2440编程时没有main函数,而是复位中断程序extern int A(int arg); 一般规范的做法是放在头文件,此处include头文件
汇编最后两条语句可以缩写为ldmfd sp!, {PC},但如果中间无子程序调用,也只用 mov  pc, lr 

main函数并没有在0地址:
	在嵌入式系统中书写代码,前面需要把代码装入,加一些初始化工作

image-20230430130506857

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nfnuVuPe-1683103825620)(img/image-20230430130521368.png)]

第五章

5.1 S3C2440

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WCVRxBm-1683103829624)(null)]

SOC的概念

S3C2440是一个SOC,它的内核是ARM...(V8?)

5.2 最小系统

image-20230430131449421


5.3 存储空间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q1sJPoZs-1683103829637)(null)]

5.4 & 5.5 & 5.6 & 5.7 主存设计*

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yOMikQeJ-1683103825622)(img/image-20230430131634307.png)]

5.6、内部有NAND Flash控制器;自启动机制
5.7、即便是使用NOR Flash,也可能使用BOOTLOADER,比如Flash中一个数据段(RW),其RWBASE设置在其它BANK

image-20230430131715928

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pMXdk1x4-1683103830029)(null)]

1.芯片容量
	地址总数*单元大小(2^16 * 8)
	
2.不能,因为要按字节、半字、字访问

3.

4.
Bootloader
	一开始是8条B指令
	reset handler
		先做各种硬件初始化,然后把其他代码从Flash搬到主存(读->写)
		然后死循环
	然后就是各种中断处理程序
	

第六章

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D873RQQr-1683103830014)(null)]

个数据段(RW),其RWBASE设置在其它BANK


[外链图片转存中...(img-PVO0F9ny-1683103825623)]

[外链图片转存中...(img-BnHbbMGI-1683103825623)]

1.芯片容量
地址总数*单元大小(2^16 * 8)

2.不能,因为要按字节、半字、字访问




Bootloader
一开始是8条B指令
reset handler
先做各种硬件初始化,然后把其他代码从Flash搬到主存(读->写)
然后死循环
然后就是各种中断处理程序




# 第六章

[外链图片转存中...(img-CQ5c0a1S-1683103825623)]

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子味的晚霞和少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值