当前位置: 首页 > news >正文

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-14-主频和时钟配置

前言:

本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。

引用:

正点原子IMX6U仓库 (GuangzhouXingyi) - Gitee.com

《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》

正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档

正文:

本文是 “正点原子[第二期]Linux之ARM(MX6U)裸机篇--第14.1, 14.2, 14.3 讲” 的读书笔记。第14讲主要是介绍I.MX6U处理器的主频和系统时钟配置。本节将参考正点原子的视频教程第14讲和配套的正点原子开发指南文档进行学习。

0. I.MX6U系统时钟总体介绍

在前几章的时延中我们都没有涉及到I.MX6U的时钟和主频的配置操作,全部使用默认的配置,默认配置I.MX6U上电启动芯片内部 boot ROM 会把处理器工作频率设置为 396MHz。但是 I.MX6U 系列标准的工作频率为 528MHz,有些型号甚至可以工作到696MHz。本章我们就学习I.MX6U的系统时钟,学习如何配置I.MX6U的系统时钟和其他的外设时钟,使其工作在 528MHz,其它的外设时钟都工作在NXP推荐的频率。

1. I.MX6U时钟系统详解

I.MX6U的系统主频为528MHz,有些型号伸着可以跑到696MHz,但是默认情况下内部 boot rom 会讲 I.MX6U 的主频设置为 396MHz,这个我们在 9.2 小节已经讲过了。我们在使用 I.MX6U 的时候肯定要发挥它的最大性能,那么主频肯定要设置到528MHz(其它型号可以设置的更高,比如696MHz),其它的外设时钟也要设置到NXP推荐的值。I.MX6U的系统时钟在I.MX6ULL/I.MX6UL 参考手册》的第 10 章“Chapter 10 Clock and Power Management”和第18 章“Chapter 18 Clock Controller Module (CCM)”这两章有详细的讲解。

1.1 系统时钟的来源

打开I.MX6U ALPHA/Mini 核心开发板原理图,开发板时钟如图 16.1.1.1 所示

从图 16.1.1.1 可以看出 I.MX6U ALPHA/Mini 开发板的系统时钟来源于两部分:32.768KHz和24MHz的晶振,其中 32.768KHz是I.MX6U的RTC时钟源,24MHz晶振是I.MX6U内核和其他外设的时钟源,也是我们重点要分析的。

1.2 7路PLL时钟源

I.MX6U的外设有很多,不同的外设时钟源不同,NXP将这些外设的时钟源做了分组,一共有7组,这7组时钟源都是从 24MHz 晶振 PLL 而来的,因此也叫做7组PLL,这7组PLL结构图如 图 16.1.1.2 所示:

图 16.1.1.2 展示了7个PLL的关系,我们依次来看一下这7个PLL的都是什么做什么用的?

  • 1. ARM PLL (PLL1) ,此路PLL是同ARM内核使用的,ARM内核时钟就是由此PLL生成的,此PLL通过编程的方式最高可倍频到1.3GHz。
  • 2. 528_PLL(PLL2),此路PLL也叫做 System_PLL,此路PLL是固定的22倍频,不可编程修改。因此,此路PLL时钟=24MHz*22=528MHz,这也是为什么此PLL叫做 528_PLL 的原因。此PLL分出4路PFD(相位分数分频器),分别为 PLL2_PFD0~PLL2_PFD3,这4路PFD和528_PLL共同作为其它很多外设的根时钟源。通常528_PLL和这4路PFD是 I.MX6U 内部系统总线的时钟源,比如内部处理器逻辑单元,DDR接口,NAND/NOR接口等等。
  • 3. USB1_PLL(PLL3),此路PLL主要用于USBPHY,此PLL也有四路PFD,为 PLL3_PFD0~PLL3_PFD3,USB1_PHY 是固定的20倍频,因此USB1_PLL=24MHz*20=480MHz。USB1_PLL虽然主要用于USB1PHY,但是和其他四路PFD同样也可以用作其他外设的时钟源。
  • 4. USB2_PLL(PLL7),看名字就知道此路PLL是给 USB2PHY使用的。同样的,此路PLL固定位20倍频,因此也是480MHz。
  • 5.ENET_PLL(PLL6),此路PLL固定位20+5/6倍频,因此 ENET_PLL=24MHz*(20+5/6)=500MHz。此路PLL用于生成网络所需的时钟,可以在此PLL的基础上生成25/50/100/125MHz网络时钟。
  • 6. VIDEO_PLL(PLL5),此路PLL用于显示相关外设,比如LCD,此路PLL的倍频可以调整,PLL的输出范围在 650MHz~1300MHz。此路PLL在最终输出的时候还可以进行分频,可选1/2/4/8/16分频。
  • 7. AUDIO_PLL(PLL4),此路PLL用于音频相关的外设,此路PLL的倍频可以调整,PLL的输出范围同样也是650MHz-1300MHz,此路PLL在最终输出的时候也可以进行分频,可选1/2/4分频。
1.3 时钟树简介

在上一小节讲解了7路PLL,I.MX6U的所有外设时钟源都是从这7路PLL和有些PLL的PFD而来的,这些外设究竟是如何选择PLL或者PFD的?这就要借助《IMX6ULL 参考手册》里的时钟树了,在“Chapter 18 Clock Controller Module (CCM)”的 18.3 小节给出了 I.MX6U详细的时钟树图,如图 16.1.3.1 所示:

在图16.3.1中一共有三部分:CLOCK_SWITCHER,CLOCK ROOT GENERATOR 和 SYSTEM CLOCKS。其中左边的 CLOCK_SWITCHER 就是我们上一小节讲解的那7路PLL和8路PFD,右边的 SYSTEM CLOCK 就是芯片外设,中间的 CLOCK ROOT GENERATOR 是最复杂的,这一部分就像“月老”一样,给左边的 CLOCK_SWITCHER 和 右边的 SYSTEM CLOCKS 进行牵线搭桥。外设的时钟源有多路可以选择的,CLOCK ROOT GENERATOR 就扶着从7路PLL和8路PFD中选择合适的时钟源给外设使用。具体操作肯定是设置相应的寄存器,我们以EASI这个外设为例,EASI的时钟图如 16.1.3.2 所示:

在图 16.1.3.2 中我们分为了3部分,这3部分如下:

  1. 此部分是时钟选择源,ESAI有4个可选的时钟源:PLL5, PLL5, PLL3_PFD2 和 pll3_sw_clk。具体选择哪一路作为ESAI的时钟源是有寄存器 CCM->CSMR2 的 EASI_CLK_SEL 位来决定的,用户可以自由配置,配置如图 16.1.3.3 所示
  2. 此部分作为ESAI时钟的前级分频器,分频值由 CS1CDR的ESAI_CLK_PRED来确定,可以设置1~8分频,假如现在 PLL4=650MHz,我们选在PLL4作为ESAI时钟,前级分频器选择2分频,那么此时的时钟就是 650/2 = 325MHz
  3. 此部分又是一个分频器,对2中输入的时钟进一步分频,分频值由寄存器 CS1CDR 的 ESAI_CLK_PODF 来决定,可以设置1~8分频。假如我们设置为8分频的话,经过此分频器以后的时钟就是 325/8=40.625MHz。因此最终进入到 ESAI外设的时钟就是 40.625MHz。

上面我们以外设EASI为例讲解了如何根据图 16.1.3.1 来设置外设的时钟频率,其它的外设基本类似,大家可以自行分析一下其他的外设。关于外设时钟配置的内容全部都在《I.MX6ULL 参考手册》的第 18 章。

1.4 内核时钟设置

I.MX6U的系统故事中再前面几节已经分析的差不多了,现在就可以开始设置相应的时钟频率了。先从处理器主频开始,我们将 I.MX6U 的主频设置为 528MHz,根据根据图 16.1.3.2 的时钟树可以看到ARM 内核时钟如图 16.1.4.1 所示:

图 16.1.4.1 中各部分如下

序号描述
1内核时钟来源于PLL1,假设此时PLL1为960MHz
2通过寄存器 CCM_CACRR 的 ARM_PODF 位对PLL1进行分频,可选择1/2/4/8分频,假如我们选择了2分频,那么经过分频以后的时钟频率就是 996/2=498MHz
3大家不要被次数的2分频给骗了,此处没有进行2分频(我就被这个 2 分频骗了好久,主频一直配置不正确!
4经过第2步的分频之后的498MHz就是ARM的内核时钟,也就是I.MX6U的主频

经过上面的几步分析可知,假如我们要设置内核主频为528MHz,那么PLL1可以设置为 1056MHz,寄存器CCM_CACRR的 ARM_PODF 位设置为2。同理,如果要将主频设置为696Mhz,那么主频PLL1就可是设置696Mhz,CCM_CACRR的 ARM_PODF 位设置为1。现在问题很清楚了:

  • 寄存器CCM_CACRR的 ARM_PODF 位很好设置
  • PLL1的频率可以通过 CCM_ANALOG_PLL_ARMn 来设置。

CCM_CACRR寄存器的结构如下图所示:

1.4.1 PLL1 (ARM_PLL)倍频设置

《I.MX6ULL 参考手册》的章节 18.5.1.3.1 ARM PLL,说明了 PLL1 的是从外部 24MHz 晶振倍频而来,PLL1 的频率范围是从 650MHz ~ 1.3GHz,通过寄存器 'CCM_ANALOG_PLL_ARM' 的比特位 'DIV_SELECT' 可以选择输出的PLL1的倍频范围。

PLL1 的倍频输出计算公式为:

PLL output frequency = Fref * DIV_SEL/2

根据上面的计算公式,假如我们想要配置 PLL1 的倍频输出为 1056Mhz,计算出的的 'DIV_SEL' 值应该是 。

1056 Mhz = 24MHz*DIV_SEL/2;
DIV_SEL = (1056*2)/24 = 88

'CCM_ANALOG_PLL_ARM' 寄存器比特位 'DIV_SELECT' 定义如下:

寄存器 CCM_ANALOG_PLL_ARM 的关键位是:

  • bit[13] Enable:时钟输出使能位,此位设置为 1 使能 PLL1 输出,如果设置为 0 的话就关闭 PLL1输出
  • bit[6:0] DIV_SELECT,:此位设置 PLL1 的输出频率,可设置范围为: 54~108, PLL1 CLK = Fin *div_seclec/2.0, Fin=24MHz。如果 PLL1 要输出 1056MHz 的话, div_select 就要设置为 88。
1.4.2 PLL1 Clock Switcher 时钟源选择

在修改 PLL1 时钟频率的时候我们需要先将内核时钟源改为其他的时钟源, PLL1 可选择的
时钟源如图 16.1.4.4 所示,在《I.MX6ULL 参考手册》的章节 18.5.1.5.1 Clock Switcher 中:

思考:修改ARM主频为什么要切换时钟源?

为什么在设置 PLL1 (ARM_PLL) ARM 内核时钟的时候,要先将ARM内核时钟选择一个其他时钟源,然后修改PLL1的时钟频率,最后在将ARM内核的时钟源再切换到PLL1哪?

原因:

因为ARM内核(处理器)的运行每时每刻都需要时钟的驱动,I.MX6U 默认启动的时候使用的是 PLL1 的时钟源默认为396MHz,当我们需要修改系统主频,也就是修改PLL1的倍频频率为 596MHz的时候,要对PLL1进行修改而当前ARM内核当前正在使用的就是PLL1,修改PLL1时钟需要一个过程而在这个过程中ARM处理器就丢失了时钟无法运行。
这就像给人做心脏手术一样,在做对心脏做手术之前要接一个体外人工血液循环泵维持血液循环,在做完心脏手术之后再把血液循环接回到心脏。
也就是说在修改当前PLL之前,所有以依赖当前PLL的时钟源都需要切换到一个新的时钟源上,然后

图 16.1.4.4中:

1. pll_sw_clk 也就是PLL1的最终输出频率

2. 此处是一个选择器,选择 pll1_sw_clk 的时钟源,有寄存器 CCM_CCSR 的 PLL1_SW_CLK_SEL 位决定 pll1_sw_clk 是选择 pll1_mian_clk 还是 step_clk。正常情况下应该选择 pll1_main_clk,但是如果要对 pll1_main_clk(PLL1)的频率进行调整的话,比如我们要设置PLL1=1056MHz,此时就要先将 pll1_sw_clk 切换到 step_clk 上。等 pll1_main_clk 调整调整完成以后再切换回来。

3. 此处也是一个选择器,选择 step_clk 的时钟源,有寄存器 CCM_CCSR 的 SETP_SEL 位决定 setp_clk 是选择 osc_clk 还是 secondary_clk。一般选择 osc_clk,也就是 24MHz 的晶振。

这里我们用到了一个寄存器 CCM_CCSR,此寄存器的结构如下图所示:

寄存器 CCM_SSSR 我们只用到了 STEP_SEL 和 PLL1_SW_CLK_SEL 这两位,一个是用来选择 setp_clk 的时钟源,一个是用来选择 pll1_sw_clk 的时钟源。

到这里,修改 I.MX6U 主频的步骤就很清晰了,修改步骤如下:

  1. 设置寄存器 CCM_CCSR 的 STEP_SEL位,设置 setp_clk 的时钟源为 osc 24MHz 的晶振。
  2. 设置寄存器 CCM_CCSR 的 PLL1_SW_CLK_SEL 位,设置 pll1_sw_clk 的时钟源为 setp_clk=24MHz,通过这一步我们就将 I.MX6U 的主频先这是为 24MHz,直接来自于外部的24MHz晶振。
  3. 设置寄存器 CCM_ANALOG_AMRn,将 pll1_mian_clk(PLL1)设置为 1056MHz。
  4. 设置寄存器 CCSR 的 PLL1_SW_CLK_SEL 位,将 pll1_sw_clk 的时钟源重新切换会 pll1_main_clk ,切换回来之后的 pll1_sw_clk 就等于 1056MHz。
  5. 最后设置寄存器CCM_CACRR 的 ARM_PODF 为 2 分频,I.MX6U的内核主频就为 1056/2=528MHz。
1.4.3 PLL1 主频设置源码

按照上面1.4.2 分析的步骤

/* 初始化时钟 */
void imx6u_clkinit(void)
{/* 初始化 IMX6U 的主频为528MHz */if(((CCM->CCSR >> 2) & 0x1) == 0){				/* 判断PLL1_SW_CLK_SEL位为0,当前使用 pll1_main_clk */CCM->CCSR &= ~(1<<8);						/* 设置CCM_CCSR STEP_SEL位,0 step_clk 选择 osc_clk 24MHz晶振 */CCM->CCSR |= (1<<2);						/* 设置PLL1_SW_CLK_SEL位为1,pll1_sw_clk切换到step_clk */}/* 设置PLL1为1056MHz */CCM_ANALOG->PLL_ARM &= ~(1 << 13);			/* 清零ANANLOG_PLL_ARM bit[13],关闭 pll1_main_clk */CCM_ANALOG->PLL_ARM &= ~0x7f;				/* 清零ANANLOG_PLL_ARM bit[6:0] */CCM_ANALOG->PLL_ARM |= ((88 << 0) & 0x7f);	/* 设置ANANLOG_PLL_ARM bit[6:0], PLL1 frquencey=Frq*div_select/2 */CCM_ANALOG->PLL_ARM |= (1 << 13);			/* 设置ANANLOG_PLL_ARM bit[13] Enable=1, 开启 pll1_main_cl *//* pll1_sw_clk切换回pll1_main_clk(PLL1)*/CCM->CCSR &= ~(1<<2);/* 设置PLL1分频位2, 1056Mhz/2=528MHz */CCM->CACRR = 0x1;							/* ARM_PODF divide by 2 */}
1.4.4 编译修改主频后源码烧录SD卡验证

编译修改主频后源码烧录SD卡验证主频修改是否生效。将I.MX6U的主频从默认396MHz修改为 528MHz或者696Mhz之后,LED灯闪烁速度会变快,按下按键后蜂鸣器的鸣叫频率也尖锐。

我本地验证的结果是修改修改I.MX6U主频为528MHz/696MHz之后LED闪烁频率变快蜂鸣器鸣叫变快,实验修改主频成功。

2. PFD时钟设置

设置好主频之后我们好要设置好其它的PLL和PFD时钟,PLL1上一小节已经设置好了,PLL2, PLL3, PLL7 是固定为528MHz, 480MHz 和 480MHz,PLL4~PLL6 都是针对特殊外设的用到的时候再设置。

因此,接下来重点就是设置PLL2和PLL3的各自4路PFD,NXP推荐的这8路PFD频率如下表:

先设置PLL2的4路PFD,用到的寄存器是 CCM_ANLOG_PFD_528n,寄存器的结构如下图所示:

从 16.5.1 可以看出,寄存器 CCM_ANALOG_PFD_528n 其实分为四组,分别对应 PFD0~PFD3,每组8个bit,我们以 PFD0为例,看一下如何设置 PLL2_PFD0的频率。PFD0对应的寄存器位如下:

  • PFD0_FRAC:PLL2_PFD0的分频数,PLL2_PFD0的计算公式为 528*18/PFD0_FRAC,此位的可设置范围为 12-35。如果 PLL2_PFD0 的频率设置352MHz的话,PFD0_FRAC=528*18/252=27。
  • PFD0_STABLE :此位为只读位,可以通过此位判断PLL2_PFD0 是否稳定
  • PFD0_CLKGATE:PLL2_PFD0 输出是能位,为1的时候关闭PLL2_PFD0的输出,为0的时候使能输出。

如果我们设置PLL2_PFD0的频率为325MHz的话,就需要设置 PFD0_FRAC为27,PFD0_CLKGATE为0。PLL1~PLL3的设置类似,频率计算公式都是 528*18/PFDX_FRAC(X=1~3),因 此 PLL2_PFD1=594MHz 的 话 , PFD1_FRAC=16 ;PLL2_PFD2=400MHz 的话 PFD2_FRAC 不能整除,因此取最近的整数值,即 PFD2_FRAC=24,这样 PLL2_PFD2 实际为 396MHz; PLL2_PFD3=297MHz 的话, PFD3_FRAC=32。

接下来设置PLL3 PFD0~PFD3这4路PFD的频率,使用到的寄存器是CCM_ANALOG_PFD_480n,此寄存器的结构如下图所示:

从图 16.1.5.2 可以看出,寄存器 CCM_ANALOG_PFD_480n 和 CCM_ANALOG_PFD_528n
的结构是一模一样的,只是一个是 PLL2 的,一个是 PLL3 的。寄存器位的含义也是一样的,只
是 频 率 计 算 公 式 不 同 , 比 如 PLL3_PFDX=480*18/PFDX_FRAC(X=0~3) 。 如 果
PLL3_PFD0=720MHz 的话, PFD0_FRAC=12;如果 PLL3_PFD1=540MHz 的话, PFD1_FRAC=16;如果 PLL3_PFD2=508.2MHz 的话, PFD2_FRAC=17; 如果 PLL3_PFD3=454.7MHz 的话,PFD3_FRAC=19。
 

相关文章:

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-14-主频和时钟配置

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…...

tomcat打开乱码修改端口

将UTF-8改成GBK 如果端口冲突&#xff0c;需要修改tomcat的端口...

03 JavaSE-- 访问控制权限、接口、抽象类、内部类、Object类、异常

1. Exception 异常 在 Java 中&#xff0c;异常分为两种主要类型&#xff1a;强制性异常&#xff08;Checked Exceptions&#xff09;和非强制性异常&#xff08;Unchecked Exceptions&#xff09;。 强制性异常&#xff08;Checked Exceptions&#xff09;&#xff1a; 强制…...

free5gc+ueransim操作

启动free5gc容器 cd ~/free5gc-compose docker-compose up -d 记录虚拟网卡地址&#xff0c;eth0 ifconfig 查看并记录amf网元的ip地址 sudo docker inspect amf "IPAddress"那一行&#xff0c;后面记录的即是amf的ip地址 记录上述两个ip地址&#xff0c;完成UER…...

麦肯锡精英高效阅读法笔记

系列文章目录 如何有效阅读一本书笔记 读懂一本书笔记 麦肯锡精英高效阅读法笔记 文章目录 系列文章目录序章 无法读书的5个理由无法读书的理由① 忙于工作&#xff0c;没时间读书无法读书的理由② 不知应该读什么无法读书的理由③ 没读完的书不断增多无法读书的理由④ 工作繁…...

高速、简单、安全的以太彩光,锐捷网络发布极简以太全光 3.X 方案

从 2021 年 3 月正式推出到现在&#xff0c;锐捷网络极简以太全光方案已经走进第四个年头。IT 仍在不断向前发展&#xff0c;数字化进程深入&#xff0c;数字化业务增多&#xff0c;更广泛的终端设备接入企业级园区网络&#xff0c;对园区网络提出了更高的要求&#xff0c;例如…...

图书管理系统

一、图书管理系统菜单 &#x1f353;管理员菜单 1.查找图书 2.新增图书 3.删除图书 4.显示图书 0.退出系统 --------------------------------------------------------------------------------------------------------------------------------- &#x1f33c;用户菜…...

图解HTTP(2、简单的 HTTP 协议)

HTTP 协议用于客户端和服务器端之间的通信 请求访问文本或图像等资源的一端称为客户端&#xff0c;而提供资源响应的一端称为服务器端。 通过请求和响应的交换达成通信 请求必定由客户端发出&#xff0c;而服务器端回复响应报文 请求报文是由请求方法、请求 URI、协议版本、…...

小鹅知识付费系统登录,网课怎么推广与宣传?有啥获客方法?

现在很多教育机构都开始做网络课程&#xff0c;同行之间的竞争也愈发激烈&#xff0c;机构的网课想要盈利就需要对课程进行宣传推广&#xff0c;网课要怎么推广和宣传呢&#xff1f; 在线课程要想推广获客方法有几种&#xff0c;不同推广方法获客效果也是不同的&#xff0c;只有…...

韩顺平0基础学Java——第5天

p72——p86 今天同学跟我说别学java&#xff0c;真的吗&#xff1f;唉&#xff0c;先把这视频干完吧。 逻辑运算符练习 x6&#xff0c;y6 x6&#xff0c;y5 x11&#xff0c;y6 x11&#xff0c;y5 z48 错了&a…...

单片机为什么能直接烧录程序?

在设计芯片的时候&#xff0c;关于烧录的环节是一个不得不考虑的问题。首先排除掉&#xff0c;由外部硬件直接操控FLASH的方案&#xff0c;这个方案有很多缺点。 1、每个IC使用的FLASH型号各不相同&#xff0c;每种型号的FLASH的烧录命令和流程都有差别&#xff0c;这会导致烧…...

【Linux】25. 网络基础(一)

网络基础(一) 计算机网络背景 网络发展 独立模式: 计算机之间相互独立; 网络互联: 多台计算机连接在一起, 完成数据共享; 其实本质上一台计算机内部也是一个小型网络结构(如果我们将计算机内部某个硬件不存放在电脑中&#xff0c;而是拉根长长的线进行连接。这其实也就是网…...

项目经理【人】任务

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 【人】任务 一、定义团队的基本规则&塔克曼阶梯理论 1.1 定义团队的基本规则 1.2 塔克曼阶梯理论 二、项目经理管理风格 …...

Linux学习(嵌入式硬件知识)

GPU和CPU GPU&#xff08;Graphics Processing Unit&#xff0c;图形处理单元&#xff09;和 CPU&#xff08;Central Processing Unit&#xff0c;中央处理单元&#xff09;是计算机中两种不同的处理器。它们在功能、设计和用途上有所不同。 CPU&#xff08;中央处理单元&…...

英语学习笔记4——Is this your ...?

Is this your …? 词汇 Vocabulary suit /sut/ n. 西装&#xff0c;正装 suit 的配套&#xff1a; shirt n. 衬衫tie n. 领带&#xff0c;领结belt n. 腰带trousers n. 裤子shoes n. 鞋子 school /skuːl/ n. 学校 所有学校 搭配&#xff1a;middle school 初中    hig…...

Hive Bucketed Tables 分桶表

Hive Bucketed Tables 分桶表 1.分桶表概念 2.分桶规则 3.语法 4.分桶表的创建 5.分桶表的好处...

【拆位法 决策包容性 位运算】2871. 将数组分割成最多数目的子数组

本文涉及知识点 拆位法 贪心 位运算 决策包容性 位运算、状态压缩、子集状态压缩汇总 LeetCode2871. 将数组分割成最多数目的子数组 给你一个只包含 非负 整数的数组 nums 。 我们定义满足 l < r 的子数组 nums[l…r] 的分数为 nums[l] AND nums[l 1] AND … AND nums[r…...

Java 线程池 ( Thread Pool )的简单介绍

想象一下&#xff0c;你正指挥着一支超级英雄团队&#xff0c;面对蜂拥而至的敌人&#xff08;任务&#xff09;&#xff0c;不是每次都召唤新英雄&#xff08;创建线程&#xff09;&#xff0c;而是精心调配现有成员&#xff0c;高效应对。这就是Java线程池的魔力&#xff0c;…...

鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位

时间概念太重要了&#xff0c;在鸿蒙内核又是如何管理和使用时间的呢? 时间管理以系统时钟 g_sysClock 为基础&#xff0c;给应用程序提供所有和时间有关的服务。 用户以秒、毫秒为单位计时.操作系统以Tick为单位计时&#xff0c;这个认识很重要. 每秒的tick大小很大程度上决…...

安装numpy遇到的问题

安装numpy的时候提示无法安装如下&#xff1a; (venv) E:\works\AI\venv\Scripts>pip install numpy pandas matplotlib jupyter -i https://pypi.douban.com/simple Looking in indexes: https://pypi.douban.com/simple WARNING: Retrying (Retry(total4, connectNone, r…...

页面嵌套,界面套娃,除了用iframe,还有其他方式吗?

UIOTOS可以了解下&#xff0c;uiotos.net&#xff0c;通过连线来代替脚本逻辑开发&#xff0c;复杂的交互界面&#xff0c;通过页面嵌套轻松解决&#xff0c;是个很新颖的思路&#xff0c;前端零代码&#xff01; 蓝图连线尤其是独创的页面嵌套和属性继承技术&#xff0c;好家…...

上传文件至linux服务器失败

目录 前言异常排查使用df -h命令查看磁盘使用情况使用du -h --max-depth1命令查找占用空间最大的文件夹 原因解决补充&#xff1a;删除文件后&#xff0c;磁盘空间无法得到释放 前言 使用XFTP工具上传文件至CentOS服务器失败 异常 排查 使用df -h命令查看磁盘使用情况 发现磁盘…...

渗透 如何防御ARP欺骗,LLMNR-MDNS-NBNS等协议的作用

一. 如何防御ARP欺骗&#xff1f; 1.使用双向IP/MAC绑定&#xff1b; 2.使用静态ARP缓存表&#xff1b; 3.使用ARP服务器&#xff0c;通过服务器来查找ARP转换表来响应其他机器的广播&#xff1b; 4.使用ARP欺骗防护软件&#xff1b; 5.在网关设备上部署防ARP欺骗攻击功能…...

【C++ 所有STL容器简介】

【C 所有STL容器简介】 1. vector2. list3. deque4. set / multiset5. map / multimap6. unordered_set / unordered_multiset7. unordered_map / unordered_multimap8. stack9. queue10. priority_queue C 标准模板库&#xff08;STL&#xff09;提供了一系列常用的容器&#…...

Django调用SECRET_KEY对数据进行加密

对数据进行加密 在Django中进行加密可以直接调用django配置文件中的SECRET_KEY , 同时还需要导入itsdangerous模块中的TimedJSONWebSignatureSerializer进行加密 1. 实现加密方法 , 生成用户加密链接 # 生成用户加密链接 def generate_verify_email_url(user):# 调研加密方法…...

芸众商城电商专业版400+插件源码+搭建教程

介绍&#xff1a; 芸众商城社交电商系统SAAS平台前端基于vue开发&#xff0c;后端基于研发积分商城系统源码 php&#xff0c;本文安装芸众商城全插件&#xff08;400多个&#xff09;商业版平台源码&#xff0c;可同时支持多端口部署运行&#xff1b;使用宝塔面板一键部署的形…...

【机器学习与实现】线性回归示例——波士顿房价分析

目录 一、创建Pandas对象并查看数据的基本情况二、使用皮尔逊相关系数分析特征之间的相关性三、可视化不同特征与因变量MEDV&#xff08;房价中值&#xff09;间的相关性四、划分训练集和测试集并进行回归分析 一、创建Pandas对象并查看数据的基本情况 boston.csv数据集下载&a…...

Redis核心数据结构——跳表(生成数据到文件和从文件中读取数据、模块合并、)

生成文件和从文件中读取数据。 需求如下&#xff1a; 你的任务是实现 SkipList 类中的数据持久化成员函数和数据加载成员函数。 持久化数据成员函数签名&#xff1a;void dump_file(); 该成员函数负责将存储引擎内的数据持久化到文件中。数据的持久化格式是将每个键值对写入文…...

微信小程序下载文件详解

在微信小程序中&#xff0c;下载文件通常涉及使用 wx.downloadFile API。这个 API 可以将网络资源下载到本地临时文件路径&#xff0c;然后你可以使用 wx.saveFile 将临时文件保存到本地持久存储位置。下面是一个下载文件的详细过程&#xff1a; 使用 wx.downloadFile 下载文件…...

2024 概率论和数理统计/专业考试/本科考研/论文/重点公式考点汇总

## 列表http://www.deepnlp.org/equation/category/statistics ## 均匀分布http://www.deepnlp.org/equation/uniform-distribution ## t-分布http://www.deepnlp.org/equation/student-t-distribution ## 伯努利分布http://www.deepnlp.org/equation/bernoulli-distributio…...

四川易点慧电子商务抖音小店:潜力无限的新零售风口

在当今数字化浪潮中&#xff0c;电子商务已经成为推动经济发展的重要引擎。四川易点慧电子商务有限公司凭借其敏锐的市场洞察力和创新精神&#xff0c;成功在抖音小店这一新兴平台上开辟出一片新天地。本文将探讨四川易点慧电子商务抖音小店的潜力及其在新零售领域的影响力。 一…...

Seal^_^【送书活动第3期】——《Hadoop大数据分析技术》

Seal^_^【送书活动第3期】——《Hadoop大数据分析技术》 一、参与方式二、作者荐语三、图书简介四、本期推荐图书4.1 前 言4.2 本书内容4.3 本书目的4.4 本书适合的读者4.5 配套源码、PPT课件等资源下载 五、目 录六、&#x1f6d2; 链接直达 Hadoop框架入门书&#xff0c;可当…...

win10下,svn上传.so文件失败

问题&#xff1a;win10下使用TortoiseSVN&#xff0c;svn上传.so文件失败 解决&#xff1a;右键&#xff0c;选择Settings&#xff0c;Global ignore pattern中删除*.so&#xff0c;保存即可。...

ubuntu20安装colmap

系统环境 ubuntu20 &#xff0c;cuda11.8 &#xff0c;也安装了anaconda。因为根据colmap的官方文档说的&#xff0c;如果根据apt-get安装的话&#xff0c;默认是非cuda版本的&#xff0c;而我觉得既然都安装了cuda11.8了&#xff0c;自然也要安装cuda版本的colmap。 安装步骤…...

kubeflow简单记录

kubeflow 13.7k star 1、Training Operator 包括PytorchJob和XGboostJob&#xff0c;支持部署pytorch的分布式训练 2、KFServing快捷的部署推理服务 3、Jupyter Notebook 基于Web的交互式工具 4、Katib做超参数优化 5、Pipeline 基于Argo Workflow提供机器学习流程的创建、编排…...

ARM的工作模式

ARM处理器设计有七种工作模式&#xff0c;这些模式允许处理器在不同的情境下以不同的权限级别执行任务&#xff0c;下面是这七大工作模式的概述&#xff1a; 用户模式&#xff08;User&#xff0c;USR&#xff09;&#xff1a; 这是非特权模式&#xff0c;大多数应用程序在此…...

为家庭公网IP配置DDNS域名

文章目录 域名配置域名更新frp配置修改 在成功完成frp改造Windows笔记本实现家庭版免费内网穿透之后&#xff0c;某天我突然发现内网穿透失效了&#xff0c;一番排查之后原来是路由器对应的公网IP更换了。果然我分到的并不是固定的公网IP&#xff0c;而是会定期变化的。为了免受…...

QT-TCP通信

网上的资料太过于书面化&#xff0c;所以看起来有的让人云里雾里&#xff0c;看不懂C-tcpsockt和S-tcpsocket的关系 所以我稍微画了一下草图帮助大家理解两个套接字之间的关系。字迹有的飘逸勉强看看 下面是代码 服务端&#xff1a; MainWindow::MainWindow(QWidget *parent) …...

SparkSQL优化

SparkSQL优化 优化说明 缓存数据到内存 Spark SQL可以通过调用spark.sqlContext.cacheTable("tableName") 或者dataFrame.cache()&#xff0c;将表用一种柱状格式&#xff08; an inmemory columnar format&#xff09;缓存至内存中。然后Spark SQL在执行查询任务…...

STM32——基础篇

技术笔记&#xff01; 一、初识STM32 1.1 ARM内核系列 A 系列&#xff1a;Application缩写。高性能应用&#xff0c;比如&#xff1a;手机、电脑、电视等。 R 系列&#xff1a;Real-time缩写。实时性强&#xff0c;汽车电子、军工、无线基带等。 M 系列&#xff1a;Microcont…...

【从零开始学架构 架构基础】架构设计的本质、历史背景和目的

本文是《从零开始学架构》的第一篇学习笔记&#xff0c;主要理解架构的设计的本质定义、历史背景以及目的。 架构设计的本质 分别从三组概念的区别来理解架构设计。 系统与子系统 什么是系统&#xff0c;系统泛指由一群有关联的个体组成&#xff0c;根据某种规则运作&#…...

Learning C# Programming with Unity 3D

作者&#xff1a;Alex Okita 源码地址&#xff1a;GitHub - badkangaroo/UnityProjects: A repo for all of the projects found in the book. 全书 686 页。...

北京车展现场体验商汤DriveAGI自动驾驶大模型展现认知驱动新境界

在2024年北京国际汽车展的舞台上&#xff0c;众多国产车型纷纷亮相&#xff0c;各自展示着独特的魅力。其中&#xff0c;小米SUV7以其精美的外观设计和宽敞的车内空间&#xff0c;吸引了无数目光&#xff0c;成为本届车展上当之无愧的明星。然而&#xff0c;车辆的魅力并不仅限…...

企业终端安全管理软件有哪些?终端安全管理软件哪个好?

终端安全的重要性大家众所周知&#xff0c;关系到生死存亡的东西。 各类终端安全管理软件应运而生&#xff0c;为企业提供全方位、多层次的终端防护。 有哪些企业终端安全管理软件&#xff1f; 一、主流企业终端安全管理软件 1. 域智盾 域智盾是一款专为企业打造的全面终端…...

Linux内核--设备驱动(七)媒体驱动框架整理--HDMI框架(2)

目录 一、引言 二、drm框架 ------>2.1、画布( FrameBuffer ) ------>2.2、绘图现场(CRTC) ------>2.3、输出转换器(Encoder ) ------>2.4、连接器 (Connector ) ------>2.5、显示面(Planner) 三、VOP部分详解 ------>3.1、dts ------>3.2、v…...

3.3 Gateway之自定义过滤器

1.Gateway过滤器种类 过滤器种类描述GatewayFilter路由过滤器&#xff0c;作用于任意指定的路由。默认不生效&#xff0c;要配置到路由后生效GlobalFilter全局过滤器&#xff0c;作用范围是所有路由。声明后自定生效 2.Gateway过滤器参数 参数描述ServerWebExchangeGateway内…...

Skywalking数据持久化与自定义链路追踪

学习本篇文章之前首先要了解一下Sky walking的基础知识 分布式链路追踪工具Skywalking详解 一&#xff0c;Sky walking数据持久化 Sky walking提供了es&#xff0c;MySQL等数据持久化方案&#xff0c;默认使用h2基于内存的数据库&#xff0c;重启之后数据即会丢失。 在实际工…...

设计模式之模板模式TemplatePattern(五)

一、模板模式介绍 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式&#xff08;Template Pattern&#xff09;&#xff0c; 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现&#xff0c;但可以成为典型类中…...

划重点!PMP报考条件、报考步骤、考试内容、适合人群

参加PMP认证的好处&#xff0c;可以从几个方面来认识&#xff1a; 一、参加PMP认证与考试的过程&#xff0c;同时是一个系统学习和巩固项目管理知识的过程 二、参加PMP认证&#xff0c;您可以获得由PMI颁发的PMP证书 而拥有PMP认证表示你已经成为一个项目管理方面的专业人员…...

Java | Leetcode Java题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m matrix.length, n matrix[0].length;int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 low;int x matrix[mid / n][m…...

python怎么安装matplotlib

1、登陆官方网址“https://pypi.org/project/matplotlib/#description”&#xff0c;下载安装包。 2、选择合适的安装包&#xff0c;下载下来。 3、将安装包放置到python交互命令窗口的当前目录下。 4、打开windows的命令行窗口&#xff0c;通过"pip install"这个命令…...

代码随想录-算法训练营day41【动态规划04:01背包问题-滚动数组、分割等和子集】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part04● 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集 正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,…...

c++ 纯虚函数与抽象类的理解

1.纯虚函数的概念 只有声明&#xff0c;没有函数体的虚函数。纯虚函数在父类中声明&#xff0c;需要在子类中中去具体实现。 语法为virtual void PureVirtualFunc() 0; 0为纯虚函数的格式&#xff0c;类似于这是一个空的函数指针&#xff1b; 2.抽象类 拥有一个及以上纯虚…...

selenium发展史

Selenium Core 2004 年&#xff0c;Thoughtworks 的工程师 Jason Huggins 正在负责一个 Web 应用的测试工作&#xff0c;由于这个项目需要频繁回归&#xff0c;这导致他不得不每天做着重复且低效的工作。为了解决这个困境&#xff0c;Jason 开发了一个运行在 JavaScript 沙箱中…...

【Python】图像批量合成视频,并以文件夹名称命名合成的视频

一个文件夹中有多个子文件夹&#xff0c;子文件夹中有多张图像。如何把批量把子文件夹中的图像合成视频&#xff0c;视频名称是子文件夹的名称&#xff0c;生成的视频保存到指定文件夹&#xff0c;效果记录。 代码 import os import cv2def create_video_from_images(image_f…...

584. 寻找用户推荐人

584. 寻找用户推荐人 题目链接&#xff1a;584. 寻找用户推荐人 代码如下&#xff1a; # Write your MySQL query statement below select name from Customer where referee_id is null or referee_id<>2;...