[IMX] 03.时钟树 - Clock Tree
目录
1.PLL 时钟源
2.Clock Tree 时钟树
3.ARM 内核时钟
3.1.频率设置 - CCM_ANALOG_PLL_ARMn
3.2.时钟分频 - CCM_CACRR
3.3.时钟源选择 - CCM_CCSR
3.4.修改 ARM 内核时钟
4.PFD 时钟
4.1.PLL2_PFD 频率 - CCM_ANALOG_PFD_528n
4.2.PLL3_PFD 频率 - CCM_ANALOG_PFD_480n
5.AHB、IPG、PERCLK 时钟
5.1.根时钟
5.2.时钟设置 - CCM_CBCDR
5.3.总线时钟复用 - CCM_CBCMR
5.4.串行时钟复用 - CCM_CSCMR1
5.5.注意事项
I.MX6U-ALPHA 开发板的系统时钟源有两部分:32.768KHz 的晶振和 24MHz 的晶振
32.768KHz 晶振是 I.MX6U 的 RTC 时钟源,24MHz 晶振是 I.MX6U 内核和其它外设的时钟源
硬件原理图如下:
1.PLL 时钟源
I.MX6U 的外设有很多,不同外设的时钟源不同
NXP 将这些时钟源分为 7 组(PLL1 ~ PLL7),7 组 PLL 时钟源均为 24MHz 晶振通过 PLL 获得,因此称为 7 组 PLL
PLL 时钟源的大致结构如下所示:
图中每组 PLL 的作用如下:
-
PLL1:ARM_PLL,该 PLL 供 ARM 内核使用,用于生成 ARM 内核时钟,可通过配置相关寄存器将 ARM 频率提升至最高 1.3GHz;
-
PLL2:528_PLL,该 PLL 为 System_PLL,为固定的 22 倍频,无法通过寄存器修改,频率为 24MHz * 22 = 528MHz,因此称为 528_PLL,从该路 PLL 中分出了 4 路 PFD(PLL2_PFD0 ~ PLL2_PFD3),这 4 路 PFD 和 PLL2 本身,作为外设的时钟源以及内部总线的时钟源,如 DDR 接口、NAND/NOR 接口等;
-
PLL3:USB1_PLL,该 PLL 用于 USBPHY,同时分出了 4 路 PFD(PLL3_PFD0 ~ PLL3_PFD3),USB1_PLL 为固定的 20 倍频,频率为 24MHz * 20 = 480MHz,因此也称为 480_PLL,该 PLL 和 4 路 PFD 可以用作其他外设的根时钟源;
-
PLL7:USB2_PLL,该 PLL 用于 USB2PHY,为固定的 20 倍频,频率为 24MHz * 20 = 480MHz;
-
PLL6:ENET_PLL,该 PLL 用于以太网,为固定的 20 + 5/6 倍频,频率为 24MHz * (20 + 5 / 6) = 500MHz;
-
PLL5:VIDEO_PLL,该 PLL 用于显示外设,可以调整倍频(1/2/4/8/16 倍率),输出范围为 650MHz ~ 1300MHz;
-
PLL4:AUDIO_PLL,该 PLL 用于音频外设,可以调整倍频(1/2/4 倍率),输出范围为 650MHz ~ 1300MHz;
2.Clock Tree 时钟树
I.MX6U 所有外设的时钟源均来自 7 路 PLL 及 PLL2/PLL3 分出的 PFD,这些时钟源共同构成 I.MX6U 的时钟树,其结构如下所示:
时钟树中包含三个部分:CLOCK_ROOT_GENERATOR、CLOCK_SWITCHER、SYSTEM_CLOCKS
-
CLOCK_SWITCHER:时钟源,7 路 PLL 和 8 路 PFD;
-
SYSTEM_CLOCKS:芯片外设;
-
CLOCK_ROOT_GENERATOR:时钟分配器(多路选择器),将 CLOCK_SWITCHER 提供的时钟源,分配给对应的 SYSTEM_CLOCKS,执行分频操作和多路选择操作;
以 ESAI 外设的时钟为例,其在时钟树中的节点如下所示:
-
ESAI 有 4 路时钟源(PLL4、PLL5、PLL3_PFD2、pll3_sw_clk),由寄存器 CCM_CSCMR2 的 ESAI_CLK_SEL 字段选择时钟源:
-
该部分为 ESAI 时钟的前置分频,由寄存器 CCM_CS1CDR 的 ESAI_CLK_PRED 字段设置分频值,可设置 1~8 分频,假如 PLL4 = 650MHz,选择 PLL4 作为 ESAI 的时钟源,前置分频选择 2 分频,则此时的时钟频率为 650 / 2 = 325MHz;
-
该部分为 ESAI 时钟的后置分频,对前置分频中输出的时钟信号进一步分频,由寄存器 CCM_CS1CDR 的 ESAI_CLK_PODF 字段设置分频值,可以设置 1~8 分频,若设置为 8 分频,则经过此分频器后的时钟频率为 325 / 8 = 40.625MHz,因此最终 ESAI 外设的时钟频率为 40.625MHz;
3.ARM 内核时钟
ARM 内核时钟在时钟树中的节点如下所示:
其中各部分的含义如下:
-
时钟源 PLL1,默认频率 996MHz;
-
前置分频,由 CCM_CACRR 寄存器的 ARM_PODF 字段控制,可选择 1/2/4/8 分频,若选择 2 分频,则 ARM 内核时钟的频率为 996MHz / 2 = 498MHz;
-
后置分频,默认值为 1,即不进行分频;
-
最终输出的 ARM 内核时钟(CPU 主频);
3.1.频率设置 - CCM_ANALOG_PLL_ARMn
CCM_ANALOG_PLL_ARMn 寄存器设置内核 n 对应的时钟源:
其中关注如下几个字段:
-
ENABLE:使能时钟输出,为 1 时使能,为 0 时禁用;
-
DIV_SELECT:控制 PLL1 的输出频率,范围为 54~108,计算公式为 PLL1 CLK = Fin * div_seclec / 2.0(Fin=24MHz),若需要设置 PLL1 输出为 1056MHz,则 div_select 应该设置为 88;
3.2.时钟分频 - CCM_CACRR
CCM_CACRR 寄存器的 ARM_PODF 字段设置 ARM 时钟分频的倍率(可设置 1~8 倍),CCM_CACRR 寄存器包含的字段如下所示:
3.3.时钟源选择 - CCM_CCSR
修改 ARM 内核时钟时,需要先将时钟源切换为其他时钟源,ARM 内核可选的时钟源如下所示:
其中:
-
pll1_sw_clk 为 PLL1 的最终输出频率;
-
此处是一个选择器,选择 pll1_sw_clk 的时钟源,由寄存器 CCM_CCSR 的 PLL1_SW_CLK_SEL 位决定 pll1_sw_clk 是选择 pll1_main_clk 还是 step_clk,正常情况下应该选择 pll1_main_clk,但如果要调整 pll1_main_clk(PLL1) 的频率,比如设置 PLL1 = 1056MHz,就要先将 pll1_sw_clk 切换为 step_clk,等 pll1_main_clk 调整完成后再切换回来;
-
此处也是一个选择器,选择 step_clk 的时钟源,由寄存器 CCM_CCSR 的 STEP_SEL 位决定 step_clk 是选择 osc_clk 还是 secondary_clk,一般选择 osc_clk,即 24MHz 的晶振;
CCM_CCSR 寄存器用于选择 PLL1 的时钟源,其包含的字段如下所示:
其中,关注以下字段:
-
STEP_SEL:step_clk 时钟源选择:
-
0:osc_clk(24MHz)晶振;
-
1:secondary_clk;
-
-
PLL1_SW_CLK_SEL:pll1_sw_clk 时钟源选择:
-
0:pll1_main_clk;
-
1:step_clk;
-
3.4.修改 ARM 内核时钟
修改 ARM 内核时钟频率的步骤如下:
-
设置寄存器 CCM_CCSR 的 STEP_SEL 位,设置 step_clk 的时钟源为 24MHz 的晶振;
-
设置寄存器 CCM_CCSR 的 PLL1_SW_CLK_SEL 位,设置 pll1_sw_clk 的时钟源为 step_clk = 24MHz,即将内核的主频先设置为 24MHz,(直接来自于外部的 24MHz 的晶振);
-
设置寄存器 CCM_ANALOG_PLL_ARMn 的 DIV_SELECT 字段,将 pll1_main_clk(PLL1)设置为 1056MHz;
-
设置寄存器 CCM_CCSR 的 PLL1_SW_CLK_SEL 位,重新将 pll1_sw_clk 的时钟源切换为 pll1_main_clk,切换后 pll1_sw_clk = 1056MHz;
-
设置寄存器 CCM_CACRR 的 ARM_PODF 字段为 2 分频,即 I.MX6U 的内核主频为 1056 / 2 = 528MHz;
4.PFD 时钟
PLL2、PLL3 和 PLL7 固定为 528MHz、480MHz 和 480MHz
PLL4、PLL5、PLL6 都是针对特殊外设的,用到的时候再设置
因此,接下来的重点是设置 PLL2 和 PLL3 各自的 4 路 PFD,NXP 推荐的 PFD 频率如下:
4.1.PLL2_PFD 频率 - CCM_ANALOG_PFD_528n
CCM_ANALOG_PFD_528n 寄存器用于设置 PLL2_PFD0~PLL2_PFD3,其包含的字段如下所示:
CCM_ANALOG_PFD_528n 寄存器内部分为 4 组,分别对应 PFD0~PFD3,以 PFD0 为例,其对应字段的含义如下:
-
PFD0_FRAC:PLL2_PFD0 的分频倍率,PLL2_PFD0 的计算公式为 528 * 18 / PFD0_FRAC,该字段可设置的范围为 12~35,如果 PLL2_PFD0 的频率要设置为 352MHz,则 PFD0_FRAC = 528 * 18 / 352 = 27;
-
PFD0_STABLE:此位为只读位,可以通过读取此位判断 PLL2_PFD0 是否稳定;
-
PFD0_CLKGATE:PLL2_PFD0 输出使能位,为 1 时关闭 PLL2_PFD0 的输出,为 0 的时使能输出;
PLL2_PFD 频率的计算公式为 528 * 18 / PFDx_FRAC (x = 1~3),若要设置 PLL2_PFD0 的频率为 352MHz,则需要设置 PFD0_FRAC 为 27, PFD0_CLKGATE 为 0,PLL2_PFD1~PLL2_PFD3 的设置类似
PLL2_PFD1 = 594MHz 时,PFD1_FRAC = 16
PLL2_PFD2 = 400MHz 时 PFD2_FRAC 无法整除,因此取最近的整数值,即 PFD2_FRAC = 24, 因此 PLL2_PFD2 实际为 396MHz
PLL2_PFD3 = 297MHz 时,PFD3_FRAC = 32
4.2.PLL3_PFD 频率 - CCM_ANALOG_PFD_480n
CCM_ANALOG_PFD_480n 寄存器用于设置 PLL3_PFD0~PLL3_PFD3,其包含的字段如下所示:
寄存器 CCM_ANALOG_PFD_480n 和 CCM_ANALOG_PFD_528n 的结构一样,寄存器位的含义也一样,只是频率计算公式不同,PLL3_PFD 频率的计算公式为 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
5.AHB、IPG、PERCLK 时钟
7 路 PLL 和 8 路 PFD 设置完成后,还需要设置 AHB_CLK_ROOT 和 IPG_CLK_ROOT 的时钟,I.MX6U 外设时钟源可设置的范围如下图所示:
图中给出了大多数外设根时钟的设置范围
AHB_CLK_ROOT 最高可设置为 132MHz, IPG_CLK_ROOT 和 PERCLK_CLK_ROOT 最高可设置为 66MHz
因此,将 AHB_CLK_ROOT、IPG_CLK_ROOT 和 PERCLK_CLK_ROOT 分别设置为 132MHz、66MHz、66MHz
5.1.根时钟
AHB_CLK_ROOT 和 IPG_CLK_ROOT 的结构如下图所示:
-
该选择器用于选择 pre_periph_clk 的时钟源,可以选择 PLL2、PLL2_PFD2、PLL2_PFD0 和 PLL2_PFD2 / 2,由寄存器 CCM_CBCMR 的 PRE_PERIPH_CLK_SEL 位控制,默认选择 PLL2_PFD2,因此 pre_periph_clk = PLL2_PFD2 = 396MHz;
-
该选择器用于选择 periph_clk 的时钟源,由寄存器 CCM_CBCDR 的 PERIPH_CLK_SEL 位与 PLL_bypass_en2 进行或运算设置, CCM_CBCDR 的 PERIPH_CLK_SEL 位为 0 时 periph_clk = pr_periph_clk = 396MHz;
-
CBCDR 寄存器的 AHB_PODF 位设置 AHB_CLK_ROOT 的分频值,可设置 1~8 分频,如果要设置 AHB_CLK_ROOT = 132MHz,则应该设置为 3 分频,即 396 / 3 = 132MHz,时钟树图中虽然写的是默认为 4 分频,但 I.MX6U 内部的 Boot Rom 将其改为了 3 分频;
-
通过 CBCDR 的 IPG_PODF 位设置 IPG_CLK_ROOT 的分频值,可设置 1~4 分频,IPG_CLK_ROOT 时钟源为 AHB_CLK_ROOT,如果需要设置 IPG_CLK_ROOT = 66MHz,则应该设置 2 分频,即 132 / 2 = 66MHz;
PERCLK_CLK_ROOT 在时钟树中的节点如下所示:
PERCLK_CLK_ROOT 的来源有两个:OSC(24MHz)和 IPG_CLK_ROOT,由寄存器 CCM_CSCMR1 的 PERCLK_CLK_SEL 位决定,如果为 0 则 PERCLK_CLK_ROOT 的时钟源为 IPG_CLK_ROOT = 66MHz
通过寄存器 CCM_CSCMR1 的 PERCLK_PODF 位设置分频,如果要设置 PERCLK_CLK_ROOT 为 66MHz 则需要将其设置为 1 分频
5.2.时钟设置 - CCM_CBCDR
CCM_CBCDR 用于设置时钟的分频值以及外设的根时钟,其包含的字段如下所示:
其中各字段的含义如下:
-
PERIPH_CLK2_PODF:periph2 的分频值,可设置为 0~7,分别对应 1~8 分频;
-
PERIPH2_CLK_SEL:选择 peripheral2 的根时钟,为 0 时选择 PLL2,为 1 时选择 periph2_clk2_clk,修改此位会触发一次 MMDC 握手,所以修改完成后要等待握手完成,握手完成信号由寄存器 CCM_CDHIPR 中指定的位表示;
-
PERIPH_CLK_SEL:peripheral 根时钟选择,为 0 时选择 PLL2,为 1 时选择 periph_clk2_clock,修改此位会触发一次 MMDC 握手,所以修改完成后要等待握手完成,握手完成信号由寄存器 CCM_CDHIPR 中指定的位表示;
-
AXI_PODF:axi 时钟分频,可设置为 0~7,分别对应 1~8 分频;
-
AHB_PODF:ahb 时钟分频,可设置为 0~7,分别对应 1~8 分频,修改此位会触发一次 MMDC 握手,所以修改完成后要等待握手完成,握手完成信号由寄存器 CCM_CDHIPR 中指定的位表示;
-
IPG_PODF:ipg 时钟分频,可设置为 0~3,分别对应 1~4 分频;
-
AXI_ALT_CLK_SEL:axi_alt 时钟选择,为 0 时选择 PLL2_PFD2,为 1 时选择 PLL3_PFD1;
-
AXI_CLK_SEL:axi 时钟源选择,为 0 时选择 periph_clk,为 1 时选择 axi_alt 时钟;
-
FABRIC_MMDC_PODF:fabric/mmdc 时钟分频,可设置为 0~7,分别对应 1~8 分频;
-
PERIPH2_CLK2_PODF:periph2_clk2 的时钟分频,可设置为 0~7,分别对应 1~8 分频;
5.3.总线时钟复用 - CCM_CBCMR
CCM_CBCMR 寄存器控制总线时钟的多路复用,其包含的字段如下所示:
其中各字段的含义如下:
-
LCDIF1_PODF:lcdif1 的时钟分频,可设置为 0~7,分别对应 1~8 分频;
-
PRE_PERIPH2_CLK_SEL:pre_periph2 时钟源选择,00 选择 PLL2,01 选择 PLL2_PFD2,10 选择 PLL2_PFD0,11 选择 PLL4;
-
PERIPH2_CLK2_SEL:periph2_clk2 时钟源选择,为 0 时选择 pll3_sw_clk,为 1 时选择 OSC;
-
PRE_PERIPH_CLK_SEL:pre_periph 时钟源选择,00 选择 PLL2,01 选择 PLL2_PFD2,10 选择 PLL2_PFD0,11 选择 PLL2_PFD2/2;
-
PERIPH_CLK2_SEL:peripheral_clk2 时钟源选择,00 选择 pll3_sw_clk,01 选择 osc_clk,10 选择 pll2_bypass_clk;
5.4.串行时钟复用 - CCM_CSCMR1
CCM_CBCMR1 寄存器控制串行外设时钟的多路复用,其包含的字段如下所示:
其中主要关注以下几个字段:
-
PERCLK_CK_SEL:perclk 时钟源选择,为 0 时选择 ipg_clk,为 1 时选择 osc_clk;
-
PERCLK_PODF:perclk 的时钟分频,可设置为 0~7,分别对应 1~8 分频;
5.5.注意事项
修改如下时钟选择器或分频器时会触发 MMDC 握手:
-
mmdc_podf;
-
periph_clk_sel;
-
periph2_clk_sel;
-
arm_podf;
-
ahb_podf;
触发握手信号后需要等待握手完成,寄存器 CCM_CDHIPR 中的相关字段指示握手是否完成,相应位为 1 表示握手没有完成,为 0 表示握手完成
修改 arm_podf 和 ahb_podf 时需要先关闭时钟输出,等修改完成后再打开,否则可能会出现在修改完成后没有时钟输出的问题
教程中需要修改寄存器 CCM_CBCDR 的 AHB_PODF 位设置 AHB_ROOT_CLK 的时钟,所以在修改前必须先关闭 AHB_ROOT_CLK 的输出,但未找到相应的寄存器,因此目前没法关闭,也就没法设置 AHB_PODF,不过内部 Boot ROM 已经将其设置为 3 分频,若 pre_periph_clk 的时钟源选择 PLL2_PFD2,AHB_ROOT_CLK 也是 396MHz / 3 = 132MHz
相关文章:
[IMX] 03.时钟树 - Clock Tree
目录 1.PLL 时钟源 2.Clock Tree 时钟树 3.ARM 内核时钟 3.1.频率设置 - CCM_ANALOG_PLL_ARMn 3.2.时钟分频 - CCM_CACRR 3.3.时钟源选择 - CCM_CCSR 3.4.修改 ARM 内核时钟 4.PFD 时钟 4.1.PLL2_PFD 频率 - CCM_ANALOG_PFD_528n 4.2.PLL3_PFD 频率 - CCM_ANALOG_PFD…...
低功耗实现方法思路总结
1.硬件选型最重要,比如stm 8l ,MSP430,瑞萨rl78,lpc11等 2.开发仿真务必使用高精度万用表如fluke 3.在整体规划层面,避免引脚未配置的浮空状态 a)在设计开发层面,对于使用的信号,使用上下拉电阻或者推挽…...
广州SMT贴片技术优势与工艺解析
内容概要 作为电子制造领域的关键技术,广州SMT贴片工艺凭借其高精度与高效性,已成为现代电子装配的核心支撑。本文通过系统性梳理表面贴装技术(SMT)的全流程,重点聚焦广州地区在该领域的独特技术优势。内容涵盖从焊膏…...
乡村地区无人机医药配送路径规划与优化仿真
本代码意在通过对无人机路径规划和载具选择进一步帮助乡村振兴,提高农村卫生条件,让患者足不出户就可享受到医疗服务,旨在完善乡村基础设施建设,积极响应国家“十四五”规划的号召。 先选择适合在该地区配送医药物资环境下的载具材…...
AWS Elastic Beanstalk部署极简Spring工程(EB CLI失败版)
弃用 这里我没有走通EB CLI方式部署。 问题 最近又加入了AWS项目组,又要再次在AWS云上面部署Spring服务,我这里使用的使用AWS中国云。需要使用AWS Elastic Beanstalk部署一个极简Spring工程。 EB CLI安装 安装EB CLI之前需要先在本地安装好Git&…...
[训练和优化] 3. 模型优化
👋 你好!这里有实用干货与深度分享✨✨ 若有帮助,欢迎: 👍 点赞 | ⭐ 收藏 | 💬 评论 | ➕ 关注 ,解锁更多精彩! 📁 收藏专栏即可第一时间获取最新推送🔔…...
element-ui的el-cascader增加全选按钮实现(附源码)
最近遇到了在级联选择器上添加全选框的需求 ,但是项目使用的是Vue2 Element UI的架构,而我们都知道Element UI提供的级联选择器el-cascader是不支持全选框的,而我又没有在网上找到适合我项目的实现,索性自己实现一个组件…...
OpenCV人脸识别EigenFace算法、案例解析
文章目录 前言一、EigenFace 核心原理二、Python 实战:手把手搭建 EigenFace 识别系统1. 环境准备2. 代码实现与步骤详解3. 加载数据集函数4. 训练EigenFace模型函数5. 预测函数6.主程序部分7. 可视化结果8. 代码分步解读 三、优化技巧四、总结 前言 在人脸识别领域…...
Python模块化编程
Python模块化编程 记得我刚学Python那会儿,特别喜欢把所有代码都写在一个文件里。直到有一天,我的项目膨胀到了2000多行代码,每次修改都要翻半天…这才痛定思痛,开始研究模块化编程。今天就跟大家聊聊这个让代码变得优雅的魔法。…...
Java对象的GC回收年龄的研究
目录 1、介绍 2、内存结构 2.1、普通对象 2.2、数组对象 2.3、数组长度作用 2.4、为什么 age 用 4 位? 3、对象头组成 3.1、Mark Word(标记字段) 3.2、Class Pointer(类指针) 4、GC 发生的位置 4.1、新生代…...
IT系统的基础设施:流量治理、服务治理、资源治理,还有数据治理。
文章目录 引言I IT系统的基础设施流量治理、服务治理、资源治理,还有数据治理。开发语言的选择数据治理(监控系统):整体运维的数据其他II 基础知识的重要性第一,知道原理第二,当遇到一些比较难解的问题时,基础知识就会派上用场。例子III 快速学会一门编程语言把语言照着…...
SpringBoot应用启动过程
Spring 应用抽象 Springboot 是一个用来快速创建 Spring 应用的微服务框架,启动引导器是org.springframework.boot.SpringApplication 这个类,每个 SpringApplication 实例就表示一个 Spring 应用的启动类;Spring 应用生命周期包括创建、启动…...
傻子学编程之——Java并发编程的问题与挑战
傻子学编程之——Java并发编程的问题与挑战 Java并发编程能让程序跑得更快,但也像走钢丝一样充满风险。本文用最直白的语言和代码示例,带你直面并发编程的四大「致命陷阱」,并给出解决方案。 一、资源竞争:多个线程打架怎么办&am…...
groovy 如何遍历 postgresql 所有的用户表 ?
在 Groovy 中遍历 PostgreSQL 所有用户表,你可以使用 JDBC 连接数据库并执行 SQL 查询。以下是一个完整的示例: Groovy 代码示例 import groovy.sql.Sqldef config [url: jdbc:postgresql://localhost:5432/your_database,user: your_username,passwo…...
CPU cache基本原理
CPU cache基本原理 存储器层次结构存储器层次结构中的缓存高速缓存存储器直接映射高速缓存组相联高速缓存全相联高速缓存 多核 CPU 下缓存问题内存的读写操作流程数据一致性与并发控制 高速缓存(cache)是一个小而快速地存储设备,它作为存储在…...
【Java学习笔记】【第一阶段项目实践】零钱通(面向过程版本)
零钱通(面向过程版本) 需求分析 1. 需要实现的功能 (1) 收益入账 (2) 消费 (3 )查看明细 (4 )退出系统 2. 代码优化部分 (1) 对用户输入 4 退出时,给出提示 “你确定要退出吗?y/n”,必须输入正确的 y/n,…...
Cursor无法使用C/C++调试的解决办法
背景 这几天在二开ffmpeg,发现用cursor无法使用cppdbg进行调试,只能上机gdb,比较麻烦。 配置文件 // launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// Fo…...
VSTO(C#)Excel开发进阶2:操作图片 改变大小 滚动到可视区
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 入…...
嵌入式自学第二十二天(5.15)
顺序表和链表 优缺点 存储方式: 顺序表是一段连续的存储单元 链表是逻辑结构连续物理结构(在内存中的表现形式)不连续 时间性能, 查找顺序表O(1):下标直接查找 链表 O(n):从头指针往后遍历才能找到 插入和…...
高云FPGA-新增输出管脚约束
module led (input sys_clk, // clk inputinput sys_rst_n, // reset inputoutput reg [5:0] led, // 6 LEDS pinoutput reg gpio // 1 GPIO pin 25 ); 在原来的代码基础上新增加一个gpio输出,绑定到25管脚上 打开工程文件夹中的cts文件…...
Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查
Nginx 返回 504 状态码表示 网关超时(Gateway Timeout),这意味着 Nginx 作为反向代理服务器,在等待上游服务器(如后端应用服务器、数据库服务器等)响应时,超过了预设的时间限制,最终…...
单片机 | 基于STM32的智能马桶设计
基于STM32的智能马桶设计结合了传感器技术、嵌入式控制及物联网功能,旨在提升用户体验并实现健康监测。以下是其设计原理、功能模块及代码框架的详细解析: 一、系统架构与核心功能 智能马桶的系统架构通常分为主控模块、传感器模块、执行器模块、通信模块及用户交互模块,主…...
2900. 最长相邻不相等子序列 I
2900. 最长相邻不相等子序列 I class Solution:def getLongestSubsequence(self, words: List[str], groups: List[int]) -> List[str]:n len(groups) # 获取 groups 列表的长度ans [] # 初始化一个空列表,用于存储结果for i, g in enumerate(groups): # 遍…...
欧姆龙 CJ/CP 系列 PLC 串口转网口模块:工业通信升级的智能之选
在工业自动化领域,欧姆龙 CJ/CP 系列 PLC 凭借高可靠性和灵活扩展性,广泛应用于汽车制造、食品加工、能源化工等关键行业。然而,传统串口通信的局限性(如距离受限、协议兼容性差、难以实现远程监控)却成为企业智能化升…...
BGP选路实验
一.需求 1.使用PreVal策略,确保R4通过R2到达192.168.10.0/24 2.使用As_Path策略,确保R4通过R3到达192.168.11.0/24 3.配置MED策略,确保R4通过R3到达192.168.12.0/24 4.使用Local Preference策略,确保R1通过R2到达192.168.1.0/2…...
Linux服务之lvs+keepalived nginx+keepalived负载均衡实例解析
目录 一.LVSKeepAlived高可用负载均衡集群的部署 二.NginxKeepAlived高可用负载均衡集群的部署 一.LVSKeepAlived高可用负载均衡集群的部署 实验环境 主keepalived:192.168.181.10 lvs (7-1) 备keepalived:192.168.181.10…...
idea整合maven环境配置
idea整合maven 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】:每个知识点,都是写出代码…...
pytest框架 - 第二集 allure报告
一、断言assert 二、Pytest 结合 allure-pytest 插件生成美观的 Allure 报告 (1) 安装 allure 环境 安装 allure-pytest 插件:pip install allure-pytest在 github 下载 allure 报告文件 地址:Releases allure-framework/allure2 GitHub下载&#x…...
互联网大厂Java求职面试:构建高并发直播平台的架构设计与优化
标题:互联网大厂Java求职面试:构建高并发直播平台的架构设计与优化 引言 在互联网大厂的Java求职面试中,技术总监级别的面试官通常会提出一系列复杂且前沿的技术问题,以评估候选人的真实技术水平。本篇文章将围绕构建一个千万级…...
Ruby 循环与迭代器
Ruby 循环与迭代器 循环迭代器timesuptostep 循环 。。。。 迭代器 迭代器本质上可以理解为是循环的一种类型 times 3.times do print "Ho! " end begin Ho! Ho! Ho! end上述代码表示我们对当前 block 部分中的内容循环三次。最终,我们打印出了三个…...
pyenv简单的Python版本管理器(macOS版)
问题 python版本是真的多,需要用一个版本管理器管理Python多版本安装在同一台机器的问题。接下来,我们就尝试使用pyenv来管理。 安装pyenv brew update brew install pyenv配置Zsh echo export PYENV_ROOT"$HOME/.pyenv" >> ~/.zshr…...
Automatic Recovery of the Atmospheric Light in Hazy Images论文阅读
Automatic Recovery of the Atmospheric Light in Hazy Images 1. 论文的研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 论文的创新方法、模型与公式2.1 方法框架2.1.1 方向估计(Orientation Estimation)2.1.2 幅值估计(Magnitude Estimation)2.2 与传统方法的对…...
Vuex和Vue的区别
Vue和Vuex有着不同的功能和定位,主要区别如下: 概念与功能 - Vue:是一个构建用户界面的JavaScript框架,专注于视图层的开发,采用组件化的方式构建应用程序,通过数据绑定和指令系统,能方便地…...
全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷八及详细答案解析
信息素养大赛初赛Python编程模拟试卷八 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...
RabbitMQ 消息模式实战:从简单队列到复杂路由(二)
进阶探索:工作队列模式 工作队列模式剖析 工作队列模式,也被称为任务队列模式,是对简单队列模式的一种扩展和优化,旨在解决当任务量较大时,单个消费者无法快速处理所有任务的问题 。在工作队列模式中,依然…...
崩坏星穹铁道风堇前瞻养成攻略 崩坏星穹铁道风堇配队推荐
风堇是崩坏星穹铁道3.3上半版本即将登场的一名全新五星角色,她的机制和强度都还不错,今天就给大家一些养成攻略。 一、突破材料准备 1.基础材料:旅情见闻 3 个冒险记录 3 个漫游指南 289 个命运的足迹 8 个 2.特供材料:思量的种…...
如何利用 Python 爬虫按关键字搜索京东商品:实战指南
在电商领域,京东作为国内知名的电商平台,拥有海量的商品数据。通过 Python 爬虫技术,我们可以高效地按关键字搜索京东商品,并获取其详细信息。这些信息对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。本文将…...
阿里云的网络有哪些
阿里云的网络类型丰富,主要包括以下几种: 专有网络 VPC(Virtual Private Cloud)1:是用户基于阿里云创建的自定义私有网络。不同的专有网络之间二层逻辑隔离,用户可在自己创建的专有网络内创建和管理云产品…...
【微信小程序】webp资源上传失败
正文 快速开发了一个小程序,图片资源占比较多,于是从 png 到 jpg 压缩,勉强满足了 2MB 的限制,不用另外准备 cdn。 但这样肯定不适合,进一步更新时,空间便会爆表。 于是花了点时间,将所有的…...
鸿蒙 ArkUI - ArkTS 组件 官方 UI组件 合集
ArkUI 组件速查表 鸿蒙应用开发页面上需要实现的 UI 功能组件如果在这 100 多个组件里都找不到,那就需要组合造轮子了 使用技巧:先判断需要实现的组件大方向,比如“选择”、“文本”、“信息”等,或者是某种形状比如“块”、“图…...
科学养生指南:解锁健康生活的密码
健康是人生最宝贵的财富,科学养生则是守护这笔财富的关键。即使抛开传统中医理论,现代科学也为我们提供了诸多实用的养生方法。 合理饮食是健康养生的基石。人体需要碳水化合物、蛋白质、脂肪、维生素和矿物质等多种营养物质维持运转。日常饮食应遵循…...
Linux的进程管理和用户管理
gcc与g的区别 比如有两个文件:main.c mainc.cpp(分别是用C语言和C语言写的)如果要用gcc编译: gcc -o mainc main.c gcc -o mainc mainc.cpp -lstdc表明使用C标准库; 区别一: gcc默认只链接C库&#x…...
数据科学和机器学习的“看家兵器”——pandas模块 之五
目录 4.5 pandas 高级数据处理与分析 一、课程目标 二、对数据表格进行处理 (一)行列转置 (二)将数据表转换为树形结构 三、数据表的拼接 (一)merge () 函数的运用 (二)concat () 函数的运用 (三)append () 函数的运用 四、对数据表格的同级运算 五、计算数据表格中数…...
轻量级Web画板Paint Board如何本地部署与随时随地在线绘画分享
文章目录 前言1.关于Paint Board2.本地部署paint-board3.使用Paint Board4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Paint Board公网地址 前言 今天我要给大家介绍一款超级轻便、好玩到飞起的Web画板Paint Board!这可是创意人手中的秘密武器。无论是刚…...
攻击溯源技术体系:从理论架构到工程化实践的深度剖析
一、攻击溯源的理论基石与模型构建 1.1 形式化理论框架 攻击溯源本质上是基于离散数学与图论的演绎推理过程。通过构建攻击事件有向图(AEDG, Attack Event Directed Graph),将网络空间中的每个事件抽象为节点,事件间的因果关系…...
fpga系列 HDL : Microchip FPGA开发软件 Libero Soc 安装 license申请
启动 注册账号:https://login.microchip.com/申请免费许可:https://www.microchipdirect.com/fpga-software-products C:\Windows\System32>vol驱动器 C 中的卷是 Windows卷的序列号是 ****-****为“D:\Microsemi\License.dat”创建环境变量“LM_LICE…...
海康立体相机3DMVS软件使用不同工作模式介绍
文章目录 1. Sensor Calibration(传感器标定模式)2. Depth(深度模式)3. RGB-D(彩色深度融合模式)4. Depalletizing(拆垛模式)5. Debug(调试模式)6. Point Clo…...
深度学习、机器学习及强化学习的联系与区别
联系 深度学习与机器学习 :深度学习是机器学习的一个分支。机器学习涵盖众多方法,如决策树、支持向量机等,而深度学习基于神经网络构建多层结构来学习数据特征。深度学习利用反向传播算法和梯度下降等优化方法来训练神经网络模型,…...
75.xilinx复数乘法器IP核调试
(83*j)*(57j) 935j 正确的是 1971j 分析出现的原因:(abj)* (cdj) (ac-bd)j(adbc) 其中a,b,c,d都是16bit的有符号数,乘积的结果为保证不溢出需要32bit存储,最终的复数乘法结果是两个32b…...
【笔记】CosyVoice 模型下载小记:简单易懂的两种方法对比
#工作记录 笔记标签:#CosyVoice 模型 #模型下载 #ModelScope #Git LFS #语音合成开发 一、强烈推荐:用 ModelScope SDK 下载(简单又靠谱) 1.1 好处多多 不容易出错:能自动把模型需要的所有东西都下载好,…...