ARM---I.MX6ULL时钟系统详解、时钟树、系统时钟配置等
一. I.MX6ULL时钟系统详解I.MX6ULL 的系统主频为 528MHz有些型号可以跑到 696MHz但是默认情况下内部 boot r om会将 I.MX6ULL 的主频设置为 396MHz。在使用 I.MX6ULL 的时候肯定是要发挥它的最大性能那么主频肯定要设置到 528MHz(其它型号可以设置更高比如 696MHz)其它的外设时钟也要设置到 NXP 推荐的值如下表所示。1.1 系统时钟的来源从图中可以看出 I.MX6ULL 开发板的系统时钟来源于两部分32.768KHz 和 2 4MHz 的晶振其中32.768KHz 晶振是 I.MX6ULL 的 RTC 时钟源(实时时钟)24MHz 晶振是 I.MX6ULL 内核和其它外设的时钟源也是重点1.2 七路 PLL 时钟源I.MX6ULL 的外设有很多不同的外设时钟源不同NXP 将这些外设的时钟源进行了分组 一共有 7 组这 7 组时钟源都是从24MHz 晶振 PLL而来的因此也叫做 7 组 PLLPLL锁相环Phase-Locked Loop全称相位锁定环路模拟高频发生电路功能外部只有低速晶振i.MX6ULL 为 24MHzPLL 可以把 24MHz 成倍放大到几百 MHz供给 CPU、DDR、高速外设。 普通分频器只能降频只有 PLL 能升频。这七个PLL如下表所示ARM PLLPLL 1作用给 Cortex-A7 CPU 内核提供主频时钟该锁相环从 24 MHz 的参考时钟中合成出具有低抖动的时钟。此锁相环的时钟输出频率范围在650 MHz 至 1.3 GHz之间。输出频率由 7 位寄存器字段CCM_ANALOG_PLL_ARM[DIV_SELECT]来选择地址0x020C8000PLL 输出频率 Fref * DIV_SEL / 2System PLL(528 PLL)PLL 2固定倍频不可软件修改,输出恒定 528MHz固定22倍频PFD 典型输出PFD0 352 MHzPFD1 594 MHzPFD2 400(396) MHzPFD3 297 MHz作用SoC 绝大多数总线、内存、通用外设时钟所使用通常 528_PLL 和这 4 路 PFD 是 I.MX6U 内部系统总线的 时钟源比如内处理逻辑单元、DDR 接口、NAND/NOR 接口等等USB1 PLL(480 PLL)PLL 3固定倍频不可软件修改,输出恒定 480 MHz固定倍频20倍频PFD 典型输出PFD0 720 MHzPFD1 540 MHzPFD2 508 MHzPFD3 454.7 MHz作用此路 PLL 主要用于 USBPHY但是其和四路 PFD 同样也可以作为其他外设的根时钟源PLL 4Audio PLL主供给音频使用音频接口SPDIF, SAI1 - SAI3输出范围650MHz ~ 1.3GHz输出频率可通过编程 CCM_ANALOG_PLL_AUDIO、CCM_ANALOG_PLL_VIDEO 和 CCM_ANALOG_MISC2 寄存器组中的字段来设定其依据以下公式计算得出PLL output frequency Fref * (DIV_SELECT NUM/DENOM)PLL 5Video PLL主供给视频外设和图像处理有关的外设egRGB LCD接口输出范围650MHz ~ 1.3GHz输出频率可通过编程 CCM_ANALOG_PLL_AUDIO、CCM_ANALOG_PLL_VIDEO 和 CCM_ANALOG_MISC2 寄存器组中的字段来设定其依据以下公式计算得出PLL output frequency Fref * (DIV_SELECT NUM/DENOM)PLL 6Ethernet PLL此路 PLL 固定为 205/6 倍频因此 ENET_PLL24MHz * (205/6) 500MHz。作用用于生成网络所需的时钟PLL 7USB2 PLL用来调试1.3 CCM clock tree 时钟树简介在图中一共有三部分CLOCK_SWITCHER、CLOCK ROOT GENERATOR和SYSTEM CLOCKS。其中左边的 CLOCK_SWITCHER 就是上一小节讲解的那 7 路 PLL 和 8 路 PFD右边的 SYSTEM CLOCKS 就是芯片外设中间的 CLOCK ROOT GENERATOR 是 最复杂的这一部分就像“月老”一样 给左边的 CLOCK_SWITCHER 和右边的 SYSTEM C LOCKS 进行牵线搭桥。外设时钟源是有多路可以选择的CLOCK ROOT GENERATOR 就负 责从 7 路 PLL 和 8 路 PFD 中选择合适的时钟源给外设使用1.4 有关时钟配置的器件1.4.1 PLL锁相环phased locked loop作用倍频倍频因子N输出24*N1.4.2 Prescaler预分频器Prescaler作用分频分频因子M输出24/M1.4.3 PFD相位分数分频器phased fraction divder作用可以倍频也可以降频倍频分频因子N M输出24 * N / MN /M 1倍频N / M1降频二. 系统时钟配置2.1 内核时钟配置使用到的寄存器CCMClock Controller Module时钟控制器模块的各种寄存器CCM_ANALOG系列寄存器2.1.1 ARM内核时钟树ARM内核时钟树如下图1、内核时钟源来自于 PLL1此时 PLL1 为 996MHz。2、通过寄存器CCM_CACRR的ARM_PODF位对PLL1进行分频可选择 1/2/4等分频假如选择 2 分频那么经过分频以后的时钟频率是 996/2498MHz也就是IMX6ULL的主频3、设置内核主频为 528MHz那么 PLL1 可以设置为 1056MHz寄存器CCM_CACRR的ARM_PODF位设置为 2 分频即可。同理如果要将主频设 置为 696MHz那么 PLL1 就可以设置为 696MHzCCM_CACRR的ARM_PODF设置为 1 分 频即可。接下来详细的看一下CCM_CACRR和CCM_ANALOG_PLL_ARMn这两个寄存器4、寄存器CCM_CACRR(CCM ARM Clock Root Register) (内核根时钟寄存器)结构如下ARM_PODF000 一分频001 二分频010 三分频011 四分频100 五分频101 六分频110 七分频111 八分频5、寄存器CCM_ANALOG_PLL_ARMn(ARM 锁相环控制寄存器)BYPASS_CLK_SRC0选择24MHz晶振作为时钟源ENABLE1使能0禁止DIV_SELECT此位设置 PLL1 的输出频率可设置范围为54~108可得出PLL1的范围648 - 1296MHz公式PLL1 CLK Fin * div_seclec/2.0Fin24MHz如果 PLL1 要输出 1056MHz 的话div_select 就要设置为 882.1.2 PLL1 时钟开关配置内核前boot rom默认配置主频为396MHz在修改内核时钟频率的时候需要先将内核时钟源改为其他的时钟源因为时钟频率突然的升高可能会导致内核工作状态死机等异常状态修改过程如下图所示1、pll1_sw_clk也就是 PLL1 的最终输出频率2、左边是一个选择器选择pll1_sw_clk的时钟源由寄存器CCM_CCSR的PLL1_SW_ CLK_SEL位决定pll1_sw_clk是选择pll1_main_clk还是step_clk。正常情况下应该选择pll1_main_clk但是如果要对pll1_main_clk(PLL1)的频率进行调整的话比如要设置PLL11056 MHz此时就要先将pll1_sw_clk切换到step_clk上。等pll1_main_clk调整完成以后再切换回来3、再下面也是一个选择器选择step_clk的时钟源由寄存器CCM_CCSR的STEP_SEL位来决定step_clk是选择osc_clk还是secondary_clk。一般选择osc_clk也就是24MHz的晶振4、寄存器CCM_CCSR(CCM Clock Switcher register)---时钟切换寄存器STEP_SEL作用选择step_clk的时钟源0 选择 osc_clk (24M)1 选择 secondary_clkPLL1_SW_CLK_SEL作用选择pll1_sw_clk的时钟源0选择pll1_main_clk1选择step_clk2.1.3 配置内核时钟示例代码/配置 ARM 时钟 CCM-CCSR ~(1 8); /选择 step_clk osc_clk 24MHz CCM-CCSR | (1 2); /选择 pll1_sw_clk step_clk 24MHz t CCM_ANALOG-PLL_ARM; t ~(3 14); /选择24MHz做为时钟源 t | (1 13); /使能时钟 t ~(0x7F 0); /先将低七位清零 t | (88 0); /DIV_SELECT 88 CCM_ANALOG-PLL_ARM t; CCM-CACRR | (1 0); /设置PLL1输出二分频 CCM-CCSR ~(1 2); /选择 pll1_sw_clk pll1_main_clk2.2 配置PLL2与PLL3的8个PFD设置好主频以后还需要设置好其他的 PLL 和 PFD 时钟PLL1 上一节已经设置了PLL2、PLL3 和 PLL7固定为528MHz、480MHz 和 480MHzPLL4~PLL6 都是针对特殊外设的用到的时候再设置。因此接下来重点就是设置 PLL2 和 PLL3 的各自 4 路 PFDNXP 推荐的这 8 路 PFD 频率如图所示这两个要通过寄存器CCM_ANALOG_PFD_528与CCM_ANALOG_PFD_480来设置2.2.1寄存器CCM_ANALOG_PFD_528其余位同理PLL2_PFD1~PLL2_PFD3 设置类似PFD0_FRACPLL2_PFD0 的分频数PLL2_PFD0 的计算公式为528*18/PFD0_FRAC范围此位可设置的范围为12~35如果 PLL2_PFD0 的频率要设置为 352MHz 的话PFD0_FRAC528* 18/35227。如果 PLL2_PFD0352 MHz 的话PFD0_FRAC27如果 PLL2_PFD1594MHz 的话PFD1_FRAC16如果 PLL2_P FD2396MHz 的话PFD2_FRAC24如果 PLL2_PFD3297MHz 的话PFD3_FRAC32PFD0_STABLE此位为只读位可以通过读取此位判断 PLL2_PFD0 是否稳定PFD0_CLKGATEPLL2_PFD0 输出使能位为 1 的时候关闭 PLL2_PFD0 的输出为 0 的时候使能输出2.2.2 寄存器CCM_ANALOG_PFD_480从图可以看出寄存器 CCM_ANALOG_PFD_480n 和 CCM_ANALOG_PFD_528n 的结构是一模一样的只是一个是 PLL2 的一个是 PLL3 的。寄存器位的含义也是一样的只是频率计算公式不同比如 PLL3_PFDX480*18/PFDX_FRAC(X0~3)如果 PLL3_PFD0720 MHz 的话PFD0_FRAC12如果 PLL3_PFD1540MHz 的话PFD1_FRAC16;如果 PLL3_P FD2508.2MHz 的话PFD2_FRAC17如果 PLL3_PFD3454.7MHz 的话PFD3_FRAC192.2.3 示例代码/配置 PLL2 的四路PFDPFD0 PFD1 PFD2 PFD3 t CCM_ANALOG-PFD_528; /配置PLL2的四路PFD输出指定频率时钟并且使能时钟 t ~((0x3F 0) | (0x3F 8) | (0x3F 16) | (0x3F 24)); t ~((1 7) | (1 15) | (1 23) | (1 31)); /启用分数分频器 t | ((27 0) | (16 8) | (24 16) | (32 24)); CCM_ANALOG-PFD_528 t; /配置 PLL3 的四路PFDPFD0 PFD1 PFD2 PFD3 t CCM_ANALOG-PFD_480; /配置PLL3的四路PFD输出指定频率时钟并且使能时钟 t ~((0x3F 0) | (0x3F 8) | (0x3F 16) | (0x3F 24)); t ~((1 7) | (1 15) | (1 23) | (1 31)); /启用分数分频器 t | ((12 0) | (16 8) | (17 16) | (19 24)); CCM_ANALOG-PFD_480 t;2.3 配置三个根时钟这一节配置三个根时钟分别是AHB_CLK_ROOT、PERCLK_CLK_ROOT、IPG_CLK_ROOT由时钟树得知很多外设如EPIT、I2C、ADC、WDOG等时钟都来自这三个根时钟故要对这三个根时钟进行配置IMX6ULL外设根时钟可设置范围如图所示又图可知AHB_CLK_ROOT最高可以设置132MHzIPG_CLK_ROOT和PERCLK_CLK_ROOT最高可以设置66MHz。那就将 AHB_CLK_ ROOT、IPG_CLK_ROOT 和 PERCLK_CLK_ROOT 分别设置为 132MHz、66MHz、66MHz。2.3.1 配置AHB_CLK_ROOT配置步骤第一步此选择器用来选择 pre_periph_clk 的时钟源可以选择PLL2、PLL2_PFD2、PLL2_PF D0 和 PLL2_PFD2/2。寄存器 CCM_CBCMR 的 PRE_PERIPH_CLK_SEL位决定选择哪一个默认选择 PLL2_PFD2因此 pre_periph_clkPLL2_PFD2396MHz寄存器 CCM_CBCMRPRE_PERIPH_CLK_SEL(19 - 18)作用pre_periph 时钟源选择00 选择 PLL2 --- 528MHz01 选择 PLL2_PFD2 --- 396MHz10 选择 PLL2_PFD0 --- 352MHz11 选择 PLL2_PFD2/2 --- 396/2MHz第二步由寄存器 CCM_CBCDR的PERIPH_CLK_SEL来选择IPG_PODF(9 - 8)IPG时钟分频00 一分频01 二分频10 三分频11 四分频AHB_PODFAHB 时钟分频0001分频001 2分频010 3分频------396 / 3 132MHz011 4分频100 5分频101 6分频110 7分频111 8分频PERIPH_CLK_SEL0 PLL2 (pll2_main_clk)1 derive clock from periph_clk2_clk clock source第三步设置3分频即可也是使用寄存器 CCM_CBCDR2.3.2 配置PERCLK_CLK_ROOT与IPG_CLK_ROOT注意这里要使用寄存器CBCDR[IPG_PODF]来设置二分频132/266才能得到想要的频率寄存器CCM_CSCMR1PERCLK_PODF(低5位)000000 divide by 1000001 divide by 2000010 divide by 3000011 divide by 4000100 divide by 5000101 divide by 6000110 divide by 7111111 divide by 64PERCLK_CLK_SEL(bit 6)0 :选择 ipg clk1 :选择 osc clk2.3.3 示例代码/配置三个根时钟 /AHB_CLK_ROOT t CCM-CBCMR; t ~(3 18); t | (1 18); /选择PFD2 CCM-CBCMR t; t CCM-CBCDR; t ~(1 25); /选择PLL2 t ~((7 10) | (3 8)); /三分频输出 t | (2 10); t | (1 8); /配置IPG_CLK_ROOT 132/2 66MHz CCM-CBCDR t; /PERCLK_CLK_ROOT t CCM-CSCMR1; t ~(1 6); /选择 IPG_CLK_ROOT配置PERCLK_CLK_ROOT IPG_CLK_ROOT t ~(0x3F 0); /选择一分频PERCLK_CLK_ROOT IPG_CLK_ROOT 66MHz CCM-CSCMR1 t;三. IMX6ULL配置与使能时钟完整代码示例代码#includeMCIMX6Y2.h #includeclock.h //打开所有时钟门 void enable_clocks(void) { CCM-CCGR0 0xFFFFFFFF; CCM-CCGR1 0xFFFFFFFF; CCM-CCGR2 0xFFFFFFFF; CCM-CCGR3 0xFFFFFFFF; CCM-CCGR4 0xFFFFFFFF; CCM-CCGR5 0xFFFFFFFF; CCM-CCGR6 0xFFFFFFFF; } //初始化时钟 void clock_init(void) { unsigned int t; //配置 ARM 时钟 CCM-CCSR ~(1 8); //选择 step_clk osc_clk 24MHz CCM-CCSR | (1 2); //选择 pll1_sw_clk step_clk 24MHz t CCM_ANALOG-PLL_ARM; t ~(3 14); //选择24MHz做为时钟源 t | (1 13); //使能时钟 t ~(0x7F 0); //先将低七位清零 t | (88 0); //DIV_SELECT 88 CCM_ANALOG-PLL_ARM t; CCM-CACRR | (1 0); //设置PLL1输出二分频 CCM-CCSR ~(1 2); //选择 pll1_sw_clk pll1_main_clk //配置 PLL2 的四路PFDPFD0 PFD1 PFD2 PFD3 t CCM_ANALOG-PFD_528; //配置PLL2的四路PFD输出指定频率时钟并且使能时钟 t ~((0x3F 0) | (0x3F 8) | (0x3F 16) | (0x3F 24)); t ~((1 7) | (1 15) | (1 23) | (1 31)); //启用分数分频器 t | ((27 0) | (16 8) | (24 16) | (32 24)); CCM_ANALOG-PFD_528 t; //配置 PLL3 的四路PFDPFD0 PFD1 PFD2 PFD3 t CCM_ANALOG-PFD_480; //配置PLL3的四路PFD输出指定频率时钟并且使能时钟 t ~((0x3F 0) | (0x3F 8) | (0x3F 16) | (0x3F 24)); t ~((1 7) | (1 15) | (1 23) | (1 31)); //启用分数分频器 t | ((12 0) | (16 8) | (17 16) | (19 24)); CCM_ANALOG-PFD_480 t; //配置三个根时钟 //AHB_CLK_ROOT t CCM-CBCMR; t ~(3 18); t | (1 18); //选择PFD2 CCM-CBCMR t; t CCM-CBCDR; t ~(1 25); //选择PLL2 t ~((7 10) | (3 8)); //三分频输出 t | (2 10); t | (1 8); //配置IPG_CLK_ROOT 132/2 66MHz CCM-CBCDR t; //PERCLK_CLK_ROOT t CCM-CSCMR1; t ~(1 6); //选择 IPG_CLK_ROOT配置PERCLK_CLK_ROOT IPG_CLK_ROOT t ~(0x3F 0); //选择一分频PERCLK_CLK_ROOT IPG_CLK_ROOT 66MHz CCM-CSCMR1 t; //使能时钟 enable_clocks(); }

相关新闻

高质量 Agent 项目六大核心标准深度解析(面试官视角完整版)

高质量 Agent 项目六大核心标准深度解析(面试官视角完整版)

引言:本文提炼了企业级 AI Agent 项目的六大核心标准,从业务锚定、工程化体系、智能调度、上下文治理到全链路评估与人机兜底,系统拆解面试官真正关注的生产级能力。目标读者是正在准备 Agent 项目面试、进行技术复盘或规划落地架构的开发者——帮你从 Demo 思维转向工程化、…

2026/9/19 3:34:44 阅读更多 →
爱好 | 速通乐理笔记 [未完结]

爱好 | 速通乐理笔记 [未完结]

一、音名与钢琴键盘01 音名:C、D、E、F、G、A、B二、升降号、还原号01 半音、全音:#C 和 Db 是一个音,这样取是因为在钢琴中,从左到右声调是由低到高的一个黑键有两个音的名字是因为加上还原号以后能够还原为两个不同的音02 等音&…

2026/9/16 4:55:46 阅读更多 →
【AI办公落地实战指南】:20年IT老兵亲测的7个零成本提效场景,90%企业还没用起来

【AI办公落地实战指南】:20年IT老兵亲测的7个零成本提效场景,90%企业还没用起来

更多请点击: https://kaifayun.com 第一章:AI办公落地的认知重构与误区破除 AI办公不是简单地给现有流程叠加一个“智能插件”,而是一场从目标设定、角色定义到协作范式的系统性重校准。许多团队在初期陷入“技术先行”陷阱——采购大模型AP…

2026/9/15 13:16:03 阅读更多 →

最新新闻

用Windows Update Blocker永久禁用系统强制更新:原理与实操

用Windows Update Blocker永久禁用系统强制更新:原理与实操

我真的受够了。每次赶方案赶到一半,电脑突然弹出“正在配置Windows更新,请不要关闭计算机”,然后就是漫长的黑屏转圈;要么就是刚装好的显卡驱动,一夜之间被系统偷偷回滚成旧版本,游戏帧率直接腰斩。我相信每…

2026/9/19 22:43:14 阅读更多 →
UNI-APP(Android)选择文件上传、下载文件

UNI-APP(Android)选择文件上传、下载文件

<template><view class"content"><view class"server-address"><view class"title">上传地址:</view><input class"uni-input" v-model"serverAddress" input"onKeyInput" plac…

2026/9/19 22:43:14 阅读更多 →
BrewUI:macOS原生Homebrew图形界面,SwiftUI深度集成方案

BrewUI:macOS原生Homebrew图形界面,SwiftUI深度集成方案

1. BrewUI 是什么&#xff1f;一个 macOS 原生、可交互的 Homebrew 图形界面&#xff0c;不是“替代品”&#xff0c;而是“放大器”BrewUI 这个名字一出来&#xff0c;很多人第一反应是&#xff1a;“Homebrew 不是命令行工具吗&#xff1f;怎么突然有 UI 了&#xff1f;”——…

2026/9/19 22:43:14 阅读更多 →
2025年CSP-J备考全攻略:大纲变化、核心知识点与刷题路线

2025年CSP-J备考全攻略:大纲变化、核心知识点与刷题路线

每年到了三四月份&#xff0c;我带的信奥群里就会开始出现同一类问题&#xff1a;“孩子今年想冲CSP-J&#xff0c;现在开始准备来得及吗&#xff1f;”说实话&#xff0c;这个问题我每年都答&#xff0c;但答案内核始终没变&#xff1a;来得及&#xff0c;但前提是你真的把CSP…

2026/9/19 22:43:14 阅读更多 →
OfficeCLI 折线图全攻略:用命令行在 Excel 中生成 line / lineStacked / line3d 图表

OfficeCLI 折线图全攻略:用命令行在 Excel 中生成 line / lineStacked / line3d 图表

OfficeCLI 折线图全攻略&#xff1a;用命令行在 Excel 中生成 line / lineStacked / line3d 图表 【免费下载链接】OfficeCLI OfficeCLI 是首款也是最佳的专为 AI 代理设计的命令行工具&#xff0c;可用于读取、编辑和自动化处理 Word、Excel 和 PowerPoint 文件。它免费、开源…

2026/9/19 22:43:14 阅读更多 →
Branch节点深度解析:读取节点图分支逻辑与性能优化实战

Branch节点深度解析:读取节点图分支逻辑与性能优化实战

在节点式开发环境里待久了&#xff0c;你会发现一个特别有意思的现象&#xff1a;Branch节点是被用得最多、但最被低估的节点之一。很多人拖一个Branch节点出来&#xff0c;接上布尔值&#xff0c;两条输出一接&#xff0c;就认为大功告成。但等到项目复杂起来&#xff0c;分支…

2026/9/19 22:42:14 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介&#xff1a;面向机器学习、深度学习与数据建模学习者的一份完整研究文献&#xff0c;聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本&#xff0c;系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程&#xff0c;展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型&#xff0c;在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志&#xff0c;发现loss从凌晨两点就开始往上爬&#xff0c;一路从0.8涨到1.35&#xff0c;整整六个小时没人发现。那六个小时的训练不仅白跑&#xff0c;还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast&#xff1a;从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud &#x1f324;️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南&#xff1a;掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战&#xff1a;基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时&#xff0c;甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事&#xff0c;打开配置文件改一行不就完了&#xff1f;结果真动手才发现&#xff0c;Flutter项目里“应用名称”根本不是一处配置&#xff0c;而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践&#xff1a;原型怎样变成可用功能分类&#xff1a;[AI/大模型]细分主题&#xff1a;AI 增强型 CI/CD 流水线自动化与 GitOps 实践&#xff1a;Agent 工作流、工具调用与任务拆解&#xff1a;从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战&#xff1a;复盘记录怎样真正派上用场分类&#xff1a;[工程技术]细分主题&#xff1a;Kubernetes 生产环境运维与排障实战&#xff1a;可复制的项目复盘模板与决策记录大部分团队的事故复盘报告&#xff0c;最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理&#xff1a;核心链路应该先拆哪一步分类&#xff1a;[工程技术]细分主题&#xff1a;Docker 容器化技术与镜像安全管理&#xff1a;核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用&#xff08;包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →