首页 > 编程语言 >ARC学习(2)基本编程模型认识(二)

ARC学习(2)基本编程模型认识(二)

时间:2024-05-31 23:29:30浏览次数:28  
标签:优先级 中断 模型 编程 地址 ARC LP 寄存器 异常

笔者继续来学习一下arc的编程模型的寄存器信息。

1、core寄存器深入

在这里插入图片描述
在这里插入图片描述

  • 参数寄存器:r0-r7,8个参数,
  • 暂存器:r10-r15
  • 保存寄存器:r16-r25 调用函数需要保存的寄存器
  • 指针寄存器:gp(全局指针)、fp(栈顶指针)、sp(栈底指针)
  • 链接寄存器:ilink(异常链接寄存器)、blink(分支链接寄存器)
  • 通用目的寄存器:genaral purpose reg,不是暂存器也不是保存寄存器
  • 程序寄存器:PCL = PC & 0xFFFF FFFC ,PC 在arc里面是辅助寄存器,反应的时候实际的指令地址,其是只读半字对齐的寄存器。

1.1、指针寄存器

指针寄存器有三个,分别为gp(全局指针)、fp(栈顶指针)、sp(栈底指针),分别使用r26,r27,28寄存器来表示。

  • gp(全局指针):指向一些贯穿整个程序执行的时候的共享数据,(暂时没用到过)。
  • fp(栈顶指针):指向当前栈帧的基地址,
  • sp(栈底指针):指向当前帧的实时地址,(向下递减)
    具体可参考寄存器的理解 ===》FP、SP、LR寄存器

只要关注一下sp指针即可,其他不常用,例如是否栈溢出等等。
在这里插入图片描述

1.2 链接寄存器

链接寄存器有两个,ilink(异常链接寄存器 r29)、blink(分支链接寄存器 r31)

  • ilink(异常链接寄存器):进入中断或者异常时,该值会被修改成返回的地址,所以其不能一直保持该值,除非在某种中断下面一直执行程序。且用户模式下不能获取其值,否则会进入异常。
  • blink(分支链接寄存器):常规的链接寄存器,当进行函数跳转时,会保存下一条指令的地址到blink。
    在这里插入图片描述

1.3 PC寄存器

程序寄存器:PCL = PC & 0xFFFF FFFC ,PC 在arc里面是辅助寄存器,反应的时候实际的指令地址,PCL 是只读字对齐(4字节)的寄存器。
在这里插入图片描述

1.4 其他寄存器

r30:存储 长(long 类型)的立即数,便于高位操作指令
r60:循环寄存器,记录循环次数寄存器,
在这里插入图片描述
同时由两个辅助寄存器LP_START和LP_END来完成循环,指示循环体。
LP_START:循环开始的地址
LP_END:循环结束的地址

总的流程如下图所示(下图1):

  1. 从LP_START开始,判断下一条指令是否是LP_END,如果不是,PC继续指向下一条指令,
  2. 如果是最后一条指令,则判断LP_COUNT是否为1,不为1,则PC执行LP_START,然后LP_OUNT 减1,然后继续循环
  3. 如果是最后一条指令,且LP_COUNT为1,则PC=LP_END,同时LP_COUNT=LP_COUNT-1,则为0
  4. 因为是先循环,然后再减1,所以到1时,循环结束
  5. 如果LP_COUNT开始的时候为0,则会进行2^32-1次,下图3
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2、辅助寄存器介绍

2.1 status32状态寄存器

主要功能:使能或者禁止处理器内部的一些行为,包括一指示结果的flag。

  • 用户模式:只能读ZNCV这些Flag bits,其他读出来都是0
  • 内核模式:所有位均可以读出来。
    在这里插入图片描述

介绍一下相对比较关心的BIT:

  • IE(31Bit):处理器的中断是否使能,0:禁止中断,1:使能中断,且在中断优先级之上E[3:0+ ]的中断。如果处理器没有中断,配置位(HAS_INTERRUPT),则该位无效。

  • AD(20Bit):Disable Align Checking:1:禁止数据对齐检查,默认是0。如果为0,进行常规的对齐,否则会进入EV_Misaligned,数据访问非对齐。

    • 64位和32位按照:32位对齐
    • 16位:16位对齐,
    • 8位:没有对齐要求
  • SC(14Bit):Enable stack checking exception:使能栈检查异常,通过栈基地址和顶地址,可确认是否栈溢出,如果溢出,则进入异常。栈检查异常:EV_ProtV,异常向量:0x6,偏移:0x18,异常code:根据错误类型决定,para:0x2
    在这里插入图片描述
    异常类型:内存读异常,内存写异常,内存读改写异常(有点像某些外设寄存器读清零等)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • DZ(13Bit):DivZero exception Enbale,除0异常使能,EV_DivZero,但是没有硬件除法器时,该位被忽略。

  • U(7Bit):User Mode,1为用户模式,限制一些特权机制特权指令的执行。

  • AE(5Bit):状态代表进入异常,ERET 寄存器有效,代表异常返回的地址,

  • E[3:0](1-4Bit):代表处理器优先级门限,在大于该门限时才有效中断。从0-15,0最高优先级。如果每个中断一个优先级,则16个中断向量每个中断对应一个优先级,通过中断选择select和中断使能去配置。看上图的例子,优先级阈值为2。

寄存器如下图所示:
在这里插入图片描述
status32_P0:快速中断时,会使用该备份寄存器。进入和退出时,会拷贝和返回。

2.2 中断相关寄存器

  • 中断向量基地址寄存器:低10位无效,高22位有效,即按2^10 = 1024对齐,可以动态修改。
    在这里插入图片描述
    复位时,会从中断基地址config去加载值(Interrupt Vector Base Addres Configuration),
    在这里插入图片描述

  • 中断选择寄存器:选择一个中断去配置,比如优先级之类,会选择到对应的bank 寄存器。
    在这里插入图片描述

  • 中断优先级寄存器:每个中断都由一个优先级寄存器,可以通过select去选择。
    在这里插入图片描述

  • 中断触发寄存器:备份寄存器,设置是脉冲触发或者电平触发,通过脉冲取消寄存器消除。
    在这里插入图片描述

  • 中断使能寄存器:备份寄存器,每个中断都有一个,使能或者禁止中断。
    在这里插入图片描述

  • 中断脉冲取消寄存器:脉冲触发中断会被自动清除。
    在这里插入图片描述

  • 中断缓存寄存器:备份寄存器,指示当前哪个中断处于等待状态,通过select去查看,只读寄存器
    在这里插入图片描述

  • 中断状态寄存器:备份寄存器,查看select选择的寄存器的状态信息。
    在这里插入图片描述

  • 软件中断触发寄存器:写对应的中断号可以软件触发中断。
    在这里插入图片描述

2.4 异常相关寄存器

  • 异常返回寄存器:当异常发生时,会将异常的返回地址保存到该地址处,最低位为0,2byte对齐。
    在这里插入图片描述

  • 异常状态寄存器:异常发生时,保存status32到estatus里面,退出时,再恢复。
    在这里插入图片描述

  • 异常原因寄存器:表明当前发生异常的向量号,异常原因,以及参数信息。有些异常共享同一个向量地址,所以需要触发原因来区分。
    在这里插入图片描述
    在这里插入图片描述

  • 异常错误地址寄存器:表明异常发生时的地址。
    在这里插入图片描述
    在这里插入图片描述

3、操作权限介绍

操作权限决定了是否一个任务可以有权限执行特权指令或者获取一个保护状态。
arc V2 指令集里面规定只有两种操作模式:特权模式用户模式

一些特权说明如下框图所示:
在这里插入图片描述
一些场景下面必须是特权模式,所有会从用户模式切到特权模式,或者从特权模式切回用户模式。
用户模式切到异常模式

  • 中断
  • 异常
  • Reset 或者机制检查异常
  • trap、swi等

异常模式切回用户模式

  • 中断返回
  • 异常返回

中断或者异常会调整一些寄存器来讲进入特权模式,包括ERET、ILINK、BLINK 、ERSTATUS、STATUS_P0和AUX_IRQ_ACT。

  • ERET:异常返回的地址exception return address
  • ERSTATUS:exception status,从status32 copy
  • STATUS_P0:P0级别的status32 备份寄存器
  • AUX_IRQ_ACT:记录当前操作中断的优先级,指示处理器是否能处理嵌套一些中断事件(用来表示当前中断的优先级,指示已经触发的中断能否嵌套处理)。同时也要结合Status32 E 来决定是否可以处理。

标签:优先级,中断,模型,编程,地址,ARC,LP,寄存器,异常
From: https://blog.csdn.net/qq_34430371/article/details/139156733

相关文章

  • ARC119F 题解
    blog。被自动机做法恶心到了,现在也来恶心一下大家。\(\color{red}\textbf{以下内容强烈建议自己推一遍,几乎一半是重复的,推完会很爽,并且理解会很深。}\)\(\color{red}\textbf{以下内容不建议用}\LaTeX\textbf{书写,因为写起来像在吃大便。}\)暴力\(dp_{i,a,b}\)表示当前在\(......
  • LLM 大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位
    LLM大模型学习必知必会系列(十二):VLLM性能飞跃部署实践:从推理加速到高效部署的全方位优化[更多内容:XInference/FastChat等框架]训练后的模型会用于推理或者部署。推理即使用模型用输入获得输出的过程,部署是将模型发布到恒定运行的环境中推理的过程。一般来说,LLM的推理可以直接使......
  • LLM 大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战
    LLM大模型学习必知必会系列(十三):基于SWIFT的VLLM推理加速与部署实战1.环境准备GPU设备:A10,3090,V100,A100均可.#设置pip全局镜像(加速下载)pipconfigsetglobal.index-urlhttps://mirrors.aliyun.com/pypi/simple/#安装ms-swiftpipinstall'ms-swift[llm]'-U......
  • 马尔科夫模型,马尔科夫模型为什么可以处理小数据样本
    目录马尔科夫模型马尔科夫模型为什么可以处理小数据样本马尔科夫模型马尔可夫模型是一种统计模型,由AndreiAMarkov于1913年提出,广泛应用于语音识别、词性自动标注、音字转换、概率文法等自然语言处理领域。马尔可夫模型的核心概念是马尔可夫性质,即未来状态的......
  • 算法金 | 突破最强算法模型,决策树算法!!
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」1.引言今天我们唠唠吴恩达:机器学习的六个核心算法!之决策树算法。决策树是一种用于分类和回归的机器学习算法。它通过一系列的决策规则将数据逐步划分,最终形成一......
  • 每日一练编程题:今天是【接口,多态】
    设计程序:电脑类的属性USB接口数组:有3个usb插口电脑类的功能:通过接口插入外设(u盘,麦克风,键盘等)addUSB(USBusb){}开机要求:电脑开机前,先启动外设关机要求:电脑关机前,先关闭外设外设类(u盘,麦克风,键盘等)功能:启动关闭USB接口定义usb设备的统一......
  • 算法金 | 突破最强算法模型,决策树算法!!
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」1.引言今天我们唠唠吴恩达:机器学习的六个核心算法!之决策树算法。决策树是一种用于分类和回归的机器学习算法。它通过一系列的决策规则将数据逐步划分,最终形成一个类似......
  • 程序分享--大厂常见算法/编程面试题:O(1) 时间插入、删除和获取随机元素
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。或关注博主免费专栏【程序......
  • 系统编程POSIX信号量题
    系统编程POSIX信号量题目设计一个程序,主线程需要创建2个子线程之后主线程终止,此时进程中有2个子线程A和B,此时进程中有一个临界资源flag,子线程A获取触摸屏坐标并判断坐标值是否在LCD屏的左上角,如果坐标范围满足左上角,则利用条件量和互斥锁来唤醒子线程B,子线程B的任务是判断flag......
  • 系统编程练习题----利用条件量和互斥锁,实现两个线程之间的同步与互斥
    目录题目解析代码结果展示题目解析​ 该题主要依靠条件量和互斥锁来实现线程之间的同步与互斥,分析主线程、线程A和线程B的任务如下:主线程:打开LCD屏和触摸屏的硬件文件,并分别存储两个文件的文件描述符,方便后面进行条件判断。开启线程A和线程B。定义并初始化条件量和互斥......