STM32F4X SDIO(四) SDIO控制器
STM32F4X SDIO(四) SDIO控制器
- STM32F4X SDIO控制器
- SDIO控制器框图
- SDIO控制器时钟
- 适配器寄存器
- FIFO
- 控制单元
- 命令路径
- 数据路径
- SDIO寄存器
- SDIO控制相关寄存器
- SDIO电源控制寄存器 (SDIO_POWER)
- SDIO时钟控制寄存器 (SDIO_CLKCR)
- SDIO_CK相位
- SDIO命令响应相关寄存器
- SDIO参数寄存器 (SDIO_ARG)
- SDIO命令寄存器 (SDIO_CMD)
- SDIO命令响应寄存器 (SDIO_RESPCMD)
- SDIO响应1/2/3/4寄存器 (SDIO_RESPx)
- SDIO数据相关寄存器
- SDIO数据定时器寄存器(SDIO_DTIMER)
- SDIO数据长度寄存器(SDIO_DLEN)
- SDIO数据控制寄存器(SDIO_DCTRL)
- SDIO 数据计数器寄存器 (SDIO_DCOUNT)
- SDIO状态相关寄存器
- SDIO 状态寄存器 (SDIO_STA)
- SDIO 中断清零寄存器 (SDIO_ICR)
- SDIO 屏蔽寄存器 (SDIO_MASK)
- SDIO FIFO相关寄存器
- SDIO FIFO 计数器寄存器 (SDIO_FIFOCNT)
- SDIO 数据 FIFO 寄存器 (SDIO_FIFO)
STM32F4X内部有一个SDIO控制器,开发者可以使用这个控制器跟SD卡进行通信,下面就来简单了解一下STM32F4X的SDIO控制器的使用。
STM32F4X SDIO控制器
SDIO控制器框图
下图为STM32F4X的SDIO控制器框图,框图可以分为以下5部分,适配器寄存器、FIFO、控制单元、命令路径、数据路径。
SDIO控制器时钟
STM32F4X的所有外设都需要时钟才能够工作,SDIO控制器也不例外。SDIO控制工作时需要两个时钟,一个是SDIOCLK时钟和APB2时钟。
SDIOCLK:SDIO控制器输出到SD卡的时钟,该时钟可以通过配置分频系数决定其频率,最大为48MHZ。
APB2时钟:APB2时钟是SDIO控制器的工作时钟。
SDIO控制器的寄存器和FIFO模块使用的APB2时钟、控制单元、命令路径和数据路径使用的是SDIOCLK时钟。
适配器寄存器
适配器寄存器模块包含了STM32F4X SDIO控制器的所有寄存器,所有基于SDIO控制器的操作都需要读写寄存器来完成,STM32F4X的SDIO寄存器一共有16个。
FIFO
STM32F4X的SDIO控制器内部带了FIFO单元,当用户使能了FIFO之后,控制器往SD卡发送数据或者从SD卡接收的数据都可以暂时存到FIFO里面。
控制单元
STM32F4X SDIO控制器的控制单元包含了SD卡电源管理和SD卡的时钟管理功能。
命令路径
STM32F4X SDIO控制器的命令路径主要是给SD卡发送命令并且接收来自SD卡的响应。
数据路径
STM32F4X SDIO控制器的命令路径主要是给SD卡发送数据并且接收来自SD卡的数据。如果使用了8位数据宽度的模式,则SDIO_D[7:0]8根信号线都会使用。如果使用了4位数据宽度的模式,则SDIO_D[3:0]4根信号线都会使用。如果使用了1位数据宽度的模式,则只有SDIO_D01根信号线都会使用。
SDIO寄存器
想要使用STM32F4X的SDIO控制器就要学会配置SDIO的寄存器,下面就来简单了解一下STM32F4X的SDIO寄存器。
SDIO控制相关寄存器
SDIO电源控制寄存器 (SDIO_POWER)
该寄存器的作用是控制SDIO_CK的时钟,通过修改该寄存器使能或者关闭SDIO_CK时钟。
比特位 | 数值 | 描述 |
---|---|---|
bit[1:0] PWRCTRL | 00:掉电:停止为卡提供时钟。 01:保留 10:保留,上电 11:通电:为卡提供时钟。 | 电源控制位 |
SDIO时钟控制寄存器 (SDIO_CLKCR)
该寄存器主要是控制SDIO_CK时钟的使能,时钟分频系数的确定,数据线位宽的选择等。
比特位 | 数值 | 描述 |
---|---|---|
bit[14] HWFC_EN | 0:禁止硬件流控制 1:使能硬件流控制 | 硬件流控制使能 |
bit[13] NEGEDGE | 0:在主时钟 SDIOCLK 的上升沿产生 SDIO_CK 1:在主时钟 SDIOCLK 的下降沿产生 SDIO_CK | SDIO_CK 移相选择位 |
bit[12:11] WIDBUS | 00:默认总线模式:使用 SDIO_D0 01:4 位宽总线模式:使用 SDIO_D[3:0] 10:8 位宽总线模式:使用 SDIO_D[7:0] | 宽总线模式使能位 |
bit[10] BYPASS | 0:禁止旁路:在驱动 SDIO_CK 输出信号前,根据 CLKDIV 值对 SDIOCLK 进行分频。 1:使能旁路:SDIOCLK 直接驱动 SDIO_CK 输出信号。 | 时钟分频器旁路使能位 |
bit[9] PWRSAV | 0:始终使能 SDIO_CK 时钟 1:仅在总线激活时使能 SDIO_CK | 节能模式配置位 |
bit[8] CLKEN | 0:始终使能 SDIO_CK 时钟 1:仅在总线激活时使能 SDIO_CK | 时钟使能位 |
bit[7:0] CLKDIV | 该字段定义输入时钟 (SDIOCLK) 与输出时钟 (SDIO_CK) 之间的分频系数: SDIO_CK 频率 = SDIOCLK / [CLKDIV + 2] | 时钟分频系数 |
SDIO_CK相位
在时钟控制寄存器的bit13中有一个叫时钟相位的概念,所谓的时钟相位意思就是其采样的时间,有两种相位选择,分别是SDIOCLK的上升沿和SDIOCLK的下降沿。
- SDIOCLK的上升沿产生SDIO_CK
- SDIOCLK的下降沿产生SDIO_CK
SDIO命令响应相关寄存器
SDIO参数寄存器 (SDIO_ARG)
该寄存器的作用是将命令的参数发送到SD卡
比特位 | 数值 | 描述 |
---|---|---|
bit[31:0] CMDARG | 32位命令参数 | 作为命令消息的一部分发送给卡的命令参数。如果命令包含参数,则在将命令写入到命令寄存器之前,必须将参数加载到此寄存器中。 |
SDIO命令寄存器 (SDIO_CMD)
该寄存器主要包含SD卡的命令索引,设置响应类型等。
比特位 | 数值 | 描述 |
---|---|---|
bit[14] ATACMD | 0/1 | 如果 ATACMD 置 1,则 CPSM 将传输 CMD61。 |
bit[13] nIEN | 0:使能 CE-ATA 设备中的中断 1:不使能 CE-ATA 设备中的中断 | 如果该位为 0,则使能 CE-ATA 设备中的中断 |
bit[12] ENCMDcompl | 0:如果此位置 1,则使能命令完成信号 0:不如果此位置 1,则使能命令完成信号 | 如果此位置 1,则使能命令完成信号 |
bit[11] SDIOSuspend | 0:发送的命令不是挂起命令 1:发送的命令为挂起命令。 | 如果此位置 1,则要发送的命令为挂起命令(仅用于 SDIO 卡) |
bit[10] CPSMEN | 0:不使能 CPSM 1:使能 CPSM | 命令路径状态机 (CPSM) 使能位 |
bit[9] WAITPEND | 0:CPSM 将不等到数据传输结束后才开始发送命令 1:CPSM 将等到数据传输结束后才开始发送命令 | 如果此位置 1,则 CPSM 将等到数据传输结束后才开始发送命令 |
bit[8] WAITINT | 0:CPSM 允许命令超时并等待中断请求 1:CPSM 禁止命令超时并等待中断请求 | 如果此位置 1,则 CPSM 禁止命令超时并等待中断请求 |
bit[7:6] WAITRESP | 00:无响应,但 CMDSENT 标志除外 01:短响应,但 CMDREND 或 CCRCFAIL 标志除外 10:无响应,但 CMDSENT 标志除外 11:长响应,但 CMDREND 或 CCRCFAIL 标志除外 | 这些位用于配置 CPSM 是否等待响应,如果等待,将等待哪种类型的响应 |
bit[5:0] CMDINDEX | 命令编号 | 命令索引作为命令消息的一部分发送给卡 |
该寄存器主要需要关注的有以下几个
- bit[5:0]:SD卡命令索引,命令索引在前一章里面有讲过https://blog.csdn.net/hwx1546/article/details/134091068,主要就是往bit[5:0]写入需要发送的命令编号。
- bit[7:6]:响应类型,SD卡有些命令返回的短响应,有些是长响应,也有些是无响应。
SDIO命令响应寄存器 (SDIO_RESPCMD)
有些SD卡响应数据中会包含命令号,而这个命令号可以通过SDIO的命令响应寄存器获取。
比特位 | 数值 | 描述 |
---|---|---|
bit[5:0] RESPCMD | 6位命令响应索引 | 只读位域。包含接收到的最后一个命令响应的命令索引 |
SDIO响应1/2/3/4寄存器 (SDIO_RESPx)
该寄存器中包含了SD卡的响应数据,其中短响应用到了SDIO_RESP1寄存器,而长响应用到了SDIO_RESP1/2/3/4寄存器
寄存器 | 短响应 | 长响应 |
---|---|---|
SDIO_RESP1 | 卡状态[31:0] | 卡状态 [127:96] |
SDIO_RESP2 | X | 卡状态 [95:64] |
SDIO_RESP3 | X | 卡状态 [63:32] |
SDIO_RESP4 | X | 卡状态 [31:1] |
SDIO数据相关寄存器
SDIO数据定时器寄存器(SDIO_DTIMER)
该寄存器设置的SDIO数据超时周期,其周期是SD卡总线时钟周期*寄存器值
比特位 | 数值 | 描述 |
---|---|---|
bit[31:0] DATATIME | 超时值 | 以卡总线时钟周期表示的数据超时周期。 |
SDIO数据长度寄存器(SDIO_DLEN)
该寄存器设置的是SD卡读写过程中的需要传输的数据长度。
比特位 | 数值 | 描述 |
---|---|---|
bit[24:0] DATALENGTH | 数据字节个数 | 要传输的数据字节数量。 |
注意:对于块数据传输,数据长度寄存器中的值必须是块大小的倍数。对于SDIO多字节传输,数据长度寄存器中的值必须在1到512之间。
SDIO数据控制寄存器(SDIO_DCTRL)
比特位 | 数值 | 描述 |
---|---|---|
bit[11] SDIOEN | 0/1 | 如果将该位置 1,则 DPSM 执行特定于 SD I/O 卡的操作。 |
bit[10] RWMOD | 0:通过停止 SDIO_D2 进行读取等待控制 1:使用 SDIO_CK 进行读取等待控制 | 读取等待模式 |
bit[9] RWSTOP | 0:如果将 RWSTART 位置 1,则读取等待正在进行中 1:如果将 RWSTART 位置 1,则使能读取等待停止 | 读取等待停止 |
bit[8] RWSTART | 0:读取等待未开始 1:读取等待开始。 | 如果将该位置 1,则读取等待操作开始 |
bit[7:4] DBLOCKSIZE | 0000:(十进制数 0)块长度 = 2的0次方= 1 字节 0001:(十进制数 1) 块长度 = 2的1次方 = 2 字节 0010:(十进制数 2) 块长度 = 2的2次方 = 4 字节 0011:(十进制数 3) 块长度 = 2的3次方 = 8 字节 0100:(十进制数 4) 块长度 = 2的4次方 = 16 字节 0101:(十进制数 5) 块长度 = 2的5次方 = 32 字节 0110:(十进制数 6) 块长度 = 2的6次方 = 64 字节 0111:(十进制数 7) 块长度 = 2的7次方 = 128 字节 1000:(十进制数 8) 块长度 = 2的8次方 = 256 字节 1001:(十进制数 9) 块长度 = 2的9次方 = 512 字节 1010:(十进制数 10 块长度 = 2的10次方 = 1024 字节 1011:(十进制数 11) 块长度 = 2的11次方 = 2048 字节 1100:(十进制数 12) 块长度 = 2的12次方 = 4096 字节 1101:(十进制数 13) 块长度 = 2的13次方 = 8192 字节 1110:(十进制数 14) 块长度 = 2的14次方 = 16384 字节 1111:(十进制数 15) 保留 | 定义在选择了块数据传输模式时数据块的长度 |
bit[3] DMAEN | 0:禁止 DMA 1:使能 DMA | DMA 使能位 |
bit[2] DTMODE | 0:块数据传输 1:流或 SDIO 多字节数据传输 | 数据传输模式选择 |
bit[1] DTDIR | 0:从控制器到卡 1:从卡到控制器 | 数据传输方向选择 |
bit[0] DTEN | 如果 1 写入到 DTEN 位,则数据传输开始。根据方向位 DTDIR,如果在传输开始时立即将 RW 置 1开始,则 DPSM 变为 Wait_S 状态、Wait_R 状态或读取等待状态。在数据传输结束 后不需要将使能位清零,但必须更新 SDIO_DCTRL 以使能新的数据传输 | 数据传输使能位 |
该寄存器主要需要关注的有以下几个
- bit[1] 数据传输方向:数据传输方向有两个,当我们往SD卡写数据时,方向是SDIO控制器到SD卡。当从SD卡读数据时,方向是从SD卡到SDIO控制器
- bit[2] 数据传输模式:对于SDHC容量的SD卡来说数据传输模式是块数据传输。对于标准SD卡来说数据传输模式则是流或多字节传输
- bit[7:4] 数据块大小:对于SDHC容量的SD卡,数据块大小通常是512字节。数据块大小要是数据长度寄存器的整数倍
SDIO 数据计数器寄存器 (SDIO_DCOUNT)
该寄存器返回的是传输剩余的数据量,只读。
比特位 | 数值 | 描述 |
---|---|---|
bit[24:0] DATACOUNT | 数据计数值 | 读取该位时,将返回要传输的剩余数据字节数量。写入没有任何效果。 |
SDIO状态相关寄存器
SDIO 状态寄存器 (SDIO_STA)
该寄存器是一个只读寄存器,保存了SDIO工作过程中的各种状态。该寄存器中的位被置1则代表该位代表的状态发送,如果为0则代表该位的状态没有发生。
比特位 | 描述 |
---|---|
bit[23] CEATAEND | 针对 CMD61 收到了 CE-ATA 命令完成信号 |
bit[22] SDIOIT | 收到了 SDIO 中断 (SDIO interrupt received) |
bit[21] RXDAVL | 接收 FIFO 中有数据可用 (Data available in receive FIFO) |
bit[20] TXDAVL | 传输 FIFO 中有数据可用 (Data available in transmit FIFO) |
bit[19] RXFIFOE | 接收 FIFO 为空 (Receive FIFO empty) |
bit[18] TXFIFOE | 发送 FIFO 为空 (Transmit FIFO empty) |
bit[17] RXFIFOE | 接收 FIFO 已满 (Receive FIFO full) |
bit[16] TXFIFOF | 传输 FIFO 已满 (Transmit FIFO full) |
bit[15] RXFIFOHF | 接收 FIFO 半满 |
bit[14] TXFIFOHE | 传输 FIFO 半空 |
bit[13] RXACT | 数据接收正在进行中 (Data receive in progress) |
bit[12] TXACT | 数据传输正在进行中 (Data transmit in progress) |
bit[11] CMDACT | 命令传输正在进行中 (Command transfer in progress) |
bit[10] DBCKEND | 已发送/ 接收数据块(CRC 校验通过) |
bit[9] STBITERR | 在宽总线模式下,并非在所有数据信号上都检测到了起始位 |
bit[8] DATAEND | 数据结束(数据计数器 SDIDCOUNT 为零) |
bit[7] CMDSENT | 命令已发送(不需要响应)(Command sent (no response required)) |
bit[6] CMDREND | 已接收命令响应(CRC 校验通过) |
bit[5] RXOVERR | 收到了 FIFO 上溢错误 (Received FIFO overrun error) |
bit[4] TXUNDERR | 传输 FIFO 下溢错误 (Transmit FIFO underrun error) |
bit[3] DTIMEOUT | 数据超时 (Data timeout) |
bit[2] CTIMEOUT | 命令响应超时 (Command response timeout) |
bit[1] DCRCFAIL | 已发送/ 接收数据块(CRC 校验失败) |
bit[0] CCRCFAIL | 已接收命令响应(CRC 校验失败) |
SDIO 中断清零寄存器 (SDIO_ICR)
当用户往该寄存器的某些位写1时,会将SDIO_STA的对应位清0
比特位 | 数值 | 描述 |
---|---|---|
bit[23] CEATAENDC | 0:未将 CEATAEND 清零 1:已将 CEATAEND 清零 | CEATAEND 标志清零位 |
bit[22] SDIOITC | 0:未将 SDIOITC清零 1:已将 SDIOITC清零 | SDIOIT 标志清零位 |
bit[10] DBCKENDC | 0:未将 DBCKENDC清零 1:已将 DBCKENDC清零 | DBCKENDC标志清零位 |
bit[9] STBITERRC | 0:未将 STBITERRC清零 1:已将 STBITERRC清零 | STBITERRC标志清零位 |
bit[8] DATAENDC | 0:未将 DATAENDC清零 1:已将 DATAENDC清零 | DATAENDC标志清零位 |
bit[7] CMDSENTC | 0:未将 CMDSENTC清零 1:已将 CMDSENTC清零 | CMDSENTC标志清零位 |
bit[6] CMDRENDC | 0:未将 CMDRENDC清零 1:已将 CMDRENDC清零 | CMDRENDC标志清零位 |
bit[5] RXOVERRC | 0:未将 RXOVERRC清零 1:已将 RXOVERRC清零 | RXOVERRC标志清零位 |
bit[4] TXUNDERRC | 0:未将 TXUNDERRC清零 1:已将 TXUNDERRC清零 | TXUNDERRC标志清零位 |
bit[3] DTIMEOUTC | 0:未将 DTIMEOUTC清零 1:已将 DTIMEOUTC清零 | DTIMEOUTC标志清零位 |
bit[2] CTIMEOUTC | 0:未将 CTIMEOUTC清零 1:已将 CTIMEOUTC清零 | CTIMEOUTC标志清零位 |
bit[1] DCRCFAILC | 0:未将 DCRCFAILC清零 1:已将 DCRCFAILC清零 | DCRCFAILC标志清零位 |
bit[0] CCRCFAILC | 0:未将 CCRCFAILC清零 1:已将 CCRCFAILC清零 | CCRCFAILC标志清零位 |
SDIO 屏蔽寄存器 (SDIO_MASK)
当用户往该寄存器的某些位写1时,该标志位就会产生一个中断。
比特位 | 数值 | 描述 |
---|---|---|
bit[23] CEATAENDIE | 0:禁止接收到 CE-ATA 命令完成信号时中断 1:使能接收到 CE-ATA 命令完成信号时中断 | 接收到 CE-ATA 命令完成信号时中断使能 |
bit[22] SDIOITIE | 0:禁止接收到 SDIO 模式中断时中断 1:使能接收到 SDIO 模式中断时中断 | 接收到 SDIO 模式中断时中断使能 |
bit[21] RXDAVLIE | 0:禁止 Rx FIFO 中有数据时中断 1:使能 Rx FIFO 中有数据时中断 | Rx FIFO 中数据可用时中断使能 |
bit[20] TXDAVLIE | 0:禁止 Tx FIFO 中数据可用时中断 1:使能 Tx FIFO 中数据可用时中断 | Tx FIFO 中数据可用时中断使能 |
bit[19] RXFIFOEIE | 0:禁止 Rx FIFO 为空时中断 1:使能 Rx FIFO 为空时中断 | Rx FIFO 为空时中断使能 |
bit[18] TXFIFOEIE | 0:禁止 Tx FIFO 为空时中断 1:使能 Tx FIFO 为空时中断 | Tx FIFO 为空时中断使能 |
bit[17] RXFIFOFIE | 0:禁止 Rx FIFO 变满时中断 1:使能 Rx FIFO 变满时中断 | Rx FIFO 变满时中断使能 |
bit[16] TXFIFOFIE | 0:禁止 Tx FIFO 变满时中断 1:使能 Tx FIFO 变满时中断 | Tx FIFO 变满时中断使能 |
bit[15] RXFIFOHFIE | 0:禁止 Rx FIFO 半满时中断 1:使能 Rx FIFO 半满时中断 | Rx FIFO 半满时中断使能 |
bit[14] TXFIFOHEIE | 0:禁止 Tx FIFO 半空时中断 1:使能 Tx FIFO 半空时中断 | Tx FIFO 半空时中断使能 |
bit[13] RXACTIE | 0:禁止数据接收操作中断 1:使能数据接收操作中断 | 数据接收操作中断使能 |
bit[12] TXACTIE | 0:禁止数据传输操作中断 1:使能数据传输操作中断 | 数据传输操作中断使能 |
bit[11] CMDACTIE | 0:禁止命令操作中断 1:使能命令操作中断 | 命令操作中断使能 |
bit[10] DBCKENDIE | 0:禁止数据块结束中断 1:使能数据块结束中断 | 数据块结束中断使能 |
bit[9] STBITERRIE | 0:禁止起始位错误中断 1:使能起始位错误中断 | 起始位错误中断使能 |
bit[8] DATAENDIE | 0:禁止数据结束中断 1:使能数据结束中断 | 数据结束中断使能 |
bit[7] CMDSENTIE | 0:禁止命令发送中断 1:使能命令发送中断 | 命令发送中断使能 |
bit[6] CMDRENDIE | 0:禁止命令响应接收中断 1:使能命令响应接收中断 | 命令响应接收中断使能 |
bit[5] RXOVERRIE | 0:禁止 Rx FIFO 上溢错误中断 1:使能 Rx FIFO 上溢错误中断 | Rx FIFO 上溢错误中断使能 |
bit[4] TXUNDERRIE | 0:禁止 Tx FIFO 下溢错误中断 1:使能 Tx FIFO 下溢错误中断 | Tx FIFO 下溢错误中断使能 |
bit[3] DTIMEOUTIE | 0:禁止数据超时中断 1:使能数据超时中断 | 数据超时中断使能 |
bit[2] CTIMEOUTIE | 0:禁止命令超时中断 1:使能命令超时中断 | 命令超时中断使能 |
bit[1] DCRCFAILIE | 0:禁止数据 CRC 失败中断 1:使能数据 CRC 失败中断 | 数据 CRC 失败中断使能 |
bit[0] CCRCFAILIE | 0:禁止命令 CRC 失败中断 1:使能命令 CRC 失败中断 | 命令 CRC 失败中断使能 |
SDIO FIFO相关寄存器
SDIO FIFO 计数器寄存器 (SDIO_FIFOCNT)
该寄存器包含了FIFO写入或读取的剩余字节数
比特位 | 数值 | 描述 |
---|---|---|
bit[24:0] FIFOCOUNT | FIFO剩余的字节数 | 要在 FIFO 中写入或读取的剩余字数 |
SDIO 数据 FIFO 寄存器 (SDIO_FIFO)
该寄存器用来发生个接收SD卡数据
比特位 | 数值 | 描述 |
---|---|---|
bit[31:0] FIFOData | FIFO数据 | 接收和传输 FIFO 数据 |
相关文章:

STM32F4X SDIO(四) SDIO控制器
STM32F4X SDIO(四) SDIO控制器 STM32F4X SDIO控制器SDIO控制器框图SDIO控制器时钟适配器寄存器FIFO控制单元命令路径数据路径 SDIO寄存器SDIO控制相关寄存器SDIO电源控制寄存器 (SDIO_POWER)SDIO时钟控制寄存器 (SDIO_CLKCR)SDIO_CK相位 SDIO命令响应相关…...

【flink】Task 故障恢复详解以及各重启策略适用场景说明
文章目录 一. 重启策略种类(Restart Strategies)1. Fixed Delay Restart Strategy2. Failure Rate Restart Strategy3. Fallback Restart Strategy4. No Restart Strategy 二. 故障恢复策略(Failover Strategies)1. (全…...
一个计算机高手的成长3
这是转在茶余的帖子。文中绝大部分技术术语我不懂,所以无资格评论他的技术价值。但文章强烈的逻辑说服力,和通篇流露的进取精神,使我觉得这是篇有价值的帖子,至少值得一读。 就像我开始从MIS转到通信一样,我看过大量通…...

2023应届生能力考试含解析(Java后端开发)——(1)
1.以下代码的循环次数是 ( ) public class Test {public static void main(String[] args) {int i 7;do {System.out.println(--i);--i;} while (i ! 0);System.out.println(i);} } A 0 B 1 C 7 D 无限次 这段代码会导致无限循环的原因是在 do-while 循环中&#…...

Ansible中的任务执行控制
循环 简单循环 {{item}} 迭代变量名称 loop: - value1 - value2 - ... //赋值列表{{item}} //迭代变量名称循环散列或字典列表 - name: create filehosts: host1tasks:- name: file moudleservice:name: "{{ item.name }}"state: "{{…...

利用maven的dependency插件分析工程的依赖
dependency:analyze https://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html 分析项目的依赖,确定哪些:用了并且声明了、用了但没有声明、没有使用但声明了。 dependency:analyze可以单独使用,所以它总是会执行test-…...

【广州华锐互动】VR野外求生技能学习,让你感受真实的冒险之旅!
随着科技的迅速发展,虚拟现实(VR)技术为人们提供了一个全新的、身临其境的探险体验。通过将用户带入一个仿真的、沉浸式的虚拟环境,VR互动体验让人们在安全的氛围中感受到野外探险的乐趣。本文将从视觉呈现、沉浸式体验、交互性和应用范围四个方面&#…...

k8s、调度约束
Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。 APIS…...

Redis的介绍,以及Redis的安装(本机windows版,虚拟机Linux版)和Redis常用命令的介绍
目录 一. Redis简介 二. Redis的安装 2.1 Linux版安装 2.2 windows版安装 三. Redis的常用命令 一. Redis简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。 它…...

电子器件 MOS管的参数、选型与使用技巧
一、电路符号 MOS管分为 G(栅极)、S(源极)、D(漏极) 三极,在图中 S 极有两条线,D 极只有一条线。 1.1 NMOS 和 PMOS 下图中,左侧是 PMOS,右侧是 NMOS。箭头…...
EtherCAT主站SOEM -- 2 -- SOEM之ethercatbase.h/c文件解析
EtherCAT主站SOEM -- 2 -- SOEM之ethercatbase.h/c文件解析 一 ethercatbase.h/c文件功能预览:二 ethercatbase.h/c 文件的主要函数的作用:2.1 ecx_writedatagramdata:2.2 ecx_setupdatagram:2.3 ecx_adddatagram:2.4 …...

Spring集成高性能队列Disruptor
Disruptor简介 Disruptor(中文翻译为“破坏者”或“颠覆者”)是一种高性能、低延迟的并发编程框架,最初由LMAX Exchange开发。它的主要目标是解决在金融交易系统等需要高吞吐量和低延迟的应用中的并发问题。 Disruptor特点 无锁并发&#x…...

C++——类和对象(中)完结
赋值运算符重载 运算符重载 C 为了增强代码的可读性引入了运算符重载 , 运算符重载是具有特殊函数名的函数 ,也具有其 返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键…...

Sqoop的安装和使用
目录 一.安装 二.导入 1.全量导入 一.MySQL导入HDFS 二.MySQL导入Hive 2.增量导入 一.过滤导入hdfs/hive 二.导出 一.安装 1.下载地址:sqoop下载地址 2.解压 tar -zxvf ./sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ../module/ 3.改名和配置归属权限 #改名…...

java毕业设计基于springboot+vue的村委会管理系统
项目介绍 采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本村委会管理系统主要包括个人中心、村民管理、村委会管理、村民信息管理、土地变更管理、农业补贴管理、党员信息管理等多个模块。它帮助村委会管理实现了信息化、网络化…...

【C++】多态 ⑪ ( 纯虚函数和抽象类 | 纯虚函数语法 | 抽象类和实现 | 代码示例 )
文章目录 一、纯虚函数和抽象类1、纯虚函数2、纯虚函数语法3、抽象类和实现 二、完整代码示例 一、纯虚函数和抽象类 1、纯虚函数 纯虚函数 : 在 C 语言中 , " 纯虚函数 " 是 特殊类型的 虚函数 , " 纯虚函数 " 在 父类 中 声明 , 但是没有实现 ; 抽象类 …...
node 第十四天 基于express的第三方中间件multer node后端处理用户上传文件
Multer 是一个 node.js 中间件,用于处理multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上的所以非常高效。前面我们已经知道了怎样利用express提供的静态资源处理中间件express.static()处理用户请求静态资源文件(图片, js…...

KnowledgeGPT:利用检索和存储访问知识库上增强大型语言模型10.30
利用检索和存储访问知识库上增强大型语言模型 摘要引言2 相关研究3方法3.1 任务定义3.2 知识检索3.2.1 代码实现3.2.2 实体链接3.2.3 获取实体信息3.2.4 查找实体或值3.2.5 查找关系 3.3 知识存储 4 实验4.1 实验设置4.2 流行知识库上的查询4.3 基于知识的问题回答 摘要 大型语…...
Angular material Chips Autocomplete
Chips Autocomplete 官网的例子我没法正常使用,无法实现搜索 我的select是个通用组件,现在贴代码: component.ts import {Component,ElementRef,forwardRef,Input,OnChanges,OnDestroy,OnInit,SimpleChanges,ViewChild, } from angular/co…...

『亚马逊云科技产品测评』活动征文|搭建基础运维环境
授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 目录 1、什么是容器化部署 2、连接到控制台 3、安装docker 3.1 更新…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...