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

I.MX6U 裸机开发20. DDR3 内存知识

I.MX6U 裸机开发20. DDR3 内存知识

  • 一、DDR3内存简介
    • 1. DDR发展历程
      • SRAM
      • SDRAM
      • DDR1
      • DDR2
      • DDR3
      • DDR4
      • DDR5
    • 2. 开发板资源
    • 3. DDR3的时间参数
      • 1. 传输速率
      • 2. tRCD
      • 3. CL 参数
      • 作用
      • 取值范围
      • 工作原理
      • 4. tRC参数
      • 原理
      • 单位与取值
      • 5. tRAS
      • 重要性及作用
  • 二、I.MX6U MMDC 控制器
    • 1. MMDC简介
      • (1)主要组成部分
      • (2)支持的存储类型及特性
      • (3)时钟频率与数据速率
      • (4)校准程序
      • (5)其他特性
    • 2. 时钟源
    • 3. 开发板原理图
  • 三、DDR3初始化与测试
    • 1. ddr_stres_tester简介
      • xlsx 文件
    • 2. 下载配置信息
      • (1)直接进行超频测试
      • (2)校准
      • (3)超频测试
  • 四、DCD数据
    • 1. 打开 《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81.pdf》

一、DDR3内存简介

1. DDR发展历程

SRAM

SRAM(Static Random - Access Memory)即静态随机存取存储器,是一种半导体存储器。
SRAM 存储单元通常由 6 个晶体管组成(CMOS 工艺)。这种结构可以在不进行刷新操作的情况下保持数据的存储状态,容量小、价格高、速度快。
在传统的51单片机、STM32中,会有芯片内部RAM,即SRAM。在高级一点单片机,可以使用外扩RAM。
以 IS62WV51216 SRAM为例,这是一个1M Byte存储器,从数据手册可以看到其功能框图:
在这里插入图片描述
其中:

  • A0-A18:19根地址线
  • I/O0-7, I/O8-15:数据低字节、高字节
  • CS:片选
  • OE:读使能
  • WE:写使能
  • UB:低电平:访问高字节
  • LB:低平平:访问低字节

SDRAM

SDRAM(Synchronous Dynamic Random Access Memory)是一种同步动态随机存取存储器,SDRAM需要时钟线,常见的频率有100MHz、133MHz、166MHz、200MHz,相对于SRAM价格低、速率低。
以W9825G6KH为例,其功能框图:
在这里插入图片描述
引脚介绍:

  • CLK:时钟线

  • CKE:时钟使能信号,SRAM没有CKE。

  • CS:片选

  • RAS:行选通信号

  • CAS:列选通信号

  • WE:写使能信号

  • A10:地址线&自动预充电

  • A0~A12:地址线

  • BS0:BANK0选择信号线

  • BS1:BANK1选择信号线

  • D0~D15:数据线

    其容量:
    行 2 13 ∗ 列 2 9 ∗ 4 个 B a n k ∗ 2 字节位宽 = 32 M B y t e 行 2^{13} * 列 2{^9} * 4个Bank * 2字节位宽 = 32MByte 213294Bank2字节位宽=32MByte

DDR1

DDR1由三星公司于1996年提出,1998年12月,联合电子设备工程委员会(JEDEC)正式确定了DDR内存与DDR内存部件的规范。它是在SDRAM内存基础上发展而来,其诞生是为了对抗Intel提倡的Rambus标准.
DDR1沿用了SDRAM的生产体系,但采用了更加先进的双倍数据速度技术,即DDR1内存在每个时钟周期预取2位数据,这样DDR1在每个时钟周期的上升沿和下降沿都进行数据传输,使得数据传输速率是传统SDRAM的两倍。

DDR1初始频率为200MHz,后来发展到DDR-266、DDR-333和主流的DDR-400,数据传输速度相比SDRAM有了显著提升 。从外形上看,DDR1内存条有184个引脚,金手指中有一个缺口,而SDRAM内存条是168个引脚,并且有两个缺口。

DDR1的容量范围,最初只有单通道,容量从128MB增加到1GB。

DDR2

DDR2是由JEDEC进行开发的一种新内存技术标准,于2003年正式发布。DDR2内存均采用FBGA封装形式,拥有240个引脚,电气性能与散热性更好,有利于内存的稳定工作与未来频率的发展。与DDR1相比,DDR2的预读取能力是DDR1的两倍,在每个时钟脉冲周期内都能以四倍外部总线的速度读/写数据,并且能够以内部控制总线四倍的速度运行。
DDR2采用1.8V电压,相比DDR1的2.5V降低了功耗。

DDR2容量从256MB起步,最大支持到4GB。

DDR3

DDR3是一种使用SSTL15接口的计算机内存规格,于2007年发布。与DDR2相比,它拥有更高的运行效能与更低的电压,同时更省电、传输效率更快。
DDR3突发长度增加了4bit突发突变模式,能够提供更灵活的突发传输控制;寻址时序的CL周期有所提高,并提供了0CL-1和CL-2三种AL选项,同时还新增加了写入延迟这一时序参数;专门准备了一个引脚实现重置功能,能够让DDR3内存停止所有操作,并切换至最少量活动状态,从而节约电力;还新增了ZQ引脚,能够对导通电阻和ODT电阻进行重新校准.
DDR3核心电压降低到1.5V,预取从4-bit变成了8-bit,提供了更高的带宽,频率从800MHz起步,一般能买到的最高频率为2400MHz,常见的容量是512MB到8GB,也有单条16GB的DDR3内存,但较为稀少。

正点原子的开发板上使用的是 NT5CC256M16ER-EK,其接口结构与其它厂家相同规格芯片 相同,下图是MT41K256M16结构框图:
在这里插入图片描述
其引脚说明:

  • A0~A14:地址线,行线15根, A0 ~ A9 10列。
  • BA[2:0]:BANK选择线,共8个BANK。

容量 : 2 15 ∗ 2 10 ∗ 8 ∗ 2 = 512 M B y t e 2^{15} * 2^{10} * 8 * 2 = 512MByte 21521082=512MByte

DDR4

2011年1月4日三星电子发布了第一款DDR4标准的内存条,首批样品采用30nm级工艺制造而成,2014年开始广泛应用。
DDR4采用16bit的预取机制,在同样内核频率下理论速度是DDR3的两倍;采用更可靠的传输规范,进一步提升数据的可靠性;工作电压降为1.2V。
DDR4 频率范围从DDR4-1600到DDR4-3200,理论上每根DIMM模块能达到512GiB的容量,而DDR3每个DIMM模块的理论最大容量仅128GiB。

DDR5

2020年开始投入市场,带来了全新的架构,改进的功能使实际带宽相比DDR4有了显著提高,即使在3200MT/s和4800MT/s速度开始,与DDR4-3200相比,实际带宽将高出87%。引入了on-die ECC,提高了数据的可靠性和准确性。
DDR5工作电压进一步降低至1.1V,并支持更高的频率和更大的单条内存容量,初始频率为4800MHz,单条内存可以达到128GB,使用2DPC的主板时,总内存容量可达512GB。

2. 开发板资源

在开发板上有 DDR3 的RAM芯片,正点原子提供的核心板有256M和512M两款内存规格的开发板,对于ARM A系列芯片来说,要运行的程序是要加截到内存中运行。

本系列文章基于正点原子 I.MX6U-MINI开发板,使用的内存是 : NT5CC256M16ER-EK。

3. DDR3的时间参数

1. 传输速率

  1. 基本概念

    • DDR3在一个时钟周期的上升沿和下降沿都可以传输数据,这就是所谓的“双倍数据速率”。它的传输速率通常用每秒传输的数据量来衡量,单位有MT/s(兆次传输每秒)或Mbps(兆位每秒)。1MT/s = 8Mbps,因为1字节(Byte)等于8位(bit)。
  2. 速率标准

    • DDR3内存的初始标准传输速率从800MT/s开始,对应的带宽为6.4GB/s(800MT/s×64bit/8)。这里的64bit是DDR3内存的数据总线宽度。
    • 之后还有更高的标准,如1066MT/s、1333MT/s、1600MT/s等。以1600MT/s为例,其带宽为12.8GB/s(1600MT/s×64bit/8)。这些不同的传输速率可以满足不同性能需求的计算机系统。
    • 更高端的DDR3甚至可以达到2133MT/s,带宽可达17GB/s左右,能够为高性能计算(如游戏电脑、工作站等)提供更快速的数据传输,让CPU能更快地读取和写入内存中的数据,从而提升系统的整体性能。

本系列文章使用的开发板的内存支持速率如下图所示:
在这里插入图片描述
不同的速率的时序有所不同。

2. tRCD

tRCD(RAS to CAS Delay)主要用于描述内存工作过程中的延迟时间。

  1. 工作原理背景
    • 在计算机内存系统中,数据的读取和写入是一个复杂的过程。当内存控制器(通常位于CPU或芯片组中)发出读取或写入命令后,内存芯片需要按照一定的顺序和时间间隔来执行这些操作。tRCD主要涉及从行地址选通(RAS - Row Address Strobe)到列地址选通(CAS - Column Address Strobe)之间的延迟。
    • 以读取数据为例,首先内存控制器要激活某一行(通过RAS信号),然后才能指定列地址来读取具体的数据单元。tRCD就是这个行激活和列选择之间的延迟时间。
  2. 具体含义
    • tRCD以时钟周期(Clock Cycle)为单位进行衡量。例如,如果内存的时钟频率是100MHz,一个时钟周期就是10ns(纳秒)。假设tRCD的值为3个时钟周期,那么在这种情况下,tRCD的实际延迟时间就是30ns。
    • 这个延迟时间对于内存性能有重要影响。较小的tRCD值意味着内存能够更快地从行激活状态转换到列选择状态,从而可以更快地读取或写入数据。相反,较大的tRCD值会导致内存操作的延迟增加,降低数据访问速度。

3. CL 参数

CL是CAS Latency的缩写,即列选通潜伏期,具体来说,CL是指从内存控制器发出读命令到内存开始输出第一个数据之间的延迟时间,以时钟周期为单位。

作用

  • 衡量内存性能:CL值越小,内存响应速度越快,数据传输延迟越低,内存性能也就越高。比如在相同内存主频下,CL值为5的DDR3内存性能要优于CL值为7的内存。
  • 影响系统整体性能:内存的CL参数与CPU的配合对系统性能有重要影响。如果CL值过大,会导致CPU等待数据从内存中传输的时间过长,从而降低CPU的执行效率,影响整个系统的运行速度。

取值范围

DDR3内存的CL值一般在5-11之间,常见的有7、8、9、10、11等。如DDR3-1066的CL值通常为7,DDR3-1333的CL值一般为8,DDR3-1600的CL值常为9。

工作原理

在内存读写操作中,当内存控制器发出行地址激活命令后,需要经过一段时间的延迟,这段延迟包含行地址到列地址的延迟(TRCD)和列选通潜伏期(CL)等。CL是其中关键的一部分,它决定了从列地址选通到数据开始输出的时间间隔。以DDR3-1600 CL=9为例,在内存接收到读命令后,经过9个时钟周期,才会将第一个数据输出到数据总线上.

4. tRC参数

DDR3的tRC参数是指同一bank内两个ACTIVE命令之间的最小延迟周期,也可以是ACTIVE命令到REFRESH命令之间的周期。tRC参数用于限制对同一bank的访问频率,确保内存操作的稳定性和数据的正确传输。它规定了在同一bank内,两次激活操作之间必须间隔的最短时间。

原理

  • DDR3内存的存储单元是以bank为单位进行组织的,每个bank包含多个行和列。当对内存进行读写操作时,需要先激活相应的bank和行,然后才能进行列地址的选择和数据传输.
  • 如果在tRC时间内对同一bank再次发出ACTIVE命令,可能会导致数据冲突、信号干扰等问题,从而影响内存的正常工作。因此,tRC参数的设置是为了给内存足够的时间来完成当前操作,并为下一次操作做好准备。

单位与取值

  • tRC的单位通常是纳秒(ns)或时钟周期数。在DDR3的数据手册中,一般会给出tRC的具体数值,例如NT5CC256M16EP-EK的tRC值为47.91ns.
  • 不同频率和型号的DDR3内存,其tRC参数的取值可能会有所不同。通常情况下,tRC的取值范围在几十到上百纳秒之间,具体数值取决于内存的规格和性能等级 。

5. tRAS

DDR3的tRAS(Row Active Time to Precharge Delay)是指从ACTIVE命令到PRECHARGE命令之间的最小时间间隔,即行激活时间到预充电延迟 。它表示在DDR3内存中,从行地址被激活(ACTIVE命令发出)开始,到可以对该行发出预充电命令(PRECHARGE命令)之间所必须经过的最短时间。

  • 当内存控制器发出ACTIVE命令后,相应的行被激活,数据的读取或写入操作会在该行上进行。在操作完成后,需要经过tRAS时间才能对该行进行预充电操作,以便为下一次的访问做好准备。如果在tRAS时间未结束时就对该行进行预充电,可能会导致数据丢失或损坏,因为此时该行的数据可能还处于不稳定状态。

重要性及作用

  • 确保数据完整性:tRAS的存在是为了给内存足够的时间来完成数据的传输和稳定存储。在数据读写操作期间,内存芯片内部的各种电路和存储单元需要一定的时间来处理和保持数据,如果过早地进行预充电操作,可能会干扰数据的稳定存储,从而导致数据错误.
  • 影响内存性能:tRAS的值会影响内存的整体性能。一般来说,tRAS时间越短,内存的访问速度就越快,因为可以更快地进入下一次的行激活和数据传输操作。然而,如果tRAS设置得过短,可能会导致数据不稳定,从而引发系统错误或性能下降。相反,如果tRAS设置得过长,虽然可以保证数据的稳定性,但会增加内存的访问延迟,降低内存的带宽利用率.

二、I.MX6U MMDC 控制器

I.MX6U的MMDC控制器是一款多模式DDR控制器,主要负责管理和控制与DDR内存的交互,以实现高效的数据存储和读取操作,满足系统对内存的需求。在《IMX6ULL 参考手册》 P2203,有对其详细介绍。

1. MMDC简介

(1)主要组成部分

在这里插入图片描述

  • MMDC CORE 内核:内核承担着通过AXI接口与系统进行通信的重要任务,负责生成DDR命令,并对这些命令进行优化处理,同时还管理着读/写数据路径,确保数据能够准确、高效地在系统与内存之间传输。
  • MMDC PHY:PHY则专注于时序调整和校准工作。它运用特殊的校准机制,保障数据能够在400MHz的时钟频率下被准确捕获,从而保证了数据传输的稳定性和可靠性。

(2)支持的存储类型及特性

  • 支持的存储类型:MMDC支持16位宽的DDR3/DDR3L以及LPDDR2,不支持LPDDR1、MDDR和DDR2等其他类型的内存。
  • 存储容量范围:能够支持单片256Mbit~8Gbit容量的DDR内存,其列地址范围为8-12位,行地址范围为11-16位,并且配备2个片选信号,可通过配置CS0、CS1来达到4Gbyte的地址空间.
  • 突发访问支持:对于DDR3,最大支持8bit的突发访问;而对于LPDDR2则最大支持4bit的突发访问。

(3)时钟频率与数据速率

  • MMDC的最大频率为400MHz,对应的数据速率能够达到800MT/S,为系统提供了高速的数据传输通道,满足了处理器对内存数据快速读写的要求。

(4)校准程序

  • MMDC支持各种校准程序,包括自动和手动运行方式,还支持ZQ校准外部DDR设备、校准DDR I/O引脚以及校准DDR驱动能力等,通过这些校准操作,可以确保内存系统的稳定性和性能表现。

(5)其他特性

  • 优先级与优化机制:支持实时优先级,并具备不同优先级的重新排序机制,能够对实时、延时敏感和正常优先级的任务进行合理调度。同时,还针对页面碰撞错过、连续读写访问等情况进行了优化,进一步提高了内存访问效率。
  • 深度请求队列与预测功能:支持深度读写请求队列,能够更好地管理和调度内存访问请求,并且还支持bank预测以及bank交叉等功能,提升了内存系统的并行处理能力和整体性能。
  • 特殊访问优化:在ddr3模式下的非对齐换行访问情况下,也有特殊优化措施,确保数据能够准确、快速地传输,减少因数据对齐问题而导致的性能损失。

2. 时钟源

在这里插入图片描述
时钟源我们使用PLL2-PFD2=396MHz,MMDC_CLK_ROOT最大支持 396MHz。

  • CBDMR[PERIPH2_CLK2_SEL](bit22,bit21),设置为01,设置PLL_PFD2作为 pre_periph2时钟源;
  • CBCDR[PERIPH2_CLK_SEL] (bit26),设置为0,设置PLL2作为 MMDC 时钟源;
  • CBCDR[PABRIC_MMDC_PODF] ,(bit5-3),设置为0,1分频。

3. 开发板原理图

在这里插入图片描述

三、DDR3初始化与测试

1. ddr_stres_tester简介

ddr_stress_tester_v2.90 是NXP提供的一个DDR压测工具,在本文对应的开源仓库中已经放了这个工具。
使用方法:

xlsx 文件

打开 I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 文件:
在这里插入图片描述
复制生成的 ReView.inc 放到软件目录里。
在这里插入图片描述

2. 下载配置信息

打开 DDR_Tester.exe,加载初始化脚本 :
在这里插入图片描述
开发板需要外置供电,使用 USB_OTG 连接电脑,启动方式拨码开关选择 USB 启动,另外要把SD卡取出。
点击Download,有以下输出:

在这里插入图片描述

(1)直接进行超频测试

填写频率 400MHz~600MHz, 输出测试失败。这是因为没在进行校准操作。
在这里插入图片描述

(2)校准

在这里插入图片描述
校准内容如下:

MMDC registers updated from calibration Write leveling calibrationMMDC_MPWLDECTRL0 ch0 (0x021b080c) = 0x00000000MMDC_MPWLDECTRL1 ch0 (0x021b0810) = 0x001F001FRead DQS Gating calibrationMPDGCTRL0 PHY0 (0x021b083c) = 0x013C013CMPDGCTRL1 PHY0 (0x021b0840) = 0x00000000Read calibrationMPRDDLCTL PHY0 (0x021b0848) = 0x40403236Write calibrationMPWRDLCTL PHY0 (0x021b0850) = 0x4040382ESuccess: DDR calibration completed!!!

根据校准值,对 ALIENTEK_512MB.inc 进行修改,没找到的不用改,下面是修改示例:
在这里插入图片描述
修改后保存文件,重新打开 DDR_Tester.exe。

(3)超频测试

在这里插入图片描述
一般在400MHz基础能超频20%,硬件开发板设计就算正常。

四、DCD数据

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

在P342,如下图所示:
在这里插入图片描述
可以看到 CCGR0地址是在 0x020C4068,

打开 imxdownload.h , 可以找到该位置:
在这里插入图片描述

DDR相关的初始化,位置是在0X020E04B4:
在这里插入图片描述
而这个地址值,与 ALIENTEK_512MB.inc里 这个位置相对应:
在这里插入图片描述
直到位置:
在这里插入图片描述
所以imxdownload里的 dcd表的值,要与校准后的值相对应 。

相关文章:

I.MX6U 裸机开发20. DDR3 内存知识

I.MX6U 裸机开发20. DDR3 内存知识 一、DDR3内存简介1. DDR发展历程SRAMSDRAMDDR1DDR2DDR3DDR4DDR5 2. 开发板资源3. DDR3的时间参数1. 传输速率2. tRCD3. CL 参数作用取值范围工作原理4. tRC参数原理单位与取值5. tRAS重要性及作用 二、I.MX6U MMDC 控制器1. MMDC简介&#xf…...

微信小程序常用全局配置项及窗口组成部分详解

微信小程序常用全局配置项及窗口组成部分详解 引言 微信小程序作为一种新兴的应用形态,凭借其轻量级、便捷性和丰富的功能,已成为开发者和用户的热门选择。在开发小程序的过程中,了解全局配置项和窗口组成部分是至关重要的。本文将详细介绍微信小程序的常用全局配置项及窗…...

DVWA 在 Windows 环境下的部署指南

目录预览 一、靶场介绍二、前置准备1. 环境准备2.靶场下载 三、安装步骤1.配置Phpstudy2.配置数据库3.配置DVWA4.登入DVWA靶场 四、参考链接 一、靶场介绍 DVWA 一共包含了十个攻击模块,分别是: Brute Force(暴力(破解&#xff…...

JVM:即时编译器,C2 Compiler,堆外内存排查

1,即时编译器 1.1,基本概念 常见的编译型语言如C,通常会把代码直接编译成CPU所能理解的机器码来运行。而Java为了实现“一次编译,处处运行”的特性,把编译的过程分成两部分,首先它会先由javac编译成通用的…...

AI开发-机器学习库-sklearn

1 需求 官网:scikit-learn: machine learning in Python — scikit-learn 1.5.2 documentation scikit - learn(简称sklearn)是一个用于机器学习的开源 Python 库。它建立在NumPy、SciPy和matplotlib之上,提供了丰富的工具用于数…...

Opencv+ROS实现摄像头读取处理画面信息

一、工具 ubuntu18.04 ROSopencv2 编译器:Visual Studio Code 二、原理 图像信息 ROS数据形式:sensor_msgs::Image OpenCV数据形式:cv:Mat 通过cv_bridge()函数进行ROS向opencv转换 cv_bridge是在ROS图像消息和OpenCV图像之间进行转…...

git使用记录与总结

目录 前言 一、git是什么? 二、使用记录 1.git安装 2.git clone 3.-lfs初始化 4.git add 5.git commit 6.git push 相关问题与解决 总结 前言 随着Github、hugging face等平台各种开源代码、模型的广泛使用,个人可以使用git方便的下载代码与…...

uniapp中uni-popup在小程序中滚动穿透问题

uniapp中uni-popup在小程序中滚动穿透问题 官网例子 使用场景&#xff0c;在小程序中一个页面内容很长&#xff0c;点击某一项需要弹框&#xff0c;这个弹框需要定位在一定位置&#xff0c;下面的页面不需要滚动 1.直接在模板中添加 <template><page-meta :page-styl…...

限制账号密码格式的正则表达式来啦

. 代表任意字符 \w 代表字母、数字、下划线 \d 代表数字 指定字符重复1次或者n次&#xff0c;最少1次 ? 指定字符重复0-1次 {n} 只能重复n次 {a,} 最少重复a次 {,a} 最多重复a次 {a,b} 最少重复a次&#xff0c;最多重复b次 \s 空格 | 代表或者 [a-zA-Z0-9]&#xf…...

linux下USB设备状态查询

linux下USB设备状态查询 linux下USB设备状态查询 在buildroot RK3568平台上调试USB视频采集时发现&#xff0c;USB设备经常性断开&#xff0c;为发现其断开的规律&#xff0c;编写脚本记录其断开的时间 linux下USB设备状态查询 #周期性查询 USB设备 cat > /usr/bin/usbenq…...

Java 线程池有限大小工作队列 - 不丢弃任务的实现

我们在创建 Java 线程池&#xff0c;无论是用 Executors, ThreadPoolExecutor, 还是 Spring 的 ThreadPoolTaskExecutor, 如果不指定工作队列的大小的话&#xff0c;默认为 Integer.MAX_VALUE(2147483647), 基本不会把它爆满&#xff0c;但是在许多的任务要执行时大量 Runnable…...

GitLab的使用

文章目录 一、什么是GitLab、有什么用、与Jenkins的区别什么是GitLab及其用途GitLab与Jenkins的区别GitLab的CI/CD功能介绍 二、GitLab的安装与配置Linux下GitLab的安装*Linux下GitLab的简单使用 /etc/gitlab/gitlab.rb 的配置GitLab服务器的域名邮箱配置功能优化关闭一些暂时不…...

ffmpeg.js视频播放(转换)

chrome 临时设置SharedArrayBuffer "C:\Program Files\Google\Chrome\Application\chrome.exe" --enable-featuresSharedArrayBuffer 引用的js及相关文件 ffmpeg.min.js ffmpeg.min.js.map ffmpeg-core.js ffmpeg-core.wasm ffmpeg-core.worker.js 以上几个现…...

免费实用在线AI工具集合 - 加菲工具

免费在线工具-加菲工具 https://orcc.online/ sql格式化 https://orcc.online/tools/sql 时间戳转换 https://orcc.online/tools/timestamp Base64 编码解码 https://orcc.online/tools/base64 URL 编码解码 https://orcc.online/tools/url Hash(MD5/SHA1/SHA256…) 计算 h…...

C# 常量

文章目录 前言一、整数常量&#xff08;一&#xff09;合法与非法实例对比&#xff08;二&#xff09;不同进制及类型示例 二、浮点常量三、字符常量四、字符串常量五、定义常量 前言 在 C# 编程的世界里&#xff0c;常量是一类特殊的数据元素&#xff0c;它们如同程序中的 “定…...

elasticsearch单节点模式部署

原文地址&#xff1a;elasticsearch单节点模式部署 – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 第一步&#xff1a;下载 官方下载地址&#xff1a;Download Elasticsearch | Elastic&#xff0c;可以 wget 直接下载。 命令&#xff1a;wg…...

C#+数据库 实现动态权限设置

将权限信息存储在数据库中&#xff0c;支持动态调整。根据用户所属的角色、特定的功能模块&#xff0c;动态加载权限” 1. 数据库设计 根据这种需求&#xff0c;可以通过以下表设计&#xff1a; 用户表 (Users)&#xff1a;存储用户信息。角色表 (Roles)&#xff1a;存储角色…...

ubuntu客户端使用飞牛云的smb服务端共享,和ftp记录

ubuntu smb客服端链接 在Ubuntu上设置SMB客户端连接到SMB服务器&#xff0c;你可以使用smbclient工具或者挂载共享目录。以下是使用smbclient和挂载的简单示例&#xff1a; 使用smbclient连接SMB服务器 安装smbclient&#xff1a; sudo apt-update sudo apt-get install smbcli…...

自然语言处理工具-广告配音工具用于语音合成助手/自媒体配音/广告配音/文本朗读-已经解锁了 全功能的 apk包

Android -「安卓端」 广告配音工具用于语音合成助手/自媒体配音/广告配音/文本朗读。 广告配音工具&#xff1a;让您的文字“说话”&#xff0c;在这个快速发展的数字时代&#xff0c;广告配音工具为各种语音合成需求提供了一站式解决方案。无论是自媒体配音、商业广告配音、…...

华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读

随着数据中心规模的不断扩大&#xff0c;服务器的稳定性和可靠性变得尤为重要。华为E9000刀箱&#xff08;HWE9000V2&#xff09;作为一款高性能的服务器设备&#xff0c;其硬件状态的实时监控对于保障业务的连续性和系统的稳定运行至关重要。 监控易作为一款专业的IT基础设施监…...

消息队列场景下的前端设计:如何优化用户体验

在现代分布式系统中&#xff0c;消息队列被广泛用于解耦服务和异步处理。但由于消息队列的异步特性&#xff0c;任务提交后无法立即获得处理结果&#xff0c;这给前端的交互设计带来了新的挑战。本文将探讨如何在这种场景下优化前端用户体验。 一、问题分析 在使用消息队列后&…...

智能探针技术:实现可视、可知、可诊的主动网络运维策略

网络维护的重要性 网络运维是确保网络系统稳定、高效、安全运行的关键活动。在当今这个高度依赖信息技术的时代&#xff0c;网络运维的重要性不仅体现在技术层面&#xff0c;更关乎到企业运营的方方面面。网络运维具有保障网络的稳定性、提升网络运维性能、降低企业运营成本等…...

23种设计模式-装饰器(Decorator)设计模式

文章目录 一.什么是装饰器设计模式&#xff1f;二.装饰器模式的特点三.装饰器模式的结构四.装饰器模式的优缺点五.装饰器模式的 C 实现六.装饰器模式的 Java 实现七.代码解析八.总结 类图&#xff1a; 装饰器设计模式类图 一.什么是装饰器设计模式&#xff1f; 装饰器模式&…...

分布式搜索引擎之elasticsearch单机部署与测试

分布式搜索引擎之elasticsearch单机部署与测试 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的…...

Java项目中加缓存

Java项目中加缓存 1.更新频率低&#xff1b;但读写频率高的数据很适合加缓存&#xff1b; 2.可以加缓存的地方很多&#xff1a;浏览器的缓存&#xff1b;CDN的缓存&#xff1b;服务器的缓存&#xff1b; 本地内存&#xff1b;分布式远端缓存&#xff1b; 加缓存的时候不要…...

【计算机视觉】图像基本操作

1. 数字图像表示 一幅尺寸为MN的图像可以用矩阵表示&#xff0c;每个矩阵元素代表一个像素&#xff0c;元素的值代表这个位置图像的亮度&#xff1b;其中&#xff0c;彩色图像使用3维矩阵MN3表示&#xff1b;对于图像显示来说&#xff0c;一般使用无符号8位整数来表示图像亮度&…...

修改插槽样式,el-input 插槽 append 的样式

需缩少插槽 append 的 宽度 方法1、使用内联样式直接修改&#xff0c;指定 width 为 30px <el-input v-model"props.applyBasicInfo.outerApplyId" :disabled"props.operateCommandType input-modify"><template #append><el-button click…...

高级java每日一道面试题-2024年11月28日-JVM篇-调优命令有哪些?

如果有遗漏,评论区告诉我进行补充 面试官: 调优命令有哪些? 我回答: 在Java高级面试中&#xff0c;调优命令是面试官常问的问题之一。以下是对Java调优命令的详细介绍&#xff1a; 一、主要调优命令 1. jps&#xff08;JVM Process Status Tool&#xff09; 功能&#x…...

Dubbo 最基础的 RPC 应用(使用 ZooKeeper)

看国内的一些项目时 Dubbo 这个词经常闪现&#xff0c;一直也不以为然&#xff0c;未作搜索&#xff0c;当然也不知道它是做什么用的。直到最近阅读关于大型网站架构相关的书中反复提到 Dubbo 后&#xff0c;觉得不能再对它视而不见。Google 了一下&#xff0c;它是在阿里巴巴创…...

(0基础保姆教程)-JavaEE开课啦!--11课程(初识Spring MVC + Vue2.0 + Mybatis)-实验9

一、什么是Spring MVC&#xff1f; Spring MVC 是一个基于 Java 的 Web 框架&#xff0c;遵循 MVC 设计模式&#xff0c;用于构建企业级应用程序。它通过控制器(Controller)处理用户请求&#xff0c;模型(Model)处理业务逻辑&#xff0c;视图(View)展示数据&#xff0c;实现了请…...

九、Spring Boot集成Spring Security之授权概述

文章目录 往期回顾&#xff1a;Spring Boot集成Spring Security专栏及各章节快捷入口前言一、授权概述二、用户权限三、用户授权流程三、Spring Security授权方式1、请求级别授权2、方法级别授权 往期回顾&#xff1a;Spring Boot集成Spring Security专栏及各章节快捷入口 Spr…...

QT:多ui界面显示

文章目录 1.多ui界面添加2.跳转函数3.返回函数4.Qt5源码工程5.模态显示 1.多ui界面添加 最终生成这个目录 2.跳转函数 void MainWindow::on_pushButton_clicked() {//this->setWindowModality(Qt::WindowModal);test1 *t1 new test1();t1->setParentData(this);this-…...

人工智能在医疗领域应用的案例参考

以下是一些人工智能在医疗领域应用的具体案例&#xff1a; 疾病诊断辅助 谷歌旗下DeepMind与伦敦大学学院医院合作 案例详情&#xff1a;利用人工智能系统对眼部疾病进行诊断&#xff0c;分析眼部扫描图像&#xff0c;快速准确地检测出眼部疾病的早期迹象&#xff0c;如青光眼…...

vue3 与 spring-boot 完成跨域访问

spring-boot&#xff0c;写一个接口用于前端访问&#xff0c;并且给接口设置跨域访问&#xff0c;这里我前端的域名为 localhost:5173 RestController CrossOrigin(origins "http://localhost:5173") public class Vue3Controller {GetMapping("/vue")pu…...

CSS clamp() 函数:构建更智能的响应式设计

在响应式设计中&#xff0c;我们经常需要处理元素大小的动态变化。CSS clamp() 函数提供了一个优雅的解决方案&#xff0c;让我们的设计更加灵活和智能。 clamp() 函数是什么&#xff1f; clamp() 函数接受三个参数&#xff1a; clamp(最小值, 首选值, 最大值)这三个参数分别…...

【C++笔记】数据结构进阶之二叉搜索树(BSTree)

【C笔记】数据结构进阶之二叉搜索树(BSTree) &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】数据结构进阶之二叉搜索树(BSTree)前言一.二叉搜索树的概念二.二叉搜索树的性能分析三.二叉搜索树的实现3.1二叉树的中序…...

c++设计模式模块与系统

c 中lambda 本质就是一个匿名(没有名)的函数&#xff1b; 可以用一个数组元素存储一个函数的指针&#xff1b; 通过数组下标来使用函数&#xff1b; 高内聚低耦合 如何理解设计模式中的高内聚低耦合 高内聚: 用于指导如何组织和划分软件设计。 **定义&#xff1a;**高内聚指的…...

【81-90期】Java核心面试问题深度解析:性能优化与高并发设计

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 文章题目&#xff1a;Java核心面试问题深度解析&#xff1a;性能优化与高并发设计 摘要&#xff1a; 本文聚…...

python实现TCP服务端,支持对所有客户端的数据收发,支持终端自定义命令操作,提供clear命令一键断开所有的客户端连接

前言 python实现TCP服务端&#xff0c;支持对所有客户端的数据收发&#xff0c;支持终端自定义命令操作&#xff0c;提供clear命令一键断开所有的客户端连接 简单易懂&#xff0c;直接上码 源码 import socket import threadingclass TCPServer:# 修改此处ip 端口def __ini…...

【R安装】R语言的详细安装及环境配置(2024年11月)

目录 R及Rstudio下载R下载Rstudio下载 R及Rstudio安装R安装Rtools 安装Rstudio安装 运行 RStudio通过RStudio配置使用特定的R版本 参考 R及Rstudio下载 R下载 R官网-The R Project for Statistical Computing 点击【download R】&#xff0c;进入下载界面&#xff1a; 选择…...

Android 12.0 通知--PendingIntent基本代码

一. PendingIntent 在 Android 通知中的使用场景 使用场景: Android 通知的 setContentIntent() 需要传入 PendingIntent , 即当点击通知时,执行 intent 的动作.如下例子: //1.创建Intent对象Intent intent new Intent(this, MainActivity1.class); //2.获取能启动 Activity 的…...

网络安全在数字时代保护库存数据中的作用

如今&#xff0c;通过软件管理库存已成为一种标准做法。企业使用数字工具来跟踪库存水平、管理供应链和规划财务。 然而&#xff0c;技术的便利性也带来了网络威胁的风险。黑客将库存数据视为有价值的目标。保护这些数据不仅重要&#xff0c;而且必不可少。 了解网络安全及其…...

文本搜索程序(Qt)

头文件 #ifndef TEXTFINDER_H #define TEXTFINDER_H#include <QWidget> #include <QFileDialog> #include <QFile> #include <QTextEdit> #include <QLineEdit> #include <QTextStream> #include <QPushButton> #include <QMess…...

云原生革命:构建未来应用的无限可能

在这个数字化飞速发展的时代&#xff0c;云原生技术如同一股不可阻挡的潮流&#xff0c;正深刻改变着软件开发和部署的方式。它不仅仅是一种技术变革&#xff0c;更是一场关于如何更高效、更灵活地构建和运行应用的革命。今天&#xff0c;我们就来深入探讨云原生的魅力所在&…...

【Ubuntu 24.04】How to Install and Use NVM

参考 下载 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash激活 Activate NVM: Once the installation script completes, you need to either close and reopen the terminal or run the following command to use nvm immediately. exp…...

android12锁屏界面pin码或者图案解锁居中显示

设置pin码或者图案锁屏后&#xff0c;在锁屏界面向上划左边&#xff0c;图案解锁就在左边&#xff0c; 向上划右边图案就在右边&#xff0c;如何设置一直居中显示呢&#xff1f; diff --git a/packages/SystemUI/res/layout/super_notification_shade.xml b/packages/SystemUI…...

【VUE3】新版Vue3+ElementPlus全家桶开发视频项目实战

VUE 介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 Vue.js是一个MVVM(Model - View - ViewModel)的SPA框架。 Model:数…...

【UE5 C++课程系列笔记】05——组件和碰撞

效果 可以看到我们可以实现的功能是 &#xff08;1&#xff09;可以通过鼠标旋转视角 &#xff08;2&#xff09;通过使用Pawn移动组件来控制Pawn移动 &#xff08;3&#xff09;Pawn碰到物体会被阻挡然后逐渐滑动 &#xff08;4&#xff09;通过空格切换激活/关闭粒子效果…...

【docker 拉取镜像超时问题】

问题描述 在centosStream8上安装docker&#xff0c;使用命令sudo docker run hello-world 后出现以下错误&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Ti…...

51-基于单片机的智能语音识别与处理系统设计

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;搞L298N驱动两个电机转动&#xff0c;然后搞LCD1602显示屏&#xff0c;弄个超声波传感器实时检测距离 通过LCD1602显示距离&#xff0c;如果距离小于阈值&#xff0c;则两…...