粉丝2.8万获赞6.1万
第一步设置中断分组。那么前面也说过了,中断分组呢,是通过这一个计算器的未十到未八进行设置的, mvi 系的全功能呢,它是支持二的三次方,也就是八个分组,由 est 公司呢进行了这个裁剪之后呢,那么只保留了五个分组, 关于这一个分组的内容呢,大家可以参考我们前面的视频,而这一个分组呢,它是通过这一个哈尔库函数进行设置的,哈尔杠 m v i c 杠 set pyolaty grouping 这一个函数,那么待会呢,也会给大家介绍一下这一个函数, 那么这是我们第一步设置分组,再来看一下。第二步,设置中断优先级。那么既然是中断优先级呢,肯定是通过中断优先级计算器进行设置的,而这一个计算器呢,前面也说了个,他总共是有八 个位,个数呢有二百四十个,这样的一个计算器分别对应着二百四十个外部中断,而我们 st 里面的话,那么他只是保留了高四位有效,低四位呢是没有用到的 来设置,我们这个中断优先级呢,是通过这一个号函数,二杠 nvi 西杠赛排位的替,那么待会呢,也会给大家介绍一下这一个函数,这是第二步,再来看下第三步,使能中断。我们设置好分组,设置好这个优先级,那么就开始使能, 这个计算器呢,总共是有三十二个位有效,而他的计算器个数呢,是有八个呢,所以说呢,就是二百五十六个位,但是呢,我们的外部中断只有二百四十个,所以说呢,有十六个呢是没有用到的, 它是通过这一个哈库函数呢进行设置的。二杠 m v i c 杠 enable i r q, 这个 i r q 呢就是 interrupt request, 就是这个中断请求的意思,字面上看就是使能中断请求嘛,就是打开我们这个中断,那么这里呢大家也可以通过这个字面来了解就可以了, 那么可以看到我们这个啊 mvic 的使用呢,只有三个步骤就可以完成了,是不是很简单,使用起来是非常简单的,那么大家主要了解的计算器呢,就是这三个,也就是我们这里列出的这三个就可以了,而关于这个计算器呢,我们前面已经详细介绍过了,这里呢我们就不再啰嗦了。 还有一个特别提醒,在我们正准原子的一个历程里面呢,中断分组呢,已经在这一个二杠 in need 函数里面设置为分 分组为二了,因为什么要设置为分组为二呢?因为分组二的话,他的一个抢占优先级占的是两个位,响应优先级呢也是占两个位, 所以说他的产量优先级总共是有四个优先级,感应优先级呢也是有四个,那么分组为二呢,他是处于一个跟中间的一个位置,如果你设置为其他的分组,那么也是可以的。
大家好,我是讲嵌入式的高博士,这里呢是第二十一次课,本次课呢我和大家一起来学习内嵌中断向量控制器 nvic 啊,有些地方又把 nvic 翻译成嵌套中断向量控制器啊,嗯,他们是同一个东西。 本次课呢分成两个部分,第一, nvic 它的功能的理解啊,就是说我们 nvic, 呃,会实现哪些功能啊?第二,我们对于优先级的一个呃,介绍 好 n v r c 是个什么东西呢啊?我们上节课讲计算机对于中断处理的这样一般理的。呃,这个方法的一个理解的时候,我们画了这样一个图啊,画了一个这样的一个图,就是说我们这个 cpu 正在执行程序的时候,如 如果有中断发生,我们要判断这个中断啊,能不能够打断我正在执行的主程序,如果能够打断我正在执行的主程序的话,我们就把主程序正在执行的啊,所谓的这些,呃, 东西我们给他保护起来,叫保护现场啊,然后转向这个中段啊,就具体的中段他所对应的那个中段向量啊, 去去在中断项链那里去找这个中断服务程序存放的位置,然后这个找到这个中断服务程序之后呢,去执行这个中断服务程序,中断服务程序执行完之后呢,再恢复现场,再继续执行, 然后如果说中断服务程序正在执行的时候,有新的中断进来,我们还要判断这个新的中断能不能够打, 打断我当前的这个中断,就是说中断能不能够欠套啊,根据他们的优先级啊来来进行。呃,这个判断,那这个这些工作呀,你看判断他能不能 打断我当天的服务程序啊,然后判断他的优先级啊,优先级进行比较啊,这些事啊,很繁琐啊,我可能有很多很多的中介中中断事件要进来啊,能不能够 给我们这个这个这个呃,把把主程序结束掉去响应它呢?就是说但是我们的这个 cpu 呢,又非常的重要,是我们整个按摩芯片最核心的一个东西 啊,这么核心这么重要的东西,我们应不应该给他配一个助手呢?当然给,应该给他配一个助手,而且会配很多助手啊,我们配一个专门用于处理中断的这样一个助手啊,我们叫做什么呢?哎, 就叫做 nvic, 给 cpu 配置的一个专门处理中断的这个助手,就叫做 nvic, 也就是嵌套中断向量控制器。 那这个 n v i c 具体做些什么事儿呢啊? n v i c 又在我们的考 text m 三架构中处在什么样的一个位置呢?我们来看前面的考 tex m 三啊, 就是它的一个架构图,当然这个系统架构图呢,实际上是我们 gd 三二 f 幺零 x 系列啊,它的中等密度的芯片啊,也就是我的开发版所使用的 gd 三二 f 幺零三 c 八 t 六啊,这样的一个芯片, 它的这个系统架构图,你看这个 n v i c 啊,它的这个位置呀,还是相当的很 核心的啊,他处在我们考这个芯片的内核里面啊,他是紧跟着我们的 cpu 的啊,就是我们这个 cpu 的非常重要的一个秘书哈,那他这个 cpu 做些他这个 cpu 的这个 avic 啊,做些什么事呢? 你看这些外设都是连到先通过他啊,来看看能不能 啊,去去去影响这个 cpu 的,去打断这个 cpu 的啊,主程序,哎,也就是说我们的外部中断,要想到达 cpu 让 cpu 来响应我们的中断服务, 先要过 n v i c 这一段。那常见的外部中断,或者说我们一个芯片它的外部中断到底有哪些呢?啊?这个呢,我们就要看我们相对 印的用户手册啊,用户手册啊,这开发工具啊,然后开发资料用户手册这里啊,就有相对应的章节会去讲啊,这个事啊,你看有专门的 eiti 的这个章节啊,对于考 tax m 三来说啊,它有六十八种可屏蔽的 外设中断啊,也就是说你这个中断进来之后我可以把你给屏蔽掉啊。屏蔽中断这个事是谁做呢?当然也是我们的 nvic 啊,来做啊,也就是说他的一第一个非常重要的 工作就是屏蔽中断,就像我们领导的秘书一样啊,他非常重要的一个事就是把领,对,就是把可能会影响我们领导的一些不重要的一些干扰给他,怎么样?给他 挡在门外,对吧?啊,这是我们这个 n v i c 做的第一件事,那么这个外部中断有哪些,我们现在还不是不知道呀。啊,我们继续往下看啊,他这里有一个外部中断的这个, 呃,简介啊,这个简介,简介这里呢,他有很多啊,首先呢是,呃,异常,异常,我们在上节课讲过啊,他这个异常是我们的啊,内核里面发生的内部中断啊, 很多是不可屏蔽的中断啊,你看很多是不可屏蔽的中断,他这个中断呢,总共有十六种啊,从零到十五啊,那么,呃,外部中断呢,他又有一些啊,像这个 esi 啊,这个 esi 实际上是我们这一章啊,就是我们下节课要讲的 啊,这里第一种外部中断叫 e f t i 啊, e f t i, 具体它是什么我们现在还不知道啊,我们下节课会讲,然后呢?还有什么像 r t c 啊,还有像这个 d m a 啊, d m a d m a 零,假设 d m a 零啊,然后还有像这个,呃, timer 啊,像 timer, 像这个定时器啊,定时器,我们在下一章会讲, 等等等等吧啊,我们这里没法去具体的一个一个的给他搞清楚了啊,给他搞明白啊,但是我们知道啊,如果说你想去了解外部中断有哪些的话啊,我们对应的这个器件的啊,这个芯片的, 它的用户手册肯定会有的啊,是不是每一个考 tex m 三的芯片的这个外 不中断的数量都是一样的呢?那显然也不是的啊,你看我们 s t m s t m 三二啊, f 幺零三 c 八 t 六,它的这个中断的这个数量和我们 g d 三二啊, f 幺零三 c 八 t 六啊,又不太一样,你看它的这个 中断啊,只有四十三个可屏蔽的中断通道啊,但是我们考 text m 三,他最多有多少呢?啊,在这样一本书啊,考 text m 三权威指南这里啊,大家可以去看一看啊,可以去看一看 啊,呃,像这个异常,他的这一张啊,有奖,总共有啊,二百五十六个啊,其中十六个,呃,是系统异常啊,叫内部中断。剩下的二百四十个啊,是外部中断,显然对于不同 我们的考 text m 三的芯片来说,它的外部中断的数量是小于等于二百四十的,对吧?啊?当然这个东西我们知道啊,有具体的数值啊,我们不需要去记忆啊,我们知道有这种些东西啊,就可以了。 那么,呃,外部中断进来了,那么第一步就是要过 nvic 的中断屏蔽啊,就是说首先我们这个中断,他是不是一个有效的中断啊?当然这个中断屏蔽呢,我们是可以通过程序来配置这个 nvic 的,对吧? 那么如果说这个中断是没有可以进来啊,我们不想屏蔽他,他可以进来。那么第二步是做什么事呢?是做什么事呢?我们要判断啊,中断的优先级啊, 好比说我们这里啊,这个中断一进来了啊,我们直接啊,当然现在没有啊,没有正在执行的这个中断服务,那没关系啊,我们就直接去中断项链啊,就是他对应的那个中断项链那里啊,找中断服务程序去执行就行了。 那么如果一个中断服务程序正在执行着,如果又有新的中断进来,那怎么办呢啊?我们就要看看看这个中断二的优先级和中断一的优先级啊,他们之间的关系,如果中断二的优先级比中断一的优先级要高,我们就执行一个中段欠套, 中断欠套啊,如果说这个优先级判断完了啊,那么我们接下来也就是什么,哎,去处理中断限量啊,去处理中断限量,也就是说我们这个中断啊,要告诉这个这个 nvic, 要告诉 cpu, 我们这个中断进来了之后, 你去响应他的话,你去哪里去找他相对应的中断服务程序啊?我们这个 cpu 啊,他就可以啊,非常呃快速的啊,把这个中断给他处理掉啊,把这个中断服务给他处理掉,然后尽快的去回到他的主程序那里继续执行 啊,继续执行。那看来这个优先级啊是非常重要的一个概念。那么这个优先级是怎么一回事呢?啊?在我们的考太 xm 三架构的按摩芯片里面,这个终端优先级呢,分成了两种 优先级啊,他是两个呃,优先级组合在一起啊,共同共同,来啊,来来。怎么样来描述我们这个外部中断的优先级的?首先是什么是叫强 战式优先级啊,其次是它的响应式优先级啊。响应式优先级有些地方也翻译成子优先级或者副优先级或者雅优先级啊,它是 sub priority。 那么这个抢战式优先级和响应式优先级又是怎么一回事呢?啊?我们简单来介绍,如果是一个低抢战式优先级的中断程序,正在执行的时候,发生了一个高抢战式优先级的中断, 那么这个时候啊,这个第一抢占是优先级的中断程序,虽然正在执行, 对不起,你也要暂停一下啊,来响应我这个高强断式优先级的中断啊,我们这个就叫中断欠套,也就是说在这个图这里所示的,那么中断二的这个强断式优先级和中断一的强断式优先级哪一个高呢? 啊?是中断二的抢占式优先级高啊,所以说我们中断一的服务就被怎么样,就被暂停啊,就被暂停用来处理中断二的 这个服务啊,所以说中断欠套发生的时候啊,说明这两个中断的抢占式优先级 是不一样的,而且是啊,中抢占是优先级比较低的,那个中断先发生,而且没有响应完,我们抢占是优先级比较高的,这个中断又进来了啊, 就好比说我们正在呃,举个例子啊,假设我们去银行的柜台那里办一些业务啊,好比说银行柜台那里正在有一个啊,正在有一个,呃客户啊,这里正在处理了啊,这里有一个,已经有一个客 客户了啊,啊,已经有一个客户啊,客户 a 啊,我们当然这个地方我们还是写成中段 a 啊,中段 a, 中段 a, 他已经在这个这个什么哎,已经在这个呃柜台这里来处理这个事了,然后又有一个中段 b, 哎,有一个中断 b 进来了啊,这个中断 b 要不要被响应呢?我们就要看中断 b 的抢占式优先级是不是高于中断 a 的抢占式优先级啊。 也就是说你是相对于普通用户来说,你是不是一个 vip 用户?你如果你是一个 vip 用户,那对不起普通用户,你靠边站啊。然后我们把这个 vip 的用户的这个事件啊事情给处理了,我们再来响应你的这个啊,普通用户, 那么响应式优先级是怎么一回事呢?啊?是这样的啊,如果说我们这个中断 a 和中断 b 的抢占式优先级是一样的, 那么我就不管你的响应式优先级是怎么样,只要中断 a 的这个事正在处理,你中断 b 来了,我就必须排队等待中断 a 先完成, 来吧啊,因为他们的他,他们的这个潜在是优先级实验的,你抢不过他啊,因为他正在正在做了,你就不能打扰他啊。但是现在这个 b 如果正在排队,又来了一个中断 c 啊,中断 c 啊,那么中断 c, 它要首先去 去看他的抢占式优先级是不是高于中段 a 的抢占式优先级。如果这个中段 c 和中段 a 的抢占式优先级又是一样的, 那怎么办呢?我也不能打断这个 a, 我要进来排队,哎,排队的时候他发现前面有一个中断 b 也在排队啊,你看他和他的潜电池油烟机一样,他也和他的潜电池油烟机一样,那说明这两个的潜电池油烟机也是一样的。 那他排队的时候,我能不能中断 c, 插到中断 b 的前面,等中断 a 完了,先来处理中断 c 呢? 这个时候我们就要看他的啊,响应式优先级。如果这个中断 c 的响应式优先级的级别高于中断 b 的响应式优先级的级别的话, 那对不起啊,这个这个 b 啊,我们就要对不起 b 了,我们这个 c 呢,就排队排到前面去,明白吧?啊?也就是说啊,好比说我们, 呃,中段,好比说我们这里有三个客户啊,有三个客户在银行,去银行柜台那里出办一些业务啊。这个中段 a, 他是 vip 用户,这个中段 b 也是 vip 用户,中段 c 也是 vip 用户, 那这个中段 a, 这个 vip 用户正在做的这个事,你这两个大家都是同样的是 vip 用户,那我就不能打断正在处正在处理的这个事啊。然后我这个 b 和 c 啊,我们拿出来 第二就看,就看这个,我们第二个,第二个优先级啊,就是副优先级,如果这个中段 c, 它是 vip 中 p 啊,它比 vip vip 里面有相对等级高一点的,那么我可以优先排队哈, 这样的话,我是不是把这个啊抢占式优先级和显音式优先级都说明白了呢?那强占式优先级和显音式优先级对应的,我们 gt 三二 f 幺零三 c 八 t 六啊,他在设置数值的时候是怎么设置的呢啊?实际上呢,我们这里呢有一个四必特的一个 啊,呃呃,存储器啊,一个寄存器啊,这个寄存器啊,在 这个地方大家可以看看异常,这里啊,他相对应的有一个对于寄存器的一个说明啊, 你看他这里有计算器啊,有个计算器有一个优先级计算器啊,对于考 tex, 对于这个 g d 三二 f 幺零三或者是 s t m 三二 f 幺零三来说啊,他的这个优先级计算器呢,总共 共有四个 beat, 那四个二进制位,这四个二进制位呢,其中呢一部分用来做响应式优先级的配置,一部分呢用来做啊抢占式优先级的配置。那么到底哪一部分作为抢占式优先级,哪一部分作为响响应式优先级呢?我们这个是可以配置的啊, 如果你把他们全部作为响应式一弦几,那好了,大家的抢占式一弦几啊,都是零啊,那么这个,这个,这个响应式一弦几,他的曲子范围就变成了吗?零零零零到幺幺幺幺啊,也就是从零到十五。 如果我们把前面的这一位啊配置为响应式,配置为抢占式优先级,后面的这三位配置为响应式优先级的话,那么这一位啊,抢占式优先级,他的曲子范围就是什么零到一啊两个数字,而这个响应式优先级他的曲子范围就是什么, 哎,零零零,零到幺幺幺幺啊,就是什么,就是有从零到七,总共有八种可能,那相对应的也是啊,这样啊,这样,来来来,做啊,啊,来存储优先级的这个设置啊,是这样来设置的,那当然对他的设置我们是怎么样设置呢?我们写代码的时候当然是可以调用啊, 芯片的厂家给我们提供的库函数啊,通过库函数的接口,接口函数啊,来来来,做这个事。 好,本次课关于这个 nvic 它的功能啊,这个 nvic 的功能,以及啊它的这个相对应的,我们判断中断的优先级的啊,这个中断优先级的强调式优先级和响应式优先级的这个呃概念啊,以及以及啊优先级的 呃计存器的配置的这个具体的数值的取值,可能我们就都讲完了啊,本课内容也到此结束了,同学们,再见。
你有没有遇到过游戏卡顿吊针的情况,这时候大家是怎么解决的呢?用恩卡的朋友应该听说过一个叫做 dlss 的技术,开启他就可以在保证画质的前提下提升游戏帧数。 但这个 dlss 技术有个很大的缺点,就是必须游戏本身支持,如果游戏不支持就无法使用。但现在这个问题出现了转机, 英伟达发布了一个新的技术,叫做 n i s, 中文名称叫做图形增强。从英伟达的官网我们可以看到, n i s 技术支持所有 gts 九零零以上的显卡,用九七以上显卡的玩家只需要把显卡驱动更新到最新版本就可以使用了。 而且这个技术还有一个非常大的优点,就是通吃几乎所有的游戏。从这张图中我们可以看到几种优化技术的画面,对比 nis 和 amd 的 fs 二画面几乎相同,甚至有更好的帧数和质量,仅次于 dlss, 这对于不支持 dlss 技术的游戏将是一个非常好的选择。 说了这么多,我们要如何使用 nis 技术呢?虽然英伟达的显卡控制面板中可以开启 nis, 但我还是强烈建议大家安装 tfboys experience 这个软件,因为它就是为了优化游戏而生的。如果安装显卡驱动的时候是默认安装,那么应该已经安装好了。这个软件 装好后第一次使用,我们需要注册一个账号,进入软件后,首先点击设置左侧选择游戏及应用,然后在这里添加所有你安装游戏的路径,再点击现在扫描,这样主页就会出现软件所支持你电脑上的所有游戏了,我们点击详情按钮, 再点击优化就可以完成,因为大家建议的游戏优化设置,但请记住,这个优化只是让游戏在你电脑上能够尽量保证画质的前提下流畅运行,并不能保证达到六十帧。 我们可以点击自定义按钮,在性能及质量之间拖动瓦杆来优化游戏的帧数,但这并不是今天我们想说的,我们点开设置,再点击常规, 这里可以看到我安装的版本是三点二五,点一点二七,如果你的 tfboys 版本比这个低,请先更新下软件和显卡驱动,然后就会在下面发现一个叫做图形增强的选项,这个就是 nis。 我们打开后面的开关,我现在的系统分辨率是三八四零乘二幺六零,这里列出的百分之八十五到百分之五十就是按照这个分辨率的百分之八十五到五十 进行渲染。大家可以理解为左侧为质量模式,右侧为性能模式,中间是均衡模式。一般情况下,建议大家选择均衡模式或者性能模式,以达到更好的帧数。下面的锐化选项是用来在较低分辨率的情况下提升图像的清晰度,一般保持默认的百分之五十就可以了。 选择好后,点击弹出窗口的优化,这时候软件就会针对所有的游戏进行相关的优化,然后我们再进入游戏就可以感受到效果了。 这里再和大家说一个小技巧,对于像我这样希望能够六十针打游戏的人来说,如果觉得游戏还不够流畅,我们可以再进一步降低游戏的分辨率。 由于有图形增强技术的加持,我们降低分分率并不会使画面变得很模糊,但同时很明显的提升了游戏的帧数。如果是游戏本玩家并 显你的游戏本显卡在三零五零以上,我强烈建议大家同时开启下面的 wisper mode, 也就是耳语模式。右侧可以看到关于这个模式的要求,需要全部满足才会出现这个选项。打开后,我们直接将上面的滑杆拉到最左侧的降噪,同时将下面的真率拉到最高到六十, 然后点击优化,这样在打游戏的时候风扇就不会有太大的噪音了。开启这个模式后,由于我们要求软件在安静的前提下让游戏尽量保证六十针,优化后游戏的分辨率会大幅降低,一般情况下画面会变得很模糊, 但是由于我们同时开启了图形增强,会发现画面并没有变得模糊,这样我们就实现了既安静又流畅的游戏体验。以上就是今天要教给大家的技巧,我是大伟呆,如果 觉得内容有用,还希望能够点赞评论转发支持一下,您的支持就是我做视频的动力,谢谢大家,我们下期再见!
前面我们讲解了这个中断异常项链表,然后这期视频我们开始讲解 n v i c, 所谓的 n v i c 就是 next t 的 victory 的 interrupt consular, 也就是我们经常所说的中断项量控制器。 这个什么是中断项链控制器呢?我们可以这样通俗的理解,就是我们一送三二,他有很多个中断,那这很多中断怎么去协调?然后他们优先去怎么去配置,那这里面涉及的就可能有很多个计算器,那我们需要把这些 对应的一些计算器到给他统一的管理起来,我们就需要一个单独模块去管理,然后这个模块我们就可以称为一个中断相量控制器啊。当然我们的这个中断相量控制器,他除了包含我们那个控制计算器和中断相关的处理逻辑之外,他还包含 我们的 mpu 的控制器,以及我们 cst 的低音达定时器,以及对那个调试的一个控制。然后这个 nvic 它是它的计算器,是以存储器映射方式进行访问。我们之前讲解了关于这个 course m 三和 m 三二,它的一个存储器映射, 我们可以从之前来存储出映射,可以知道这个 n v i c 它其实实际上它是一个内核的一个室友外设。我们找到我们之前的一个存储器映射的一个图, 也就是这个图,我们从这个图中我们也可以就可以看到我们的 n v i c 这里 它的地址是零 s 一零零零,然后一零零零它是这个室内部的一个室友外设是它纯粹 ins, 所以说我们在访问这个 n v i c 中的计算器的时候,我们 需要以存储器应试的方式进行访问,我们就把这个对应的一个地址转换成对应的一个指针,然后去访问里面的计算器。 那对 n v i c 的介绍,我这里把它总结出三点,我们具体的可以参考这个 course m 三的一个中文权威指南,然后我这里就直接把它总结出来。 首先是第一点就是我们的内嵌向量中断控制器,我们经常所说的 n v i c, 它主要是用于同管这个异常或者是同管中断的,它是 cross m 三不可分离的一部分,它与这个 c m 三内核是在逻辑上是紧密而合的。 然后他的计算器是要以存储机近视进行访问,然后同时他还包括了其他电视器的一个其他控制器,其他 计算器的一些控制,比如我们的 cst, 一个地道电视器,然后我们的调试控制等等。那第二点就是我们对于我们这个 course m 三这个类来说,它的 nvic 是支持一到二百四十个外部中断,我们通常外部中断写成 irqs, 那就 s 就是代表是 零到二百三十九,然后我们 m i c 是支持,也就说他最大支持二百四十个外部中断,那具体要支持多少呢?那我们就由我们自己的一个芯片厂商自己去决定,在设计芯片的时候自己去决定, 比如这就和我们之前讲解传出去映射是比较类似的,也就是说 n v i c 他在传出去映射的时候,会把这个符纳写的空间给我们预留出来,预留假设是预留五百一十二兆,那我们具体这个芯片厂商,也就我们的 s n 三二 s t 公司,他去设计 sm 三二的时候,具体要用多少呢?就由我们自己芯片厂商自己去决定。然后同理这个 n v i c 也是一样的,它最大支持二百四十个外部中断,而具体的数字由芯片厂商自己决定,我们的一个支持的外部中断数量越多,那我们的一个成本就肯定是越高的。 那第三个就是我们 n v i c 的一个访问地址,这个零 s 一零零一零零这个把它记住, 然后 d, 然后同时这些计算器它是只能在特权模式下这样访问。什么是特权模式呢? 其实从名字也可以知道,也就是说我们普通用户是很难去,就是普通模式很难去访问的,他必须要调用对应的对应的一个类似于进入特权的一个指令来在特权底下进行访问。这个我们后面再讲解,深入讲解,这个 要从三二十会给大家讲到啊。当然有个例外就是我们的软件触发中断计算器可以在用户级进行访问,然后软件触发中断,也就是我们通过软件也就我们程序去设置某一个比特位,让他产生一个对应的一个中断 啊。然后就是我们的一个中断项链和中断计算器,他都可以按照一个字,也就四十字,四十四个字节,三十二位啊,半字也就两个字节,十六位,然后一个字节就八位的方式进行访问,所以说他访问方式还是挺多的,我们不局限于 某一个,就是不局限于按照我我们讲解之前计算器,比如 gpl 计算器的时候,只能支持什么一次性三十二位的一个访问,当然我们这个中断控制的相关计算器,它的支持访问方式就比较多的。那接下来我们就讲解我们中断相关的 计算器的一些介绍啊。这一部分内容话主要是针对我们的外部中断。我们之前讲解科二四 m 三异常的时候给大家讲过外部中断,他在硬件标号上都是从是从十六开始的。 那首先是中断配置,那我们配置个中断,那我们肯定需要一些基准器进行表示。第一个就是我们 要把中断开启或者关闭,所以说他肯定有一个计算器,那第二个就是我们做中断产生后,他需要把这对应的一个标志给他挂起,然后弄完以后我们需要把这个标志清楚,所以说这里肯定有一个选取和解选的一个计算器。 第三个就是我们的中断分为抢占式和响应式,然后他以及他优先级,所以认为他肯定有一个优先基准,优先级的一个基准器。那第四个就是标志这个中段是否活跃,那我们肯定有个活动的一个状态基准器,所以说我们从这里从我们一个中段我们就可以大概知道 它至少有这室内计算器,那首先是中断的死人和失人,也就中断的开启和关闭, 我们中断的开启,我们对于我们 course m 三或者对于我们 s s m 三二来说,它的中断呢?开启和关闭是分别使用各自的计算器进行控制的, 这个与我们传统的用单一比特币就单一比特的两个状态来表示是不同的。我们之前如果大家学过五月单面机,应该知道五月单面机我们有非常经典,就是有五个中断,对吧?一个外部中断,然后比如他的地址就是零零零三,就是外部中断, 零比零三 h。 当时我们写灰边的时候还会用到这些,然后他的一个比如外部中断他的开启,那我们就只需要用一个比特位,因为一个中断嘛, 然后一个比特位就有两种状态,要么零,要么一。我们当时讲五幺单边接的时候就会说,嗯,这个中段把它开启,那我们就让这个比特位让他等于一, 那我们就开启。如果让这个中断关闭,那我们就这样对应的这个比特位就同一个比特位,让他等于零,这样就可以关闭啊。这就是用单一比特位的 两个两个状态来进行表示这个中断的开启和关闭,当然这是比较简单的, 而我们的 sm 三二他并不会这样,他的一个中断的开启和关闭,他是有一个一个对子。什么是对子呢?就用两个计算器已经表示的。 比如我们有一个 sm 三二中断,他也肯定他就有一个计算器,这个计算器叫做什么?叫做就是就可以叫做一个中断开启的一个 计算器,然后同理他有个中断关闭的一个计算器,也是个三十二位的一个数据,那我们对于某个中断,比如我们的 a r i r q a r q 零,也就第零个中断就零,第零个就是第一个外部中断, 那他开启的话,我们就只需要让这个开启他的开启进行其中的某一个位,让他等于一,那我们就可以把这个中单给开启, 而他关闭终端的话,他并不就不会像我们之前讲五月单边接那样,把这个对应的一个计算器的对应的这个位把设置为零,这样并不会关闭,而是他专门有个关闭的一个计算器,然后找到他对应的一个位置,让他等于一,那我们就可以把这个 外部中断给关闭掉。所以说这就是我们这 s m 三二与我们的五月单面积,它对中断这方面的一个开启和关闭是不同的, 这个大家需要注意一下这个细节,然后从这里我们就可以知道,我们总共 course m 三 n v i c, 它支持二百四十个外部中断,所以说我们每一个中断需要用一个对子,也就是一个一个对的一个使人位和除人位来表示, 那我们就许那我们二百四十个中段就有二百四十对这样的一个对子,每个中段拥有一对,然后我们又知道一对对子其实他是想的是两个比特,所以说他是两个计算器中的单一比特,然后我们二百四十对,那我们肯定就需要用 八对三十二位的计算器进行表示,怎么来的呢?我们就以首先以中断开启为例,中断开启他对 个计算器,每个计算器是三十二位的,也就我们经常说零到三十一是三十二位的,而我们的二百四十个中断,那么他的开启要开启这二百四十个中断,那么他就需要二百四十个比特进行表示, 因为每个比特的等于一以后他对应开启对应的东转二百四十个比特,那我们按照三十二位这样划分的话,我们就会发现他是等于多少呢?二百四除以三十二,其实他他是等于七点五,对吧?七点五实际上就是等于七乘三十二,再加上十六, 七乘三十二,二百二十二,二百二十四,加上十六就等于二百四,所以它总共就有七点五个这样的一个计算器,这样的一个开启计算器。但是我 发现我们的计算器是三十二位的,因此我们就把七点五给它向上取整,那我们就是八个这样的一个开启计算器。八个开启计算器,那我们每个计算器, 每个计算器是三十二位的,那么每个计算每个三十二位中的每每一个比特就代表一个中段的一个开启位,那我们八个计算器的话,那么因为我们只有二百四十个中段,所以说我们只需要 前面的七个就零到七,这七个计算器的三十二位全部占完,那我们第八个这样的一个计算器,他只需要用到低十六位,那高十六位就保存就可以。因为我们第十六位 就是加上我们前面的这个七个计算器中的三十二位,那我们加上其实他就是二百四十个比特,二百四十个位,所以这就是他就 我们对应的二百四十个中断,他的开启计算器就需要八个,而我们他的关闭,因为他对中断关闭是要其他计算器的对应的未进表示的,所以他关闭也需要八个, 这就是我们这里讲的二百四十个中段,他就分布在八对,八对,也就是八个 三十二位的一个开启计算器和八个三十二位的一个关闭计算器。然后刚才我们也讲了,我们总共二百四十个,那我们八乘三十二十三等于二百五十六的,但我们这样的话,我们就是最后一对, 就是最后一个计算器,也就是第八个、第七个计算器,我们他的高十六位是没有使用的,做一个保留的,这个为什么是最后一对是没有用完?给大家解读 都清楚。然后这里就是具体的一个操作,对应的一个基准基准的某个位,也就我们需要开启某一个中段,那我们就需要把这个基准基准的 对应的一个 set e、 n a, 然后这个位把它设置为一,如果我们关闭某个中断,那我们就需要把 对应的计算器中的这个 clear, clear e、 n、 a 这样的一个计算器设置为一,那我们就可以关闭中断。当然如果我们这样给他们写零是不会产生任何效果的,因为他是一写一有效,写零是无效的。 然后通过上个上述方式以后,我们的一个中断的一个开启和储能,就只需要把当四位写成一,其他位可以全部为零,这样就不会像我们以前那样,就是 可能害怕某些位被写入零以后,而破坏了我们对那个中断配置,因为我们,对我们哎,对于我们的 sm 三二来说,显灵是没有任何效果。我们这句话怎么去理解呢?我们要解读一下,比如我们之前说刚之前 所说的,或者刚才所说的我们五月单面机,他某个中段是用一个比特位进表示的,当这个,当这个 beat 等于一的时候,他就开启啊,等于零的时候就关闭,而这样就会出现一个问题,就是我们不小心,有的时候不小心把这个,把这个 计算器中的某个彼得位把它设置为零了,那我就可能不小心把我们想要的其他中断给屏蔽掉了,就屏蔽掉,这样就导致我们程序中可能出现一些就是无法想象的一些隐藏的一个 bug, 而我们从 s m 三二来说话,那就不会,它就不会存在 这种问题,它可以很好的去避免它,因为我们显灵是没有任何效果的,并且它的一个中断的开启和关闭是用不同的计算器中的不同的未进行表示的。 好, ok, 那我们接着讲,就是我们上述都讲了,就是我们的 set e n a 是开启中段,然后 clear e n a 是关闭中段,然后每个中段有对应的一个对应的一个比特的 set e n a 和 clear e n a, 所以说他总共就二百四十对,然后每对因为一个计算器是三十二位的,所以说我们需要用八对进行存放,那八对存放中其中最后一对他是没有用完的, 那存放方式就用与下面这样的,就是 set e n a 零一二三四五六七,然后这样存放,这是我们存放, 那我们这个然后中的就代表可以代表就是零到三十一个中段就总共三十二个,然后从这里就开始就三十二到六十三,也是三十二个。好,最后到这里这里的话就二百二十四到二百三十九,也就只需要十六个处使人位就可以了, 那同点我们的 clear, 也就我们的储能计算器也是同样的这八对, 我们在特定的芯片中,只有芯片实现了中断,然后对应的位才有意义。这里特别要记住, 如果我们只使用了三十二个中段,比如我们的模块送三二单面机,它只有三十二个外部中段,那么它的 city 已经 a 零和 clear a 零,它才是有用的,因为这一个计算器 就可以代表三十二,就有三十二个位,就可以代表三十二个中断,那我们的其他的 set e n 一到七和肯尼尔 e n a 一到七就不会有任何意义,因为都没有那么多中断,这个大家一定要注意一下。 那接下我们就说中断的一个悬旗和结挂,同样的他也是按照我们前面这样的一个讲的一个方式来的,他是有也是有一个对折进行实现的。 我们需要把这个中断发生时,因为他要处理同级或者高预限级的异常,或者可能会被屏蔽,然后中断就不会得到及时响应,这个时候我们中断就会被挂起,也就是对那个标志也会 之一,那这个中断了挂起,那么也是用一个计算器中的某一个位进行表示。而我们有的时候我们中断挂起, 后面又要去响应,他就需要进行中断的解挂,解挂的时候他就要用另外一个计算机的某一个比特位进行表示,其实他也是以对折形式进行访问的,就和我们这个中断的开启和关闭是一样的,那同理,他有我们理论上支持二百四十对二百四十个中断,那我们就有对应的一个 二百四十对这样的一个中断挂起和解挂的一个计算器,然后每一对的每一对他就是三十二位的,这就是这里的一个排布。 那同理,如果我们只有三十二个中断的话,那我们就只有这个计算器,是有这个计算器和这个计算器,也就是这个挂起和解挂证这个第零个计算器他才是有效的,那其他这里的一到七是无效的,这要根据我们要支持的多少个 外部中断来决定的。那中断优先级,这个中端优先级也是同理的,我们每一个中段他都都有一个对应的优先级, 然后每一个计算器占用八个位,然后我们用允许使用的是最是是最高三位,就是 msb 的方式进行存放的,我们之前也讲过, 然后四个相邻的,因为他是每个计计算器占用八位,但是我们一般都会以三十二位的计算器三十二位的进行访问的,所以说我们把 四个相邻的计算器,然后每个计算器是八位,我们就可以把拼接成一个三十二位的计算器, 看拼接成把四个相邻的,把拼接成三十二位计算器进行访问,那根据我们的之前讲解优先去设置的时候,我们可以知道我们优先 分为高低两个字段,然后分别是高段表示强占式优选级,低段表示响应式优选级。所以说我们这个优选级分组的时候,我们每一个计算器他就对应了一个强占式和响应式优选级,然后我们根据 到底要用多少个位,就表示这个墙上是优先级,那我们就可以把我们的中断优先级就可以设置好了,这个我们可以参一下,参考一下之前视频,之前讲解优先级配置的时候会讲过的啊,这里是对那些配置中的具体要操作的基准器进行讲解的 啊,这个可以看一下结合这个图啊,结合了,然后结合我们之前视频就可以看出到底是怎么去设置的。我们之前讲的已经讲的非常详细,我这里就不再过多的去强调了。这就是我们对应的一个计算器, 他作用中断的活动状态计算器,也就每个中断他都有个活动状态位,到底他有没有进行运行,那我们肯定有一个标志可以标识他是否有,有没有运行啊?这就是他那个活动计算器。
因伟大于近日更新了四九六点七六版的驱动程序,这版驱动除了增加对部分游戏的优化支持之外,还增加了 dlss 二点三版本以及全新的实验性技术 nis 功能。 nis 简单的描述就是图像缩放技术,其功能大致就是通过对图像缩放计算光照分布,再适配到分辨率上,借此获得更高的显示帧数。这个功能的效果不是这条视频的重点,各大博主都 都有掩饰,感兴趣的朋友可以自己去查找。老杨这条视频主要是介绍一下这个功能如何使用,以及使用中要注意的问题。首先打开 更新驱动至四九六点七六版本。更新后,在设置页面你会看到如图所示的选项,在实验性功能前面把勾打上,接着你会看到这个项目,打开此项目选择分辨率,这里老杨建议选择百分之五十。接着程序 会提示是否优化游戏,至此这个功能就算打开了。进入游戏后,游戏的左上角会出现绿色的 n i s 角标,表示此功能在游戏中已经打开。 如果 ni 显示的是蓝色,则表示只启用了锐化,而图像缩放并被启用。使用方法介绍完了,说说老杨对这个功能的使用感受吧。这个功能对九系列、十系列、幺六系列的显卡在 部分游戏中的提升还是比较大的,确实可以在一定程度上提升游戏帧数,但在二零和三零系列显卡上则影响不大,更推荐使用 dlss。 下面说说其他主播没有说的事项,就是开启 此功能后,你的显示器无论有没有高刷功能,刷新率被设定为最高六十。其实六十的刷新率对于三 a 游戏完全足够,但是对于电竞类的游戏则相当不友好。譬如幺六六零这个级别的显卡,玩英雄联盟这类游, 游戏可以轻松幺四四刷新率,但使用了这个功能后,只能锁定六十的刷新率。所以老杨的建议是,如果你的显卡是九系列、十系列、幺六系列,那么这个功能对你玩三 a 游戏的帧数提升是有帮助的。但如果你玩电竞类,例如英雄联盟、 cs, go 这类游戏,还是要慎用。最后 要说的是,毕竟是实验性功能,在软硬件 pk 上存在一定的问题,比如说有的时候会降真、画面不稳定,某些游戏本甚至会黑屏等等,无脑黑或者无脑铁都是不可取的。
好,各位单边机小伙伴,你们好,我们接着上讲视频,继续啊,那么我们上讲呢,主要讲了这个中断线啊, 中断线以及中断初始化的一个配置,对吧?那么配置完毕以后啊,我们接下来需要进行一个什么配置呢?就是一个中断优先级的一个配置哈, 那么我们现在看第六十行啊,那么啊,关于这个 pa 零啊, vcap 按键,他的一个优先级的一个配置啊,我们学习一下啊,我们看第六十一行,对吧?那么首先呢,这是一个结构体变量,对吧?我们在这个 这个程序的开始啊,就是第二十六行,看到没,他定义了一个,呃,叫什么?结构体变量,对吧?中断优先级管理的一个结构 底变量, a v i c, 对吧? you need the structure, 那么通过这个结构底变量呢?对吧?好,通过结构底变量,我们对他的这个优先级啊进行一个设置啊,首先看一下第一个参数,就是你是哪一个对应的是哪一个外部中断啊? 那么 p a 零呢?是,呃,对应的是外部中端线零,对吧?外部中端线零的那么这么一个变量啊,我们该去哪里去找呢?哈,我们在这个地方啊,我们如果是在这个地方找的话,比如我们双击它,对吧? f 十二, 我们找这个外部中断线零的时候啊,我们是找不到的哈,你看第一个呢,是这一个 state 哈,还有它, 还有他,我们通过这个双击他,对吧?比如说双击他其实是找不到的啊,这是我们找不到这个外部中断线零对应的这么一个, 怎么呢?标识啊,标识对不对?那么他这个标识是在是在哪个文件去找呢?哈,是这样的,我们我们这个在这找啊, 我们双击这个变量以后呢,我们这个按这个 ctrl c 啊, ctrl c 复制一下啊,然后呢我们按这个 ctrl f, 我们查找一下哈,在这个 find 啊 infos 在文件中进行一个查找啊,好,我们这个嗯,他自己默认就粘过来了。 那我们点 final 啊,这里呢,我们看一下啊,是在这个 s t m 三二 f 幺零 x 点 h 文件的第一百八十六行哈,是有是有它的啊,我们双击一下, 看到没?一百八十六行,对吧?看到没?这啊,这个就是外部中断线零啊,对应的这么一个标识啊,是在这个文件里面啊。啊, 那么这里呢,我们看一下它的中端线,你看这叫 exti 零啊, interrupt 啊,叫外部中短线零啊,对应的一个中段是这么去,是这么去写的啊, 那么后面呢,还有一个外部中段线五,对吧?还有一个外部中段线十五,那该如何去写呢?对吧?你看这个地方是叫外部中段线五 啊,外部中断线十五,我为什么要这样去写呢?对不对?为啥要这样去写?我们一起来看一下啊,我们返回, 那么外部这个是呢?外部中断线零的,对吧?我们再往下啊,就没有了,对吧?没有了主要原因是什么啊?是因为这个,你看这是中断号啊,十七,对吧?中断号,然后十八啊十九,他是连起的啊, 这里呢是 ld, 对吧?这是小容量,对吧?我们的 stm 三二,呃,单片机呢?它是一个大容量产品啊,大容量产品,嗯,我们要找 hd 啊我们找我们要找 hd 啊, 这里怎么找啊?我们再和大家这个一起复习一下啊,怎么找呢?我们这个看 看下程序哈,我们先找到这个 m d 呢是中容量啊, h d 呢是大容量啊,我们双击它啊,复制啊,开发文档点开以后呢,我们点查找啊,关掉,我们点它啊,我们点查找, 这里有啊,你看这个,这个 mini 开发版呢,它采用的是这个幺零三 r c t 六呢,它属于大容量产品,所以在启动文件的时候呢,要选择它 h d, 要选 h d 啊,它这个结尾它哈 h d 就代表大容量,对吧?那么大容量呢,它对应的这个 flash 呢,是大于等于二百五十六 k 啊,大于等于二百五十六 k, 嗯嗯, 大于等于二百五十六 k 的话呢,那么它的这个 flash 哈,那我们这个 s t m 三二,我们这个 mini 开发版的 flash 有多大呢?我们也可以搜索一下,我们通过搜索找一下 plus 啊, plus 查找 s t s 二这个 flash 的一个简介,对吧?第四百九十一页啊,我们选择之后,您看 s t m 三二 f 幺零三 r c t 六,对吧?这是迷你开发版,选择的是 s t m 三二 f 幺零三 r c t 六,它的 flash 容量呢是二百五十六 k, 对吧?二百五十六 k 的话,那不就是 大容量了吗?对不对?二百五十六 k, 刚才也说了,对吧?刚才也说了,那么如果是这个, 那么我们复制一下,对吧?复制一下还是要通过查找啊,查找查找以后呢啊,这里就是定点,如果是大于等于二百五十六 k, 那就是大容量,对吧?大容量的话呢,就是 h d, 是吧? h d 结尾的,那所以在这个程序里呢,我们就选这个 h d 结尾的啊, 那么这里呢啊,他往下找,那么这是十八对不对?我他的中段中段号是十八对吧? 其实那么和这个是接起的啊,啊,中大号十七对吧?那么从零到十七呢,不管你是小容量,中容量还是大容量啊,都是 在这里面去找,对不对?如果中的号大于了十七以后呢,要根据你的产品进行一个寻找了啊,如果我们是大容量的,我们去找 hd 对吧? hd d h d 对吧?这是中段号十八十九啊,是连起的吧,和上面的十七都是连起的,那么我们找这个外部中端线零啊,我们从柱结里看啊,你看到没, 某外部中段线零十到十五的话呢,都要写它,对不对? 那么三百零三行啊,外部中端线五和到九啊,我们都要写他啊,他们是共用的啊,都要写他, 所以说啊,这么几个来源哈,他对不对?还有他,还有他这三个的来源哈,如何去写对不对?如何去进行一个查找,我们应该都知道了吧,他是在这个文件中啊,叫 st m 三二 f 幺零 x 点 h 啊,文件中进行一个啊查找的哈,啊, 好,我们这个第六十一行讲解完毕了哈,那么第六十二行对吧?那么这是这个配置,抢占优先级为二对吧?强占优先级为二,那么这里呢,我们之前也是讲过的啊,对吧?我们看这个闷函数, 那么第十五行对吧?中段优先级分组啊,设置为组二对吧?组二的话就意味着有两位, 有两位二斤之数呢,来控制抢占优先级啊,两位二斤之数呢,来响应优先级,那么两位二斤之数啊,强占优先级,有两位二斤之数来表示的话,那么他就可 可能是四种情况,对吧?零零零幺幺零和幺幺啊,那么对应的时禁制就是零一二三,对吧? 同样的哈,那么也就是说抢占优先级呢,他就是就是从零到三啊,你可以随便选,对吧?那么响应优先级呢,同样呢,也是从零到三随便选,对吧?那么在这个 这里呢,他选的是抢占优先几啊,他设置的是二啊,这个就无所谓了啊,你想设置成几就设置成几,只要是介于啊零到三啊, 啊零到三啊,你随便选一个都可以哈,这个口号呢,要用显着。英文模式下的括号啊,英文模式下的括号啊,零到三啊,随便 选都可以,对吧?保存一下,那么子优先级呢哈,他也是由两位二十斤之处来控制的,可选范围呢,也是啊, 零到三,对吧?零,这个零到三是我说的是十进制的零到三啊,那么如果是二进制的话,那就是零零啊,零幺幺零幺幺,对吧?那么他这里呢,这是十六进制啊,零 x 零二,对吧?那我们可以看一下十六进制, 我们把它调成这个什么程序员模式啊,程序员模式以后呢,这里呢,我们清零哈,十六禁制啊, h e x 十六禁制,对吧?他是零 x 零二,对吧?那就是零二,好看没?十六禁制啊, 他就是二啊,十进制啊,也是二八进制,也是二二进制呢,就是零零幺零啊, 好理解吧,对吧?好,关掉它啊,那么子优先级呢,设置成这个二,对吧?这个是随便的啊,不固定啊,只要是零到三啊,你随便选就可以,你不要选个五和六啊,那是,那就会给你报错的啊, 那么这个第六十四行呢,就是 in naple 了,叫死能外部中断通道啊,这个没什么好讲的, 那么第六十五行呢?哈,这个套路都是一样的哈,那么通过结构体变量啊,把这些这些成员变量设置完毕以后,那么就是 啊啊,通过这么一个函数,对吧,然后取地址运算符对吧,取地址运算符啊,然后再加上这么一个节油体变量,好,那么整个这个中短优先机啊,那么 pa 零啊, vcap 按键的这个优先机就 通通啊,设置完毕了啊,就这么简单,好,对吧,那么你像 这个啊, pc 五的一个设置,对吧,那我们就我们就不再追述了啊,这一模一模一样的啊,那么 p a 幺五啊,对 k e y e 他的一个优先级设置,那也是一模一样的啊,我们也不在啊,也不在这个详细展开讲了,那么通过这么一个设置呢,我们来复习一下啊,那么首先你看啊, v cup 按键的这个强占优先机是二,对吧,那么这个呢, k e y 零呢,强占优先机呢,也是二, 嗯,这个 k e y 一啊的按键的抢占优先机呢,也是二,对吧,那么这三个按键谁的优先 最高呢?哈,那我们只有通过子优先级来进行一个判断了啊,那么 vcap 子优先级是二,对吧? k e y 零呢,子优先级是一, k e y 一呢,指优先机是零啊,我们之前学过的这个数字越小,你的优先机越高啊,所以呢, k e y 一啊的优先机啊,是最高的啊,也就是说当三个按键啊同时按下的时候,那么单片机呢?啊,只会执行我们 k e y 一啊 的一个功能哈,也就是说单片机呢,只会执行这个函数哈, p a 十五对应的这个函数哈,那么这两个函数是不执行的,为什么呢?因为 k e y e 的 什么优先级是最高的啊,是这么一回事啊,好,那么我们本讲视频内容先分享到这啊,感谢各位的一个观看。
各位同学大家好,我是铁头山羊,今天呢,我们继续学习本套教程的第三章中段编程。今天我们要学习第二节 n v i c。 那么首先我们通过第二点一节对这个 nyc 模块做一个简单的介绍,到底什么是 nyc? 所谓 nyc 呢,这四个字母其实是四个英文单词的缩写,分别叫做 nested vector 的 interrupt controller, 其中这个 nested 代表嵌套 vector 的呢,代表向亮。 interrupt 是中段,也就是我们所说的中段编程的这个中段 ctrl 呢叫做控制器,所以我们把这四个英文单词给它连起来,那么它的中文含义就叫做嵌套中段限量控制器。那么这个嵌套中段限量控制器到底是什么呢?我们需要回顾一下我们 之前所学的这个 s t m 三二的一个编程模型。我们来看左下角的这张图,这个是我们非常熟悉的这个 s t m 三二的一个编程模型,在这个编程模型的最中心呢,就是我们所熟悉的这个 cotex 杠 m 三内核,我们一般把它叫做 c p u, 对吧?我们经常这么说。 然后呢,在这个 cpu 的周围,它有很多的模块儿负责执行具体的功能。我们把这些模块儿呢叫做片上外设,也就是 on cheap prefer。 我们之前学习过两种片上外设,一种呢叫做 gpl, 他是直接负责这个爱护管理的。另一种片上外设呢叫做 afl, 这个 aff 呢负责副用功能的重新设。 那么我们今天要学习的这个 n y c 模块呢,它并不是一种片上外设,跟之前所学的这个模块呢不一样,它是为 于 cotex 杠 m 三内核内部的一个模块,我们将这个 cotex 杠 m 三的这个内核给它放大,我们得到右边这张图,在右边这张图里边呢,这整个表示一个内核,然后在内核里边它有很多的模块,其中第一个就是这个 nyc 模块,就是我们要学习的这个模块。 由于这个 mac 呢,它位于 cotex 杠 m 三内核的内部,所以我们把这种模块叫做核心外设,靠 prefer 啊,跟我们之前所学的片上外设 on cheaper prefer 是有区别的, on cheaper prefer 也就是片上外设,它是位于这个内核的外部的, 而这个靠 prefer 核心外设呢,它是位于内核里边的,这个呢大家要加以注意。了解了这一点之后呢,我们再来看一下这个 mac 具体是用来做什么, 其实他就是负责管理中断的。第三章的标题呢,叫做中断编程, 而我们今天所学的这个 nyc 模块呢,直接负责管理中断,所以呢它跟这个中断编程是息息相关的。那么总结一下, 所谓 nyc 模块呢,就是我们 cotex 杠 m 三内核里边的一个核心外设,它的主要功能呢就是负责管理中断。 那么在了解了 nyc 是什么之后,我们想要去探究一下这个 nyc 的一个工作原理,那到底是如何工作的呢?下面呢,我们就通过第二点二节,先认识一个概念,叫做中断的协作模型。我们来看一下这个中断协作模型。 首先我们问一个问题啊,到底什么是中断的写作模型呢?这个我们就需要回顾一下我们之前所学的左下角的这张图,我们之前曾经学习 过使用这个四个箭头来表示中断的四个阶段,对吧?其中下面这个箭头表示中断源的触发,这里呢表示中断的进入,这里表示中断的响应,最后这个箭头呢,表示中断的退出。 那么在 s t m 三二里,它的每一个阶段呢,都需要涉及到这个 s t m 三二的不同部分,也就是说我们这个 s t m 三二里中断的响应过程,它是由多个模块儿协作完成的。 为了让大家了解清楚这个协作关系,我为大家绘制了右边的这个图,这个图呢,我们就把它叫做中断的协作模型。 那么具体我们这个中断协作模型的这张图表达什么含义呢?我们具体来看一下,我们可以通过两条线呢,将下面的这张图给他分成三个部分啊,分别是这里一条线, 这里一条线。这样呢,我们将这张图一分为三了。那么其中第一部分呢,负责中断源的产生,也就是这个位置产生一个中断源。第二部分呢,负责中断的管理,包括中断的进入、中断的响应,以及中断的退出。 那么第三部分呢,负责存储我们的这个中断响应函数。我们先来看中断源的产生,我们知道这个 s t m 三二的中断处理过程呢,是从中断源触发开始的,那么这个中断源有谁产生呢?答案就是通过这个片照外设, 也就是我们编程模型里边这个 cpu 四周的那些模块啊,就是由四周的这些模块负责产生这个中断源,我们具体来看一下这张图,在这张图里边呢,每一个向右的这个箭头呢,就表示一种中断源, 对于具体的片上外设来说,它可以产生一路中段源,也可以产生两路中段源,有的片上外设呢,还能产生多路中段源,还有一些片上外设,比如说我们学习的这个 gpl 啊和 a f i o 它们这两个片程外设呢,是不能产生中断元的,这个产生中断元的数量根据模块类型的不同而有所区别。 然后呢,我们再想一个问题,我们的这个 s t m 三二的芯片内部呢,有很多的片场外设,如果是几乎每一个片场外设都能产生一个或多个中断源的话,那在这个 s t m 三二芯片内部得有很多的中断源, 那这么多的中断员由谁去管理呢?答案就是这个 nyc 模块。这个 nyc 模块具体负责的工作是什么呢?他是如何对这个中断进行管理的呢?其实我们笼统的来说, nyc 模 块负责左边这张图里边的中断进入和中断退出,在中断进入的时候, nyc 需要保护现场,在中断退出的时候呢, nyc 需要还原现场。除此之外, 这个 nyc 模块还负责进行这个中断优先级的设置以及中断仲裁相关的工作。这个呢我们后面会具体介绍到。 然后我们再来看这个重大响应模型的最后一部分,也就是这个 flash 存储器,大家还有没有印象这个 flash 是用来做什么的呢?其实啊,我们多次介绍过这个 flash 呢,就是我们单片机里面的一个止毒存储器,它的地位呢就跟电脑里面的硬盘是一样的,用来存储我们所写的这个程序。 哎,我们说在我们的中断的响应过程中,我们需要调用这个中断响应函数,那么这个中断响应函数就是我们所写的 一段程序,它是不是也应该存储在这个 flash 存储器当中,所以呢,这个 flash 存储器就是用来存储我们中段响应函数的,它在我们这个中段协作模型里面也是不可缺少的一部分。那么总结一下 我们的这个中断协作模型呢,就是用来表示中断处理的过程中, s t m 三二内部的一些模块,他们相互之间的一些分工关系。我们可以将这个中断协作模型呢分成三大块,其中呢最左边的这一块是中断源的产生,产生中断源是由片场外设进行的, 然后呢这些中断源产生之后,需要经过这个中断的管理,而中断管理负责进行中断管理呢是这个 m i c 模块,然后这个中断触发之后需要被响应,那么响应其实就是调用这个中断响应函数, 这个中断选项函数呢继续存储在这个 flash 存储器当中,这个就是中断协作模型的一个作用。看完了这个中断协作模型之后呢,我们再来看一下,对于我们中断处理来说最重要的一个模块,也就是这个 nyc 模块, 它的一个内部结构,从它的这个内部结构里面呢去详细解释这个 n i c 运行的一个原理。那么我们就来看第二零三节 n i c 的内部结构, 这个是我们的中断协作模型,我们把中断协作模型里边 nyc 这一部分给它放大,就得到了右边的这张图,我们来仔细看一下右边的这张图啊。首先来看这个中断源, 嗯,对于我们的这个中断协作模型来说,中断源是由片上外设产生的,我们这个 s t m 三二呢,它有很多的片上外设,那么大部分的片上外设它都能产 中断源,所以说,呃,这个 nyc 要管理的这个中断源的数量呢,也是很多。那么对于 cotex 杠 m 三内核内核内部的这个 nyc 模块来说, 他管理中断源的最大数量呢,就是八十一路,就是从中断源零一直到中断源八十。而我们实际的使用到的这颗 c 八 t 六的芯片呢,他只使用到了其中的六十几路中断源。从这个中断源往里走呢,我们会看到有一个开关, 那这个开关是做什么的呢?其实它是负责中断屏蔽的,什么叫做中断屏蔽呢啊?在我们的这个 s t m 三二里面呢,有很多路中断源,对吧?对于具体的某一个项目来说,我们肯定是只会使用到其中的一些中断源,那么一些使用不到的中断源呢, 我们就要对它进行屏蔽,也就是说我们把这个开关给它断开,那么这样的话,这些没有用的中断源是不是就不能继续往右传递到这个中断仲裁这个模块,进而去触发中断了呢? 所以这个就是中断屏蔽的一个含义,我们指闭合我们需要的这个中断源进行触发,然后呢经过了这个开关之后,我们继续往里走,就到了一个中断仲裁的模块。那么什么是中断仲裁呢?我们曾经介绍过这个中断呢,响应了,他是分优先级的, 那么优先级高的中段如果在中段排队里面呢,他就排在前面,如果是可以中段嵌套呢?那高优先级的中段呢,就可以去嵌套这个低优先级的中段,这个排队的顺序和是否进行嵌套是由谁来决定呢? 就是通过这个中断仲裁模块。那么我们在中断仲裁的过程中,是不是也需要去参考每一路这个中断的优先级呢?中段优先级存储在哪里呢?其实就是通过这啊这么四个比特位进行存储的,那么 大家可以看到每一路中段他都有四个比特位负责存储这路中段的优先级,对吧?在进行中段仲裁的过程中呢,他就把这个中段存储的这个中段优先级拿出来进行比较,来决定中段排队的时候谁排在前边,那是不是要进行中段嵌套啊?他就是以这个为依据的。 我们再来看这个中段优先级呢,他这里有一条虚线,将这个中段优先级的四个比特位呢分成两部分,而且呢上面还有一个左右可以移动的这个箭头,这个表示什么含义呢?其实这个就表示一个中段优先级的分组 啊,英文呢叫做 interrupt priority grouping 啊,中断啊, priority 是优先,对吧?优先级 勾品呢是分组。那么这个中段优先级分组是什么意思呢?我们曾经介绍过,我们可以将中段的优先级呢分成两个部分,那左边的这一部分呢,叫做抢占优先级,对吧? 大家应该还有印象,右边的这一部分呢,叫做子优先级,其中这个子优先级呢,只在这个中段排队的时候有作用,而抢占优先级呢,他啊,他决定这个中段是否会发生欠套。 如果这个新的中断员的抢占优先级高于正在被处理的这个中断的抢占优先级,那么他就会进行中断欠套。所以呢,我们可以通过这条虚线将中断的优先级呢啊,分成两部分,他是可以调节的,比如说这条虚线在最左边,那么 就表示有零位抢占优先级和四位子优先级,也就是说所有的这四个比特位呢,都会作为子优先级啊,这种情况下呢,不会发生中段欠套,因为他们的这个中段的抢占优先级呢,都是相同的。 除了这种情况之外,我们还可以划分一个最极端的情况,就是所有的四个比特位呢,都作为此优先级来使用, 那我们还可以干什么呢?我们还可以把这个虚线呢放到这个位置,就是一位是抢占优先级,剩下的三位呢,作为自由先级,我们可以把它进行评分,两位作为抢占优先级,那么两位作为作为自由先级,也可以是三位作为抢占优先级,一位作为自由先级。 那么如果我们是最上面的这种情况,那么我们的抢占优先级就只有一级,而此优先级呢,有二的四次方体, 也就是十六级,对吧?分别是从零到十五,那么就是这四个比特位。那么如果是下面的这种情况呢,那么抢占优先级就有两级啊,或者是零或者是一,对吧,就这一个比特位,他或者是零或者是一, 那么子优先集呢,就可以有八集,分别是从零到七,也就是从零零零到这个幺幺幺,那么下面的情况以此类推,这里是呃二的二次方,二的二次方也就是四个抢占优先集,四个子优先集,再往下呢就是八个 啊,抢占优先机和一个子优先机。那么最后一种情况呢,就是全部的都是抢占优先机,也就是按二的四次方,也是十六路的这个抢占优先机。 那么最后呢,我们再来回顾一下我们刚才所学的这个东西,我们来看这个 n y c 的内部结构,跟我们之前所学的模块相比,它还是比较简单的,它主要呢就 负责这么几个东西啊,第一个呢,他负责接收这些中断员啊,这个 nyc 模块呢,能够处理各种各样的中断员,他最多呢能够处理八十一路,也就是从这个中断员领赢到中断员八十。而实际呢我们只使用其中的一部分, 那么这个中断源往里呢,就是这个中断屏蔽,也就是我们能够使用到的中断源呢,我们把这个开关给他闭合,我们不需要使用的中断源呢,我们把它给断开,这样呢,即使这个中断源触发了,他也不会进一步的传递到这个 mac 的模块的内部,进而去触发一个中断, 这个叫做中断屏蔽。然后我们啊还有这个中断的仲裁,那么这个中断的仲裁呢,就是决定我们排队的时候,或者是中断欠套的时候,他的中断执行的一个顺序或者是规则,这个中断仲裁呢,他必须要有所依据,对, 对吧?它的依据呢就是每一路中断的这个中断优先级。那我们这个 nyc 模块的内部呢,也有一部分这个空间是用来存储中断优先级的,每一路呢,它都有四个比特位用来存储这个中断优先级, 这个中段优先级呢进一步的可以进行分组,那么左边的呢叫做抢占优先级,右边呢叫做子优先级,我们通过调节这条虚线的位置来分配这个抢占优先级和子优先级各自占几个比特位,也就是说他各自有几级 啊?这个就是我们这个 nyc 的一个内部结构的含义。那么学习完了这个 nyc 的内部结构之后呢,我们继续 再往下看,我们来学习一个非常非常重要的东西,叫做中断限量表。首先我们对这个中断限量表的概念做一下解释,到底什么是中断限量表呢? 要想解释清楚这个中段限量表的概念呢?我们需要借助一下我们刚才所讲的这个中段协作模型,比如说这里是我们刚才所讲的这个中段协作模型,我们假设在这个中段协作模型里边有一个片上外设二,这个片上外设二呢,他有一个中段源,某一个时刻这个中段源出发了, 那么他就会经过 nyc 进行仲裁,最后去调用他的中断响应函数。那么所谓这个中断响应函数呢,就是我们为处理这个中断所编写的一段代码, 既然它是一段代码,所以它肯定存储在我们的这个 flash 存储器当中,但是呢,在我们这个 flash 存储器里面,除了呃这个中断元所对应的中断响应函数之外,还有别的代码,比如说其他的中断元所对应的这个中断响应函数,以及闷方法和被闷方法调用 的一些其他的方法啊,总之有很多的这个代码。那我们的这个 cpu 当中段发生的时候,是如何去定位到我们这个中段人员所对应的中段响应函数的呢?答案就是通过这个中段限量表,我们可以把中段限量表呢看成中段响应函数的一个目录。 既然是目录呢,它一定是位于这个 flash 的最前面的这个位置, 所以这里有这个中段销量表的定义。他说这个中段销量表呢,是位于 flash 存储器地址零开始的一段区域, 这段区域呢,他是按照中段号进行排序的,比如说中段号零的目录呢,就在这个位置,然后这是一号中段、二号中段、三号中段,一直往下排啊,一直到这个八十号中段啊,等等等 等等啊,一直往下排下去。那么它存储的时候呢,是每四个字节作为一个单位去存储重量响应函数的一个地址。那我们编写的这个重量响应函数呢,它是这个 flash 里面的一段代码,所以它本身呢有一个地址, 比如说我们的这个重量响应函数,它的编号是零,地址是零 s 零幺零零四零零 c。 那么在实际的使用过程中呢,这个零 s 零幺零零四零零 c 就被复制到这个零号中断的目录里面,也就是这里是零 x 零幺零零 四零零 c, 那么啊,当这个中断源发生的时候, cpu 会去这个中断下降表里面去查零号中断所对应的这个地址,然后 通过这个地址呢找到具体的中段响应函数去调用这段代码。那我们说为什么这个呃中段限量表的每一个目录它是以四字结进行存储的呢? 这个就呃需要,需要说到我们之前所讲解的一个知识,就是我们的这个 s t m 三二单边机呢,它这个三十二位代表它的地址的表示方式是使用三十二位二进制所表示的,也就是我们用四个字节去表示一个地址, 当然我们这个函数它是 flash 里面的一个地址,我们也用四个字节去表示,这就是为什么我们的这个中段限量表呢,它每一份是四个字节。在了解完中段限量表的这个概念之后呢,我们再来看一下第二点四点二节,在参考手册中去查阅中段限量表。我们说在参考 测中查阅重量限量表呢,是我们编程的一个非常重要的基本功,那么为什么他如此重要呢?我们先暂时不解释这个问题,等到后面我们使用到的时候,我们再去慢慢的体会他。 那么如何在参考手册中去查阅这个中段限量表呢?啊?我们之前讲过,对于我们这个 s t m 三二编程来说呢,它有两本手册,其中呢一本手册是这个 d s 五三幺九这个手。
dlss, 我们又叫大力水手,它是一种基于超级采样算法的深度学习技术,其目的是让显卡以低分辨率渲染,以高分辨率输出,从而达到在尽可能不影响画质的情况下,既提高游戏运行时的帧数表现,又降低显卡的负载。听上去是不是很魔幻,通俗 的表达就是不吃草的马儿还跑得快。其实相似的功能 amd 也有,叫做 fsr, 而二者的不同之处在于,大力水手会使用画面的前后针去实现超级采样,而 fsr 仅仅依靠单针画面即可部署算法,所以大力水手一定要是硬件上具有特殊的计算单元, fsr 则不需要,而二者的共同点就是都需要游戏软件内加入特殊的算法。那么两家旗鼓相当的技术到底哪家强?同时支持两 两种算法的游戏之前并不多,最近刚发行的 ps 前独占大作战神则两种皆可,我们下面就以这款游戏来测试一下到底哪家强测 显卡使用 rtx 二零、六零,在 rk 分辨率下分别选择不同档位的超彩样效果,来看看帧数以及画质的区别。 f s r 通过测试我们不难看出,无论哪种算法,对帧数的提升都是显而易见的,甚至比超平来的更明显。接着我们选取两种算法中的平衡模式,来看看相同游戏、相同场景二者的帧数和画质的区别。先看帧数, 我们再根据截图对比二者的画质, 通过截图,至少我没有察觉出二者的明显差别。最后要告诉大家的是,恩卡阵营只有二零和三零系列才可以使用大力水手功能,而 fsr 则是 a 卡、恩卡均支持。
英伟达显卡的 gf 控制软件有超多的高阶隐藏功能,你不会还不知道吧?在常规这里打开游戏内覆盖,点击设置之后, 会看到这里有性能监控、视频录制、直播推流、游戏滤镜的功能,只要在支持这些功能的游戏中按下对应的快捷键,就能启用功能啦!关注我,学干货!
高分辨率屏幕,但电脑硬件配置有限的情况下玩游戏,在游戏设置里开启英伟达的 dlss 或 amd 的 fsr, 则有助于呢提升整数,提高游戏的画面流畅感。你值 首先应回答 dlss 与 md 的 fsr 是什么?那其实是因为答与 md 分别针对自家显卡开发的一套画面超采用技术,樱桃尔呢,也有类似的技术,名为 xess, 其作用呢,都是通过降低油漆内的渲染分辨率,同时再通过人工智能算法模型或 a 加速硬件单元来拉伸输出画面,提高显示分。 简单说人话,就是电脑硬件的性能呀,有限的情况下,在游戏中设置开启了 dlss 或 fsr 功能后,可以改善和提高游戏帧数,甚至于大幅度提高游戏帧数,从而使得在不怎么牺牲游戏画质的情况下,游戏变得更加流畅。目前英伟达的 dlss 技术已经发展到了 二点三时代,且实际效果确实要比 amd fsr 一点零表现好不少,只不过只支持 rtx 显卡,且在温时及以上系统发现下,才能在很多游戏里设置生效。而 mdfsr 技术呢,也在今年发展到了二点零时代,据说二点零会在今年年终 是落地。此前的 amb fsr, 一点零不止可以支持 a 卡,还能支持 n 卡、 i 卡,兼容性呢,很强。不过由于支持开启此项技术的游戏实在太少, mb, 于是将 fsr 技术算法移植到了 a 卡的显卡驱动里。那这样呢,就绕过了游戏是否支持这个条件,这项技术被命名为 rsr, 那想开启 amb 的 rsr, 直接在 a 卡的新版显卡驱动里设置开启 rsr, 然后在游戏设置里调低画面分辨率即可。理论上呢,所有游戏在条件符合的 a 卡加时下,都可以通过开启 rsr 功能来实现更好的游戏体验。当然啦, 如果游戏设置里本身他就支持 fsr, 那就还是只开启 fsr 就行啊,避免同时开启引起的冲突。那值得注意的是呢, rsr 目前支持的显卡仅是 amd rhythm rx 五千系列显卡以及更晚推出的新显卡,并 并且需要在温室或温室业系统环境下才行。那如果你的电脑满足以上条件,那就赶紧试试效果。这里是电玩家,我们下期再见。