理论学习-ARM-内核

这篇具有很好参考价值的文章主要介绍了理论学习-ARM-内核。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


为了提高学习效率,我们要提前想好学习策略。
首先,使用频率越高的知识点,越要首先学习。假使,我们学习了一个知识点,能覆盖工作中80%的工作量,那是不是很夸张的学习效率?!
其次,有两种覆盖知识点,梳理知识点的策略。一种是将知识按体系划分,挨个学习,系统学习。具体而形象的学习样板就是教科书。第一章,第二章等等,挨个分支学习、梳理。如果我们要讲述应题的知识,就要按寄存器、计算机工作原理、汇编指令、内核架构分体系去挨个讲解。还有一种策略就是面对问题。比如,我们首先提出一个问题:“函数调用,从C语言到汇编,再到CPU内核,以及寄存器的工作表现是怎样实现的”,如果我们把这个问题讲解清楚,就要把各个牵涉的体系知识揉到一起讲解。第二种策略,似乎更能把使用频率高的知识点串一起,一起学习。是我们面对工程应用更好的学习策略。因为我们不是做研究啊!如果,我们用第二种工作策略,感觉收益不大了(因为使用频率低的,这种学习方式我们不易接触到,无法高效率补充知识盲点)。那么我们就应该更换第一中学习策略了,补充知识盲点,系统学习,系统梳理。

ok,我们采用第二种策略开始学习。

函数的调用

要实现函数调用,有至少要有四步:

  1. 压栈,保护当前函数现场。
  2. 跳转,实现函数跳转。
    a. 读参数
    b. 运算、运行
    c. 返回结果
  3. 跳转,返回父级函数。
  4. 出栈,恢复现场。

用实例,来对应感受一下。
理论学习-ARM-内核,学习,arm开发
对应的汇编
理论学习-ARM-内核,学习,arm开发
理论学习-ARM-内核,学习,arm开发
理论学习-ARM-内核,学习,arm开发
可见,套路既是:
5. 压栈,保护当前函数现场。 { PUSH 或者 LDR } sp寄存器,Rx寄存器
6. 跳转,实现函数跳转。{B、BL、BX},对应给PC寄存器赋值
a. 读参数 (出栈【从栈读取】、或者R0、R1)
b. 运算、运行 (ADD等)
c. 返回结果(压栈【从栈保存】,或者R0、R1)
7. 跳转,返回父级函数。{B、BL、BX ,但对应LR}, 对应给PC寄存器赋值
8. 出栈,恢复现场。{POP 或者LDR}, sp寄存器,Rx寄存器

【注意】:
9. 跳转前保存下一条指令地址至LR寄存器
不带返回的跳转指令B, 不会保存地址至LR寄存器
带返回的跳转指令BL,会自动保存地址至LR寄存器
10. 在子函数不会自动跳回父函数,需要手动将LR寄存器的值赋给PC寄存器才能跳转回来。
11. 有一个官方规范AAPCS(Procedure Call Standard for the ARM® Architecture),详细描述了进行函数调用时如何进行参数的传递和调用路径的记录等。
12. 大多数的函数调用通过BL语句实现,对应着LR寄存器 和 PC寄存器。因此依次找到栈中LR的数值,就能找到调用路径中各个函数的地址。最后根据map文件翻译出各函数的名称,就可以得到函数的调用路径了。【栈回溯】
13. 寄存器概述文章来源地址https://www.toymoban.com/news/detail-835305.html

- 通用寄存器 
通用寄存器中可供挖掘的信息并不多,通常情况下r0-r3寄存器保存着函数的前四个参数(其余的参数在栈中保存),需要注意的是:这四个寄存器的数值仅在函数开始执行的时候是可靠的,在函数执行的过程中可能被改变。在函数返回时,寄存器r0和r1用于保存返回值(根据返回数据的大小,决定仅使用r0还是同时使用r0和r1)。同样这两个寄存器仅在子函数刚返回时数值才是可靠的。
- 特殊功能寄存器【PC、LR和SP】
SP指向当前的栈顶,在知晓栈的结构时,可以根据SP访问栈中的数据。
在中断处理函数中LR有特殊用法,其中保存了返回被中断地点的方法,而不是通常情况下的返回地址。因此在Hardfault处理函数中寄存器LR和PC的值没有太多参考意义,被处理器自动压栈的LR和PC最有用,PC记录了被中断打断前正在执行的指令地址(也是正在执行的函数地址),LR记录了被中断打断前,正在执行的函数的父函数的地址。根据这两个地址,可以找到引发Hardfault异常的函数和语句,以及其父函数(如果辅以汇编代码继续对栈的内容进行分析,则可以回溯整个调用路径)。
- SCB寄存器
在M3/M4处理器标准外设中,有一个叫做SCB(System Control Block)的部分,其中有6个寄存器记录了发生Hardfault异常的原因。
--此部分转载至 【作者:电工王大爷,链接:https://www.jianshu.com/p/e766c2fba1cc】
具体参考官方文档《HardFault的诊断》,或者电工王大爷的帖子。

加载、存储

计算

中断

异常

线程的切换

到了这里,关于理论学习-ARM-内核的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Transformer理论学习

    Transformer出自于论文《attention is all you need》。 一些主流的序列模型主要依赖于复杂的循环结构或者CNN,这里面包含了编解码器等。而Transformer主要的结构是 基于注意力机制 ,而且是用多头注意力机制去替换网络中的循环或者CNN(换言之就是 transformer 这个网络模型是不需要循环

    2024年02月13日
    浏览(32)
  • 孤子理论学习(一)

    最简单的波的典型例子就是声波和电磁波,它们可以用下面的方程描述:   ( ∂ 2 ∂ t 2 − v 0 2 ∂ 2 ∂ x 2 ) f ( x , t ) = 0   (1.1) (frac{partial^2}{partial t^2}-v_0^2frac{partial^2}{partial x^2})f(x,t)=0 ,tag{1.1}   ( ∂ t 2 ∂ 2 ​ − v 0 2 ​ ∂ x 2 ∂ 2 ​ ) f ( x , t ) = 0 ( 1.1 ) 其中, v 0 v_0

    2024年02月07日
    浏览(33)
  • 理论学习:logits softmax

    在深度学习中, Logits(逻辑值)是指模型的输出层在应用激活函数之前的值 。它通常是一个向量,表示不同类别的得分或概率。在分类问题中,Logits可以被解释为模型对每个类别的置信度或原始预测分数。 模型的输出层通常会应用一个激活函数,例如Softmax函数,将Logits转换

    2024年04月28日
    浏览(32)
  • 【概率论理论】协方差,协方差矩阵理论(机器学习)

      在许多算法中需要求出两个分量间相互关系的信息。协方差就是描述这种相互关联程度的一个特征数。   设 ( X , Y ) (X,Y) ( X , Y ) 是一个二维随机变量,若 E [ ( X − E ( X ) ) ( Y − E ( Y ) ) ] E[(X-E(X))(Y-E(Y))] E [ ( X − E ( X ) ) ( Y − E ( Y ) ) ] 存在,则称此数学期望为 X X X 与

    2024年02月14日
    浏览(36)
  • 机器学习-学习率:从理论到实战,探索学习率的调整策略

    本文全面深入地探讨了机器学习和深度学习中的学习率概念,以及其在模型训练和优化中的关键作用。文章从学习率的基础理论出发,详细介绍了多种高级调整策略,并通过Python和PyTorch代码示例提供了实战经验。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构

    2024年02月05日
    浏览(34)
  • 理论U4 集成学习

    传统学习面临的问题:没有任何情况下都最好的机器学习算法 1)背景 通过将多个学习器进行集成,常可获得比单一学习器显著优越的泛化性能,这对弱学习器尤为明显。 弱学习器:准确率仅比随机猜测略高的学习器。 强学习器:准确率高并能在多项式时间内完成的学习器

    2024年01月20日
    浏览(40)
  • 【机器学习】决策树(理论)

    决策树(Decision Tree)是一种分类和回归方法,是基于各种情况发生的所需条件构成决策树,以实现期望最大化的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。它的运行机制非常通俗易懂,因此被誉为机器学习中,最“友好”的算法。下面通过一个

    2024年02月04日
    浏览(35)
  • 机器学习-方差和偏差理论

    关于机器学习方差和偏差的内容其实很重要,这个方差和偏差可以帮助我们去分析,模型的泛化能力和过拟合的程度。 下面我们先给存储方差和偏差的公式: 注意,下式当中, f ( x ; D ) 表示在数据集 D 上训练出的模型, f − ( x ) 表示无穷多个不同数据集训练出的加权平均模

    2024年02月12日
    浏览(40)
  • 图机器学习【从理论到实战】

    传统神经网络 以往:随着机器学习、深度学习的发展,语音、图像、自然语言处理逐渐取得了很大的突破,然而语音、图像、文本都是很简单的序列或者网格数据,是很结构化的数据,深度学习很善于处理该种类型的数据。 图神经网络 现实世界:并不是所有的事物都可以表

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包