GPT对话代码库——HAL库下 USART 的配置及问题(STM32G431CBT6)
目录
1,问:
1,答:
示例代码
正确的HAL库初始化方式
自定义初始化方式(不推荐)
总结
2,问:
2,答:
代码详细解释
初始部分
主初始化部分
初始化调用
FIFO阈值设置和FIFO模式禁用
结尾部分
特定代码的作用
1. huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
2. huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
3. huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
总结
3,问:
3,答:
HAL_UART_MspInit 函数
HAL_UART_MspDeInit 函数
总结
提问模型:GPT-4o-Free
提问时间:2024.07.01
1,问:
为什么一定要在HAL_UART_MspInit中配置GPIO引脚,不能自己创建一个函数吗
1,答:
在STM32 HAL库的框架下,HAL_UART_MspInit
函数是专门用于配置UART外设的相关资源的,包括GPIO引脚、时钟和中断。这是一个约定俗成的机制,旨在确保外设的初始化过程清晰、有序且易于维护。虽然你可以创建自己的函数来配置这些资源,但在HAL_UART_MspInit
中配置GPIO引脚有几个重要原因:
HAL库的设计规范:
- HAL库在初始化UART外设时,会自动调用相应的
MspInit
函数,比如HAL_UART_MspInit
。这是库设计的一部分,确保所有外设的初始化步骤都集中管理,不会遗漏任何必要的配置。代码的可维护性和一致性:
- 使用HAL库提供的
MspInit
函数,可以保持代码的一致性,使得所有外设的初始化过程都遵循同样的模式,方便阅读和维护。- 开发团队或后续开发者可以快速理解和修改代码,而不需要查找自定义的初始化函数。
防止遗漏关键步骤:
HAL_UART_MspInit
不仅用于配置GPIO引脚,还用于启用时钟、配置中断等。如果在其他地方进行这些配置,可能会遗漏某些步骤,导致外设无法正常工作。分离硬件相关配置和业务逻辑:
- 将硬件相关的配置(如GPIO、时钟、中断)集中在
MspInit
函数中,可以使业务逻辑与硬件配置分离,增强代码的模块化和可移植性。自动调用机制:
- 当调用
HAL_UART_Init
时,HAL库会自动调用HAL_UART_MspInit
。如果配置散落在其他自定义函数中,这种自动调用机制将失效,必须手动确保所有初始化步骤都已执行,增加了出错的可能性。
示例代码
正确的HAL库初始化方式
void HAL_UART_MspInit(UART_HandleTypeDef* huart) {GPIO_InitTypeDef GPIO_InitStruct = {0};if(huart->Instance == USART2) {__HAL_RCC_USART2_CLK_ENABLE(); // 使能USART2时钟__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟/**USART2 GPIO ConfigurationPA2 ------> USART2_TXPA3 ------> USART2_RX*/GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART2;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// USART2中断配置(如果需要)HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART2_IRQn);}
}
自定义初始化方式(不推荐)
虽然你可以创建一个自定义函数,但这不符合HAL库的最佳实践:
void My_UART_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_USART2_CLK_ENABLE(); // 使能USART2时钟__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟/**USART2 GPIO ConfigurationPA2 ------> USART2_TXPA3 ------> USART2_RX*/GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate = GPIO_AF7_USART2;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// USART2中断配置(如果需要)HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART2_IRQn);
}// 然后在初始化UART时手动调用这个函数
void USART2_Init(void) {huart2.Instance = USART2;huart2.Init.BaudRate = 9600;huart2.Init.WordLength = UART_WORDLENGTH_8B;huart2.Init.StopBits = UART_STOPBITS_1;huart2.Init.Parity = UART_PARITY_NONE;huart2.Init.Mode = UART_MODE_TX_RX;huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart2.Init.OverSampling = UART_OVERSAMPLING_16;My_UART_Init(); // 手动调用自定义的初始化函数if (HAL_UART_Init(&huart2) != HAL_OK) {// 初始化错误处理Error_Handler();}
}
总结
虽然你可以自己创建一个函数来配置GPIO引脚,但遵循HAL库的规范使用HAL_UART_MspInit
进行配置,可以提高代码的可维护性、一致性和可靠性,避免遗漏重要的配置步骤。这种方法确保了代码的模块化和可读性,尤其在团队开发和长期维护中具有明显的优势。
2,问:
void MX_USART1_UART_Init(void)
{/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 *//* USER CODE END USART1_Init 2 */
}
详细解释这段代码
并且说明这几句的作用
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
2,答:
这段代码是用来初始化STM32微控制器上的USART1外设的。它使用了HAL库提供的API来配置USART1的各种参数。下面是对这段代码的详细解释,以及对指定几句的作用说明。
代码详细解释
初始部分
void MX_USART1_UART_Init(void)
{/* USER CODE BEGIN USART1_Init 0 *//* USER CODE END USART1_Init 0 *//* USER CODE BEGIN USART1_Init 1 *//* USER CODE END USART1_Init 1 */
这些部分是用户代码的插入点,可以在这些地方添加用户定义的代码,通常用于初始化前的预处理和初始化后的后处理。
主初始化部分
huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
这些代码设置了USART1的各种初始化参数:
huart1.Instance = USART1;
:指定要初始化的USART外设实例为USART1。huart1.Init.BaudRate = 115200;
:设置波特率为115200。huart1.Init.WordLength = UART_WORDLENGTH_8B;
:设置数据字长度为8位。huart1.Init.StopBits = UART_STOPBITS_1;
:设置停止位为1位。huart1.Init.Parity = UART_PARITY_NONE;
:设置无奇偶校验。huart1.Init.Mode = UART_MODE_TX_RX;
:设置工作模式为收发模式。huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
:设置无硬件流控制。huart1.Init.OverSampling = UART_OVERSAMPLING_16;
:设置过采样为16倍。huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
:禁用单比特采样。huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
:设置时钟预分频器为1。huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
:不初始化高级特性。
初始化调用
if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}
调用HAL库的HAL_UART_Init
函数来初始化USART1。如果初始化失败,调用Error_Handler
处理错误。
FIFO阈值设置和FIFO模式禁用
if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK){Error_Handler();}if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK){Error_Handler();}if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK){Error_Handler();}
这些代码进一步配置USART1的FIFO设置:
HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8)
:设置发送FIFO的阈值为1/8。HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8)
:设置接收FIFO的阈值为1/8。HAL_UARTEx_DisableFifoMode(&huart1)
:禁用FIFO模式。
结尾部分
/* USER CODE BEGIN USART1_Init 2 *//* USER CODE END USART1_Init 2 */
}
这些部分是用户代码的插入点,可以在这些地方添加用户定义的代码,通常用于初始化后的后处理。
特定代码的作用
1.
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
这一行代码禁用单比特采样模式。单比特采样模式用于在低速率下减少误码率,通过多次采样决定一个比特的值。禁用它表示系统在正常的单次采样模式下工作。
2.
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
这一行代码设置时钟预分频器为1。这意味着输入时钟直接用于UART,不进行任何分频。预分频器可以用来调整UART时钟以匹配不同的波特率要求。
3.
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
这一行代码表示不初始化任何高级特性。UART的高级特性可能包括自动波特率检测、数据反转、MSB/LSB优先级选择等。这行代码禁用这些特性,保持UART的基本配置。
总结
这段代码配置了STM32的USART1外设,设置了波特率、数据长度、停止位、奇偶校验、工作模式、硬件流控制、过采样率、FIFO设置等参数。通过调用HAL_UART_Init
等函数,确保USART1能够按照指定配置正常工作。
3,问:
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 */
/** Initializes the peripherals clocks
*/
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();__HAL_RCC_GPIOA_CLK_ENABLE();
/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/* USART1 interrupt Init */
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 *//* USER CODE END USART1_MspInit 1 */
}
}void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{if(uartHandle->Instance==USART1)
{
/* USER CODE BEGIN USART1_MspDeInit 0 *//* USER CODE END USART1_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_USART1_CLK_DISABLE();/**USART1 GPIO Configuration
PA9 ------> USART1_TX
PA10 ------> USART1_RX
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);/* USART1 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 *//* USER CODE END USART1_MspDeInit 1 */
}
}
详细解释这段代码
3,答:
这段代码包含了两个函数:HAL_UART_MspInit
和 HAL_UART_MspDeInit
,分别用于初始化和反初始化USART1的相关硬件资源。这些函数通常在使用HAL库进行外设初始化和反初始化时被自动调用。下面是对这段代码的详细解释。
HAL_UART_MspInit 函数
HAL_UART_MspInit
函数用于配置USART1的相关硬件资源,包括时钟、GPIO引脚和中断。
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};if(uartHandle->Instance==USART1){/* USER CODE BEGIN USART1_MspInit 0 *//* USER CODE END USART1_MspInit 0 *//** Initializes the peripherals clocks*/PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
- 时钟配置:
- 设置外设时钟的选择。
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1
表示选择USART1的外设时钟。 - 设置USART1的时钟源为PCLK2。
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2
。 - 调用
HAL_RCCEx_PeriphCLKConfig
函数应用时钟配置。如果配置失败,调用Error_Handler
处理错误。
- 设置外设时钟的选择。
/* USART1 clock enable */
__HAL_RCC_USART1_CLK_ENABLE();
- 使能USART1时钟:调用
__HAL_RCC_USART1_CLK_ENABLE
函数使能USART1外设的时钟。
__HAL_RCC_GPIOA_CLK_ENABLE();/**USART1 GPIO ConfigurationPA9 ------> USART1_TXPA10 ------> USART1_RX*/GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF7_USART1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- 使能GPIOA时钟:调用
__HAL_RCC_GPIOA_CLK_ENABLE
函数使能GPIOA端口的时钟。 - 配置GPIO引脚:
- 设置GPIO引脚9和10为USART1的TX和RX功能。
- 设置GPIO模式为复用推挽输出(
GPIO_MODE_AF_PP
)。 - 设置引脚不上拉(
GPIO_NOPULL
)。 - 设置引脚速度为低速(
GPIO_SPEED_FREQ_LOW
)。 - 设置引脚的复用功能为USART1(
GPIO_AF7_USART1
)。 - 调用
HAL_GPIO_Init
函数应用GPIO配置。
/* USART1 interrupt Init */HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);HAL_NVIC_EnableIRQ(USART1_IRQn);
- USART1中断配置:
- 设置USART1中断的优先级为0。
- 启用USART1中断。
/* USER CODE BEGIN USART1_MspInit 1 *//* USER CODE END USART1_MspInit 1 */}
}
- 用户代码插入点:这些部分是用户代码的插入点,可以在这些地方添加自定义代码,以便在初始化过程中执行额外的操作。
HAL_UART_MspDeInit 函数
HAL_UART_MspDeInit
函数用于反初始化USART1的相关硬件资源,包括时钟、GPIO引脚和中断。
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
{if(uartHandle->Instance==USART1){/* USER CODE BEGIN USART1_MspDeInit 0 *//* USER CODE END USART1_MspDeInit 0 */
- 条件判断:检查传入的
uartHandle
实例是否为USART1。
/* Peripheral clock disable */__HAL_RCC_USART1_CLK_DISABLE();
- 关闭USART1时钟:调用
__HAL_RCC_USART1_CLK_DISABLE
函数关闭USART1外设的时钟。
/**USART1 GPIO ConfigurationPA9 ------> USART1_TXPA10 ------> USART1_RX*/HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
- 反初始化GPIO引脚:调用
HAL_GPIO_DeInit
函数反初始化GPIO引脚9和10,将其配置恢复到复位状态。
/* USART1 interrupt Deinit */HAL_NVIC_DisableIRQ(USART1_IRQn);
- 禁用USART1中断:调用
HAL_NVIC_DisableIRQ
函数禁用USART1中断。
/* USER CODE BEGIN USART1_MspDeInit 1 *//* USER CODE END USART1_MspDeInit 1 */}
}
- 用户代码插入点:这些部分是用户代码的插入点,可以在这些地方添加自定义代码,以便在反初始化过程中执行额外的操作。
总结
HAL_UART_MspInit
函数用于初始化USART1的相关硬件资源,包括时钟、GPIO引脚和中断。HAL_UART_MspDeInit
函数用于反初始化USART1的相关硬件资源,将其配置恢复到复位状态。- 使用这些函数可以确保外设的硬件资源在初始化和反初始化过程中得到正确配置和释放,从而保证系统的正常运行和资源管理。
相关文章:
GPT对话代码库——HAL库下 USART 的配置及问题(STM32G431CBT6)
目录 1,问: 1,答: 示例代码 正确的HAL库初始化方式 自定义初始化方式(不推荐) 总结 2,问: 2,答: 代码详细解释 初始部分 主初始化部分 初始化调用…...
ExoPlayer架构详解与源码分析(14)——ProgressiveMediaPeriod
系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…...

docker部署kafka(单节点) + Springboot集成kafka
环境: 操作系统:win10 Docker:Docker Desktop 4.21.1 (114176)、Docker Engine v24.0.2 SpringBoot:2.7.15 步骤1:创建网络: docker network create --subnet172.18.0.0/16 net-kafka 步骤2:安…...

一.1.(3)半导体二极管基本电路的分析方法及常见应用电路
1.二极管基本电路的分析方法 先标正负极,再看是否理想二极管 将二极管视为断路,求两端电压 两端电压均大于导通电压,压差大的先导通(由于电源不是完全的阶跃,而是有一个电压爬升的过程) 2.常见应用电路 1.求…...

银河麒麟V10 SP1 审计工具 auditd更新
前言 银河麒麟V10 SP1 审计工具 auditd 引发的内存占用过高, 内存使用率一直在 60% 以上, 内存一直不释放 排查 可以使用ps或者top查看系统进程使用情况 ps -aux|sort -k4nr|head -n 5 发现银河麒麟审计工具 auditd 一直占用内存不释放 解决 办法一…...

JWT(Json Web Token)在.NET Core中的使用
登录成功时生成JWT字符串目录 JWT是什么? JWT的优点: JWT在.NET Core 中的使用 JWT是什么? JWT把登录信息(也称作令牌)保存在客户端为了防止客户端的数据造假,保存在客户端的令牌经过了签名处理…...

《QT从基础到进阶·四十三》QPlugin插件多线程问题和只有插件dll没有头文件和lib文件时调用插件中的方法
1、插件和多线程问题: 创建插件对象不能放到多线程执行,不然报错:ASSERT failure in QWidget: "Widgets must be created in the GUlthread. //不能放在多线程执行 QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName))…...
Android SurfaceFlinger——屏幕状态初始化(二十二)
对于开机启动动画前期准备的相关步骤,我们已经分析了前 5 个,对于第 6 步调用 eglGetDisplay() 函数对 OpenGL ES 初始化并获取默认屏幕,我们在介绍 OpenGL ES 的时候也进行了详细的分析,下一步我们我们来分析对屏幕的状态进行初始化。 1)getInternalDisplayToken:获取显…...
3101. 交替子数组计数 Medium
给你一个 二进制数组 nums 。 如果一个 子数组 中 不存在 两个 相邻 元素的值 相同 的情况,我们称这样的子数组为 交替子数组 。 返回数组 nums 中交替子数组的数量。 示例 1: 输入: nums [0,1,1,1] 输出: 5 解释&…...
Linux系统基础命令行指令——Ubuntu
基础指令 更新指令 sudo apt update sudo apt upgrade 切换超级管理员 su root 切换路径 //相对、绝对 cd 路径回上一级路径 cd ..cd ../.. 退两级路径 查看当前目录 pwd查看指定路径内容 ls //常见搭配 ls -al 创建目录 mkdir 路径 创建文件 touc…...
qt 读取配置文件
在Qt中读取配置文件,主要有以下几种方法: 使用QFile和QTextStream类: 这种方法适用于读取任意文本文件,包括配置文件。使用QFile的open()方法打开配置文件。使用QTextStream的readLine()方法逐行读取配置数据。使用QXmlStreamRea…...
拉格朗日插值法【python,算法】
拉格朗日插值是一种在数值分析中用来构建通过一系列已知数据点的多项式插值的方法。这种方法以 18 世纪的法国数学家约瑟夫拉格朗日命名。当给定一组离散的数据点(𝑥_0,𝑦_0),(𝑥_1,𝑦_1),...,(𝑥_𝑛,&…...
定个小目标之刷LeetCode热题(41)
338. 比特位计数 给你一个整数 n ,对于 0 < i < n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n 1 的数组 ans 作为答案。 今天看一下这道简单题,主要考查位运算,代码如下 class Solution {pu…...
Kotlin中的关键字
Kotlin 中的关键字可分为几个大类: 声明/定义关键字: class:用于定义类interface:用于定义接口object:用于声明对象,Kotlin中实现单例模式的关键字fun:用于声明函数var:用于声明可变…...

LabVIEW新能源汽车电池性能测试系统
新能源汽车的核心部件之一是电池,其性能直接关系到整车的续航里程、安全性和寿命。为了确保电池的性能和可靠性,测试是必不可少的环节。本文介绍了一种基于LabVIEW的新能源汽车电池性能测试系统,通过LabVIEW与数据采集设备的无缝集成…...

Elasticsearch 实现 Word、PDF,TXT 文件的全文内容提取与检索
文章目录 一、安装软件:1.通过docker安装好Es、kibana安装kibana:2.安装原文检索与分词插件:之后我们可以通过doc命令查看下载的镜像以及运行的状态:二、创建管道pipeline名称为attachment二、创建索引映射:用于存放上传文件的信息三、SpringBoot整合对于原文检索1、导入依赖…...
深度学习赋能数据分析,联蔚盘云引领业务革新
一、引言 随着大数据时代的到来,深度学习技术正逐渐成为企业数据分析的新引擎。联蔚盘云凭借其在深度学习领域的深厚积累,为企业提供高效、精准的数据分析解决方案,助力企业实现业务革新与增长。 二、深度学习与数据分析的完美结合 联蔚盘…...

Arthas实战(5)- 项目性能调优
1、接口耗时查询:trace命令 trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。 1.1 准备测试应用 新建一个 SpringBoot 应用,写一耗时久的代码&…...

昇思25天学习打卡营第7天|Pix2Pix实现图像转换
文章目录 昇思MindSpore应用实践基于MindSpore的Pix2Pix图像转换1、Pix2Pix 概述2、U-Net架构定义UNet Skip Connection Block 2、生成器部分3、基于PatchGAN的判别器4、Pix2Pix的生成器和判别器初始化5、模型训练6、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要…...

单选多选提交问卷,代码示例
element中 需要对接口返回的数据进行分析。多选问题使用checkbox,单选题使用radio。 多选时可以绑定min/ma&am…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...