32单片机从入门到精通之开发环境——调试工具(七)
在人生的道路上,困难和挫折时常会出现。但是我们不能因此放弃,而是要坚持努力,克服困难,实现自己的梦想。成功不是一蹴而就的,它需要付出大量的努力和坚持不懈的精神。每一次的失败都是一次宝贵的经验,它能让我们更加明确自己的目标,并找到实现梦想的正确方法。只要我们拥有坚定的信念和毫不动摇的决心,就能够战胜一切困难,走向成功的巅峰。坚信自己,相信自己的能力,你就能够创造奇迹,实现你的人生目标。不管前方道路如何艰难,我们都要勇敢面对,永不放弃。只有不断地努力和拼搏,才能够迈向成功的巅峰。无论遇到多大的困难,都要保持积极的心态,相信自己的能力,坚持不懈,最终必将收获属于自己的成功。不要担心失败,害怕困难,只要心怀梦想和希望,坚持努力,你就能够实现自己的梦想。
目录
上一张试卷讲解
一、选择题(每题2分,共10分)
二、简答题(每题10分,共30分)
三、编程题(每题20分,共40分)
四、分析题(每题15分,共30分)
五、应用设计题(每题15分,共15分)
ST-Link V2/V3
JTAG/SWD接口
选择建议
实际应用与代码示例
步骤1:初始化项目
步骤2:生成代码
步骤3:编写主程序代码
步骤4:编译并下载程序
步骤5:运行和调试
试卷
一、选择题(每题2分,共10分)
二、简答题(每题10分,共30分)
三、编程题(每题20分,共40分)
四、分析题(每题15分,共30分)
五、应用设计题(每题15分,共15分)
上一张试卷讲解
一、选择题(每题2分,共10分)
-
下列哪一项是HAL库的主要优势?
A) 更低的性能开销
B) 易于使用的API
C) 对硬件的直接访问
D) 更高的代码效率正确答案:B) 易于使用的API
解释:HAL库提供了一个抽象层,使得开发者可以更容易地使用STM32的外设功能,而无需深入了解底层寄存器。 -
LL库最适合哪种应用场景?
A) 快速原型开发
B) 需要优化性能的应用
C) 不同微控制器间的代码移植
D) 简单应用开发正确答案:B) 需要优化性能的应用
解释:LL库提供了对硬件更直接的控制,减少了函数调用层次,因此适合那些需要最大化性能和最小化延迟的应用。 -
使用HAL库时,初始化外设通常通过什么来完成?
A) 直接操作寄存器
B) 调用底层驱动函数
C) 配置结构体与初始化函数
D) 手动编写汇编代码正确答案:C) 配置结构体与初始化函数
解释:HAL库通常会定义一系列配置结构体用于设置外设参数,并且有对应的初始化函数来启动这些外设。 -
在STM32CubeMX中生成的初始化代码,默认使用的是哪个库?
A) LL库
B) HAL库
C) 标准外设库
D) 自定义库正确答案:B) HAL库
解释:STM32CubeMX默认情况下会为新项目生成基于HAL库的初始化代码。 -
如果开发者需要对硬件进行精细控制,应该选择哪个库?
A) HAL库
B) LL库
C) Standard Peripheral Library
D) CMSIS正确答案:B) LL库
解释:LL库允许更接近硬件级别的编程,从而实现更细粒度的控制。
二、简答题(每题10分,共30分)
-
解释HAL库和LL库之间的主要区别,并说明它们各自适合的应用场景。
- HAL库:
- 特点:提供了一组高层API,简化了对外设的操作;具有较好的可移植性。
- 适用场景:适用于快速开发、需要频繁移植代码到不同型号MCU的情况,以及不需要极致性能的应用。
- LL库:
- 特点:提供了较低层次的接口,可以直接操作硬件寄存器;执行效率更高。
- 适用场景:当应用程序要求极高的性能或非常低的延迟时,或者开发者希望对硬件有更多控制权时,LL库是一个更好的选择。
- HAL库:
-
描述在STM32CubeMX工具中如何配置以生成基于LL库的初始化代码。
在STM32CubeMX中,可以通过以下步骤配置生成基于LL库的初始化代码:
- 打开“Project Manager”标签页。
- 在“Advanced Settings”部分找到“Generate peripheral initialization as function calls”,并确保选中此选项。
- 点击左侧栏中的“Code Generation”。
- 将“Peripheral Initialization Code”设置为“Low Level (LL)”。
- 完成上述配置后,点击“GENERATE CODE”按钮,STM32CubeMX将根据您的配置生成相应的LL库初始化代码。
-
举例说明如何利用HAL库中的中断处理机制来响应外部事件。
假设我们要监听一个按键按下事件,并触发一个LED闪烁动作。首先,在
main.c
文件中注册中断服务例程(ISR),然后在该ISR内部调用用户定义的回调函数来处理实际逻辑:// 在 main.c 中 extern void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if(GPIO_Pin == USER_BUTTON_PIN){// 按键被按下后的处理逻辑Toggle_LED();} }// 初始化外部中断线 static void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};// 启用GPIO时钟__HAL_RCC_GPIOA_CLK_ENABLE();// 配置按键引脚为输入模式,带下拉电阻GPIO_InitStruct.Pin = USER_BUTTON_PIN;GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);// 使能NVIC中的对应中断线HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); }
三、编程题(每题20分,共40分)
-
编写一段C代码,使用HAL库配置并启动一个定时器,使其每隔1秒触发一次中断。请包括必要的初始化步骤,并添加适当的注释。
#include "main.h" #include "stm32f4xx_hal.h"TIM_HandleTypeDef htim2;void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM2_Init(void);int main(void) {HAL_Init(); // 初始化HAL库SystemClock_Config(); // 配置系统时钟MX_GPIO_Init(); // 初始化GPIOMX_TIM2_Init(); // 初始化TIM2// 开启定时器更新中断HAL_TIM_Base_Start_IT(&htim2);while (1){// 主循环等待中断发生} }static void MX_TIM2_Init(void) {TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};htim2.Instance = TIM2;htim2.Init.Prescaler = 8399; // 设置预分频值,假设系统时钟为84MHzhtim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 9999; // 每10000个计数周期溢出,即1秒htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init(&htim2) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK){Error_Handler();} }void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if (htim->Instance == TIM2){// 每次定时器溢出时执行的代码HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 切换LED状态} }void Error_Handler(void) {while (1){// 错误处理逻辑} }
-
编写一段C代码,使用LL库实现GPIO引脚的配置为推挽输出模式,并使LED连接到该引脚上闪烁。要求代码适用于STM32系列微控制器,并附上详细注释。
#include "stm32f4xx_ll_bus.h" #include "stm32f4xx_ll_gpio.h" #include "stm32f4xx_ll_rcc.h" #include "stm32f4xx_ll_system.h" #include "stm32f4xx_ll_utils.h"void SystemClock_Config(void);int main(void) {// 初始化系统时钟SystemClock_Config();// 启用GPIOA时钟LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);// 配置PA5引脚为推挽输出模式LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_5, LL_GPIO_MODE_OUTPUT);LL_GPIO_SetPinSpeed(GPIOA, LL_GPIO_PIN_5, LL_GPIO_SPEED_FREQ_LOW);LL_GPIO_SetPinOutputType(GPIOA, LL_GPIO_PIN_5, LL_GPIO_OUTPUT_PUSHPULL);LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_5, LL_GPIO_PULL_NO);// LED闪烁主循环while (1){// 切换LED状态LL_GPIO_TogglePin(GPIOA, LL_GPIO_PIN_5);// 延迟500msLL_mDelay(500);} }void SystemClock_Config(void) {// 此处省略具体时钟配置代码,因为这取决于具体的STM32型号和需求 }
四、分析题(每题15分,共30分)
- 比较HAL库和LL库在代码可读性和维护性方面的优缺点。
-
HAL库:
- 优点:由于其高级别抽象,代码通常更加直观易懂,易于学习和使用,对于新手来说特别友好;并且由于封装良好,即使硬件平台发生变化,也往往只需修改少量代码即可完成移植。
- 缺点:由于增加了额外的抽象层,可能会导致某些复杂的功能难以理解或实现;另外,相比LL库,它的性能可能稍逊一筹。
-
LL库:
- 优点:提供更低层次的接口,代码执行效率高,能够更好地发挥硬件性能;对于熟悉底层硬件的人来说,代码更直接明了。
- 缺点:由于缺乏高层次抽象,代码可读性较差,尤其是对于不熟悉底层硬件的开发者来说;同时,随着硬件的变化,代码的移植工作量也会相应增加。
- 深入探讨在项目初期选择HAL库或LL库时应考虑的因素,并给出针对不同项目类型的推荐。
-
选择因素:
- 性能需求:如果项目对实时性和性能有严格要求,则应优先考虑LL库。
- 开发速度与成本:对于需要快速迭代开发的小型项目或原型设计,HAL库可能是更好的选择,因为它可以减少开发时间和降低学习曲线。
- 团队技能水平:如果团队成员对底层硬件和嵌入式系统有一定了解,那么LL库可以提供更大的灵活性;否则,HAL库更为合适。
- 代码移植性:如果计划将来要将代码迁移到其他型号的MCU上,那么HAL库提供的较好兼容性将是重要因素之一。
-
推荐:
- 快速原型开发/小型项目:建议使用HAL库,因为它能加速开发进程并简化调试过程。
- 高性能要求的应用:如工业控制、通信设备等领域,LL库因其高效性而成为首选。
- 长期维护项目:考虑到未来的维护和升级,HAL库提供的更好可移植性和更高的代码质量可能是更好的选择。
五、应用设计题(每题15分,共15分)
- 设计一个简单的温度监控系统,该系统使用STM32微控制器、温度传感器以及LCD显示器。请详细描述你将如何根据系统的性能需求选择合适的库(HAL库或LL库),并说明选择的理由。此外,请概述如何利用所选库的功能来优化开发流程和系统性能。
设计思路:
- 硬件选择:选用带有ADC模块的STM32微控制器来读取温度传感器的模拟信号,并通过SPI/I2C接口连接LCD显示器显示测量结果。
- 软件架构:
- 库的选择:考虑到这是一个相对简单的应用,且需要快速开发和良好的用户体验,我们选择了HAL库。这是因为HAL库提供了易于使用的API,可以大大缩短开发时间,同时也保证了足够的性能来满足日常监控的需求。
- 初始化配置:使用STM32CubeMX工具生成初始化代码,自动配置时钟、ADC、SPI/I2C等外设。
- 数据采集与处理:利用HAL库提供的ADC驱动程序定期采样温度传感器的数据,并通过SPI/I2C库发送给LCD显示器。
- 用户界面:编写简单的菜单系统供用户查看当前温度值或其他相关信息。
- 优化措施:
- 使用DMA传输方式来提高ADC采样的速度和稳定性。
- 如果LCD支持,采用双缓冲技术来减少屏幕刷新时的闪烁现象。
- 实现低功耗模式,在没有新的传感器数据到来之前让MCU进入休眠状态以节省电量。
总结:通过选用HAL库,不仅加快了开发进度,而且保持了较高的代码可读性和维护性,这对于一个注重用户体验和开发效率的温度监控系统来说是非常重要的。同时,合理利用HAL库提供的各种特性也能有效提升系统的整体性能。
ST-Link V2/V3 和 JTAG/SWD 接口是嵌入式系统开发中非常重要的调试工具,特别是在使用STM32等ARM Cortex-M系列微控制器时。以下是关于这两种工具的详细介绍:
ST-Link V2/V3
概述:
- 用途:ST-Link是STMicroelectronics官方提供的调试和编程工具,主要用于在线调试(即通过连接器实时监控并控制目标板上的微控制器)以及烧录程序到STM32系列微控制器中。
- 版本差异:
- ST-Link V2:较早版本,广泛应用于各种开发板上,支持基本的调试功能如单步执行、断点设置等,并且可以用来下载固件。
- ST-Link V3:最新一代产品,相比V2提供了更多的特性,例如更高的传输速度、额外的I/O引脚用于扩展功能、更强大的调试能力(支持更多的内核类型),并且兼容多种协议包括SWD和JTAG。
特点:
- 易用性:与STM32CubeIDE和其他主流IDE紧密集成,操作简单直观。
- 性能:V3版本尤其强调了效率提升,在数据传输速率方面有显著改进。
- 多功能性:除了标准的调试和编程外,还可以作为USB转串口适配器使用,方便开发者进行串行通信测试。
- 成本效益:性价比高,特别是对于初学者或小型项目来说非常合适。
JTAG/SWD接口
概述:
- 定义:JTAG(Joint Test Action Group)和SWD(Serial Wire Debug)都是硬件级的调试接口标准,允许主机(通常是PC端的IDE)直接访问目标设备内部的状态信息,从而实现代码调试、内存读写等功能。
- 区别:
- JTAG:最初设计用于芯片测试,后来被扩展为调试接口。它通常需要4个信号线(TCK、TMS、TDI、TDO),有时还包括一个复位信号(nTRST)。虽然功能全面,但占用较多引脚资源。
- SWD:由ARM公司推出的一种简化版调试接口,仅需两根线(SWCLK、SWDIO)即可完成所有必要的通信任务,因此更加节省空间,在现代ARM Cortex-M内核MCU中得到了广泛应用。
应用场合:
- JTAG:适用于多核处理器或多设备链路调试场景,因为它的架构允许在一个链路上连接多个器件。
- SWD:由于其简洁性和高效性,成为大多数单片机调试首选,特别是在资源受限的情况下,比如引脚数量有限的小型封装MCU。
选择建议:
- 如果您的开发板支持两者,那么SWD可能是更好的选择,因为它只需要较少的引脚,并且对于大多数STM32应用已经足够强大。
- 对于复杂系统或者特定需求(例如同时调试多个核心),则可能需要考虑使用JTAG。
综上所述,无论是选择ST-Link V2/V3还是决定采用哪种调试接口(JTAG vs. SWD),都取决于具体的应用需求、硬件限制以及个人偏好。对于大多数STM32开发者来说,ST-Link V3搭配SWD接口将是一个理想的选择,既保证了良好的用户体验,又满足了高效的开发要求。
选择建议
对于大多数STM32应用,SWD是一个更优的选择,因为它占用较少的引脚并且性能足够好。而对于复杂系统或有特殊需求的应用,可能需要考虑使用JTAG。
实际应用与代码示例
接下来,我们将通过一个简单的例子来演示如何使用ST-Link V3和SWD接口在STM32上实现LED闪烁的功能。假设我们正在使用STM32F4 Discovery板,该板集成了ST-Link V2调试器。
步骤1:初始化项目
首先,在STM32CubeMX中创建一个新的工程,选择适当的MCU型号(例如STM32F407VG),然后根据需要配置时钟树、GPIO和其他外设。确保启用了SWD接口作为调试方式。
步骤2:生成代码
点击“GENERATE CODE”按钮,让STM32CubeMX自动生成初始化代码。这一步会生成基于HAL库的初始化函数。
步骤3:编写主程序代码
打开生成的main.c
文件,添加以下代码以实现LED闪烁功能:
#include "main.h"// 定义LED引脚 #define LED_PIN GPIO_PIN_12 #define LED_GPIO_PORT GPIOD// 主函数入口 int main(void) {// 初始化HAL库HAL_Init();// 配置系统时钟SystemClock_Config();// 初始化所有已配置的外设MX_GPIO_Init();// 主循环while (1){// 切换LED状态HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);// 延迟500毫秒HAL_Delay(500);} }// GPIO初始化函数 static void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};// 启用GPIO端口时钟__HAL_RCC_GPIOD_CLK_ENABLE();// 配置LED引脚为推挽输出模式GPIO_InitStruct.Pin = LED_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct); }
步骤4:编译并下载程序
回到STM32CubeIDE,点击编译按钮构建项目。完成后,通过USB线将ST-Link V3连接到电脑,并将其另一端连接到STM32F4 Discovery板上的SWD接口。最后,点击下载按钮将程序烧录到MCU中。
步骤5:运行和调试
一旦程序成功烧录到MCU中,您应该能看到板载LED开始闪烁。如果想要进一步调试,可以在STM32CubeIDE中设置断点、观察变量值、逐步执行代码等操作,利用ST-Link提供的强大调试功能。
通过上述过程,您可以轻松地使用ST-Link V3和SWD接口进行STM32项目的开发和调试。
试卷
一、选择题(每题2分,共10分)
-
下列哪一项不是ST-Link的主要用途?
- A) 在线调试
- B) 烧录程序
- C) 直接访问硬件寄存器
- D) USB转串口适配
-
关于ST-Link V3相比V2的优势,以下说法正确的是:
- A) 更低的数据传输速率
- B) 减少I/O引脚数量
- C) 支持更少类型的内核
- D) 增强了调试能力
-
SWD接口相比于JTAG接口的主要优点是什么?
- A) 需要更多信号线
- B) 占用较少引脚资源
- C) 不适用于ARM Cortex-M内核MCU
- D) 功能更加全面
-
如果需要同时调试多个核心或设备链路,应该优先选择哪种接口?
- A) SWD
- B) JTAG
- C) UART
- D) SPI
-
在STM32CubeMX中生成初始化代码时,默认使用的库是哪一个?
- A) LL库
- B) HAL库
- C) Standard Peripheral Library
- D) 自定义库
二、简答题(每题10分,共30分)
-
解释为什么对于大多数STM32应用来说,ST-Link V3搭配SWD接口是一个理想的选择,并列出至少两个理由。
-
描述如何在STM32CubeMX中配置项目以确保使用SWD接口进行调试。
-
举例说明一个场景,在这个场景中你会选择JTAG而不是SWD接口来进行调试,并解释原因。
三、编程题(每题20分,共40分)
-
编写一段C代码,使用HAL库配置并启动一个定时器,使其每隔1秒触发一次中断。请包括必要的初始化步骤,并添加适当的注释。
-
编写一段C代码,使用LL库实现GPIO引脚的配置为推挽输出模式,并使LED连接到该引脚上闪烁。要求代码适用于STM32系列微控制器,并附上详细注释。
四、分析题(每题15分,共30分)
-
比较JTAG和SWD接口在实际应用中的优缺点,并说明在什么情况下应该选择其中一个而不是另一个。
-
深入探讨在项目初期选择ST-Link V2还是V3时应考虑的因素,并给出针对不同项目类型的推荐。
五、应用设计题(每题15分,共15分)
- 设计一个简单的温度监控系统,该系统使用STM32微控制器、温度传感器以及LCD显示器。请详细描述你将如何根据系统的性能需求选择合适的调试接口(JTAG或SWD),并说明选择的理由。此外,请概述如何利用所选接口的功能来优化开发流程和系统性能。
相关文章:
32单片机从入门到精通之开发环境——调试工具(七)
在人生的道路上,困难和挫折时常会出现。但是我们不能因此放弃,而是要坚持努力,克服困难,实现自己的梦想。成功不是一蹴而就的,它需要付出大量的努力和坚持不懈的精神。每一次的失败都是一次宝贵的经验,它能…...
多光谱图像的处理和分析方法有哪些?
一、预处理方法 1、辐射校正: 目的:消除或减少传感器本身、大气条件以及太阳光照等因素对多光谱图像辐射亮度值的影响,使得图像的辐射值能够真实反映地物的反射或发射特性。 方法:包括传感器校正和大气校正。传感器校正主要是根…...
电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教
0 缘起 一台联想电脑,使用Windows 10 专业版32位,电脑主机后置音频插孔一直没有声音,所以音箱是接在机箱前面版的前置音频插孔上的。 一天不小心捱到了音箱的音频线,音频线头断在音频插孔里面了,前置音频插孔因此用不…...
2412C++,自动注册
原文 注册器实现 示例代码 #pragma once #include <type_traits> #include <iostream> template<typename _Type> struct odr{inline static auto use []{ //[1]std::cout << __PRETTY_FUNCTION__ << std::endl;//在这里利用宏,注册(类名,T)…...
C#对线程同步的应用
什么是线程同步?线程同步的应用场景有哪些?在C#中有哪些线程同步方式?下面对这些问题做一个总结,让大家在面试的时候遇到这些问题能够游刃有余。 线程同步是指在多线程环境下,多个线程同时访问共享资源时,确…...
需求上线,为什么要刷缓存?
在需求上线的过程中,刷缓存主要有以下几个重要原因: 一、保证数据的准确性 旧数据残留问题 缓存是为了加快数据访问速度而存储的数据副本。在需求更新后,之前缓存中的数据可能已经不符合新的业务逻辑。例如,一个电商网站修改了商…...
Docker学习相关笔记,持续更新
如何推送到Docker Hub仓库 在Docker Hub新建一个仓库,我的用户名是 leilifengxingmw,我建的仓库名是 hello_world。 在本地的仓库构建镜像,注意要加上用户名 docker build -t leilifengxingmw/hello_world:v1 .构建好以后,本地会…...
手持PDA终端,提升零售门店管理效率
随着科技的不断进步和零售行业的持续发展,手持PDA终端的应用将会越来越广泛。它将不断融合更多先进的技术和功能,为零售门店管理带来更加便捷、高效、智能的解决方案。 手持PDA终端是集成了数据处理、条码扫描、无线通信等多种功能于一体的便携式设备…...
Spring实现Logback日志模板设置动态参数
版权说明: 本文由博主keep丶原创,转载请保留此块内容在文首。 原文地址: https://blog.csdn.net/qq_38688267/article/details/144842327 文章目录 背景设计日志格式实现配置动态取值logback-spring.xml 相关博客 背景 多个单体服务间存在少量…...
AI Infra
文章目录 关于 InfraAI Infra的核心思想 组成部分硬件软件网络云服务监控与优化安全与合规 关键里程碑未来展望 关于 Infra 在大模型中,“infra” 是 “infrastructure” 的缩写,指的是支持大模型训练和部署的技术基础设施。以下是其主要组成部分&#…...
【每日学点鸿蒙知识】RelativeContainer组件、List回弹、Flutter方法调用、Profiler工具等
1、RelativeContainer组件auto对齐规则? 当height设置为auto,这时候为什么子组件设置 top:{anchor: "__container__",align: VerticalAlign.Top}后auto就不生效了呢,anchor锚点不是默认top对齐的吗? 这是为了避免二次…...
springboot集成qq邮箱服务
springboot集成qq邮箱服务 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。 1.3 获取授权码 进入上图中的【管理服务】后:在【安全设置中生成授权码】,也可以直接点击【继续生成…...
【重庆】《政务数字化应用费用测算规范》(T/CDCIDA 001—2023)-省市费用标准解读系列36
《政务数字化应用费用测算规范(报批稿)》于2023年11月18日实施,本文件按照GB/T 1.1-2020给出的规则起草,主要适用于重庆政务数字化应用项目的费用测算。我司基于专业第三方信息化项目造价机构角度,从标准创新点、定制软…...
linux-centos8-安装make
参考: CentOS 8中 更新或下载时报错:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare internal mirrorlist_errors during downloading metadata for repository -CSDN博客 https://blog.csdn.net/lxcw_sir/article/details/140185068 Linux报错…...
springboot3 ThreadPoolTaskExecutor 和 Executors 线程池优化
在 Spring Boot 3 中,可以通过 ThreadPoolTaskExecutor 和 Executors 等方式创建和管理线程池。以下是基于 Spring Boot 的线程池创建工具的详细说明与实现: 一、使用 ThreadPoolTaskExecutor 创建线程池 Spring 提供了 ThreadPoolTaskExecutor,用于管理线程池。它支持灵活…...
Elasticsearch:当混合搜索真正发挥作用时
作者:来自 Elastic Gustavo Llermaly 展示混合搜索何时优于单独的词汇或语义搜索。 在本文中,我们将通过示例探讨混合搜索,并展示它与单独使用词汇或语义搜索技术相比的真正优势。 什么是混合搜索? 混合搜索是一种结合了不同搜索…...
NeurIPS 2024 | 像素级LLM实现图像视频理解、生成、分割和编辑大统一(昆仑万维等)
Accepted by NeurIPS 2024 文章链接:https://arxiv.org/pdf/2412.19806 项目链接:https://vitron-llm.github.io/ Github链接:https://github.com/SkyworkAI/Vitron 亮点直击 首次提出了一种通用的视觉多模态大语言模型(MLLM&…...
基于 GPUTasker 的 GPU 使用情况钉钉推送机器人实现
引言 https://github.com/cnstark/gputasker 随着 AI 模型的广泛应用,GPU 成为团队中最重要的资源之一。然而,如何实时监控 GPU 的使用情况并及时通知团队是一个值得关注的问题。为了更好地管理显卡资源,本文基于 GPUTasker,实现了…...
Linux-Ubuntu之RTC实时时钟显示
Linux-Ubuntu之RTC实时时钟显示 一,原理二,代码实现三,小结1.为什么这个显示不出来? 一,原理 这个RTC的和计数器差不多,往对应寄存器中放入初始化的时间,然后在时钟的作用下,进行累…...
rouyi(前后端分离版本)配置
从gitee上下载,复制下载地址,到 点击Clone,下载完成, 先运行后端,在运行前端 运行后端: 1.配置数据库,在Navicat软件中,连接->mysql->名字自己起(rouyi-vue-blog),用户名roo…...
【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向
【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向 【2025优质学术推荐】征稿控制科学、仪器、智能系统、通信、计算机、电子信息、人工智能、大数据、机器学习、软件工程、网络安全方向 文章目…...
C# 设计模式(结构型模式):适配器模式
C# 设计模式(结构型模式):适配器模式 在软件开发中,我们经常会遇到需要将不同接口的组件结合在一起的情况。此时,适配器模式(Adapter Pattern)就派上了用场。它属于结构型设计模式,…...
贪心算法概述
贪心算法总是作出当前看来最好的选择,是局部最优 可以使用贪心算法的问题一般具有两个重要的性质 贪心选择性质最优子结构性质 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到 其与动态规划的问题区别在于,动态规划算法通…...
自从学会Git,感觉打开了一扇新大门
“同事让我用 Git 提交代码,我居然直接把项目文件压缩发过去了……”相信很多初学者都经历过类似的窘境。而当你真正掌握 Git 时,才会发现它就像一本魔法书,轻松解决代码管理的种种难题。 为什么 Git 能成为程序员的标配工具?它究…...
jrc水体分类对水体二值掩码修正
使用deepwatermap生成的水体二值掩码中有部分区域由于被云挡住无法识别,造成水体不连续是使用jrc离线数据进行修正,jrc数据下载连接如下:https://global-surface-water.appspot.com/download 选择指定区域的数据集合下载如图: 使…...
Scala Collection(集合)
Scala的集合框架非常丰富和灵活,主要包括三大类:序列(Seq)、集(Set)和映射(Map)。这些集合类都扩展自Iterable特质,并且Scala为几乎所有集合类提供了可变和不可变的版本。…...
121.【C语言】数据结构之快速排序(未优化的Hoare排序存在的问题)以及时间复杂度的分析
目录 1.未优化的Hoare排序存在的问题 测试代码 "量身定制"的测试代码1 运行结果 "量身定制"的测试代码2 运行结果 "量身定制"的测试代码3 运行结果 分析代码1、2和3栈溢出的原因 排有序数组的分析 分析测试代码1:给一个升序数组,要求排…...
js 文档注释
在 JavaScript 中,文档注释(也叫 JSDoc 注释)是一种用于为代码提供结构化说明的注释方式。JSDoc 注释通常用于生成 API 文档、提高代码可读性,并为 IDE 提供智能提示。下面是如何在 JavaScript 中编写文档注释的基本指南。 基本语…...
chatgpt model spec 2024
概述 这是模型规范的初稿,该文档规定了我们在OpenAI API和ChatGPT中的模型的期望行为。它包括一组核心目标,以及关于如何处理冲突目标或指令的指导。 我们打算将模型规范作为研究人员和数据标注者创建数据的指南,这是一种称为从人类反馈中进…...
路由技术在网络中的作用及特点
作用:路径选择:在复杂的网络拓扑结构中,路由技术能够根据网络的当前状态和目标地址,为数据报文选择一条最佳的传输路径,确保数据能够快速、准确地到达目的地。例如,在互联网中,当用户访问一个网…...
No.1十六届蓝桥杯备战|第一个C++程序|cin和cout|命名空间
第一个C程序 基础程序 使用DevC5.4.0 写一个C程序 在屏幕上打印hello world #include <iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; } 运行这个C程序 F9->编译 F10->运行 F11->编译运行 mai…...
vim 按下esc后取消高亮
配置 ideavimrc文件 " 按下 Esc 键时自动取消高亮 " 在普通模式下按下 Esc 键取消高亮 nnoremap <Esc> :nohlsearch<CR> " 在插入模式下按下 Esc 键取消高亮 inoremap <Esc> <Esc>:nohlsearch<CR>" 额外:当退出…...
JS-判断字段值是否为空
1.js方法 /*** Description: 判断给定值是否为空* param {any} value 需要检查的值* return {boolean} 如果值为空,返回 true;否则返回 false */ export function isEmpty(value) {// 检查是否为 null 或 undefinedif (value null || value undefined…...
STM32-笔记22-sg90舵机
一、接线 二、实验实现 动手让 SG90 每秒转动一下,0 -> 20 -> 40 -> 100 -> 180 如此循环。 舵机接A6 复制18-呼吸灯,重命名24-sg90舵机 把PWM重命名sg90 打开项目文件 在魔术棒和品上把PWM都去掉,加载sg90文件夹 加载之后…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之10 方案再探之1:特定于领域的模板 之1 随想交流
前面的项目再次不能继续。不得已再一次重新建了这个项目,并以当前修改版本的项目文件为附件开始了今天的沟通。所以 标明是“方案再探” 在新建这个项目的同时,就将项目文件作为附件添加进去,然后开始。 文件链接:智能工厂的设计…...
国内Ubuntu环境Docker部署Stable Diffusion入坑记录
国内Ubuntu环境Docker部署Stable Diffusion入坑记录 本文旨在记录使用dockerpython进行部署 stable-diffusion-webui 项目时遇到的一些问题,以及解决方案,原项目地址: https://github.com/AUTOMATIC1111/stable-diffusion-webui 问题一览: …...
速盾:服务器CDN加速解析的好处有哪些呢?
随着互联网应用的普及,越来越多的企业开始关注如何提升网站的访问速度和用户体验。为了实现这一目标,许多企业选择使用CDN(内容分发网络)来加速网站的内容分发。CDN通过在全球范围内分布多个节点,将内容缓存到离用户最…...
【sql】CAST(GROUP_CONCAT())实现一对多对象json输出
数据库:mysql 5.7版本以上 问题:一对多数据,实现输出一条数据,并将多条数据转换成json对象输出,可以实现一对多个字段。 项目中关系较为复杂,以下简化数据关系如下: t1是数据表,t…...
[创业之路-221]:企业的责任中心:收入中心、利润中心、成本中心、费用中心、投资中心
目录 一、大部分企业责任中心定义 投资中心:战略决策部 利润中心:事业部 收入中心:进账 成本中心:成本 费用中心:消耗 二、华为对责任中心定义 投资中心 利润中心(事业部:BU࿰…...
人工智能之基于阿里云图像人脸融合部署
人工智能之基于阿里云图像人脸融合部署 需求描述 基于阿里云搭建图像人脸融合模型,模型名称:iic/cv_unet-image-face-fusion_damo使用上述模型输出人脸融合照片 模型路径:人脸融合 业务实现 阿里云配置 阿里云配置如下: SD…...
GXUOJ-算法-补题:22级《算法设计与分析》第一次课堂练习
2.最大子数组和 问题描述 代码解答 #include<bits/stdc.h> using namespace std; const int N1005; int sum,n,a[N]; int res-1;int result(){for(int i0;i<n;i){if(sum<0) suma[i];else{suma[i];resmax(res,sum);}}return res; } int main(){cin>>n;for(i…...
Redisson 分布式锁获取tryLock和lock的区别
问题 boolean isLock lock.tryLock(10, 30, TimeUnit.SECONDS); boolean isLock lock.lock(30, TimeUnit.SECONDS); boolean isLock lock.lock(); 三者的区别?? 这三个方法都是用于获取 Redisson 分布式锁的,但它们在获取锁的方式和行为…...
mysql及其兼容语法数据库对于注释的特殊要求
我司大部分数据库使用MS-SQL,其中使用大量–开头的行注释,由于业务需要,切换到了Starrocks数据库(兼容mysql语法)后发现使用with开头子查询的时候,大量报错,单独执行内部的子查询又正常…...
开源模型应用落地-工具使用篇-Spring AI(七)
一、前言 在AI大模型百花齐放的时代,很多人都对新兴技术充满了热情,都想尝试一下。但是,实际上要入门AI技术的门槛非常高。除了需要高端设备,还需要面临复杂的部署和安装过程,这让很多人望而却步。不过,随…...
多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测
多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入多输出预测预测效果基本介绍模型背景程序设计参考资料 预测效果 基本介绍 Matlab实现WOA-CNN鲸鱼算法优化卷积神经网络多输入…...
【golang学习之旅】使用VScode安装配置Go开发环境
1. 下载并安装Go 1.1 下载地址1.2 选择版本并下载1.3 安装目录1.4 验证是否安装成功 2. 配置环境变量 2.1 配置步骤2.2 GO部分环境变量说明 3. 下载或更新 Vscode 3.1 下载地址3.2 安装步骤 4. 为Go开发配置VScode 1. 下载并安装Go 1.1 下载地址 https://studygolang.com/dl…...
HarmonyOS Next“说书人”项目 单机版 实践案例
前段时间开发了一个软件,取名为“说书人”,后由于备案暂时没有通过,于是删除了联网功能,重新做了一个单机版,这里对于单机版的开发实践案例进行一个发出,希望能帮助到大家 文章最后给出了AtomGit仓库地址 p…...
Vue3 + ElementPlus动态合并数据相同的单元格(超级详细版)
最近的新项目有个需求需要合并单元列表。ElementPlus 的 Table 提供了合并行或列的方法,可以参考一下https://element-plus.org/zh-CN/component/table.html 但项目中,后台数据返回格式和指定合并是动态且没有规律的,Element 的示例过于简单&…...
前端开发中依赖包有问题怎么办
在前端开发中,如果你发现某个依赖包存在问题,可以考虑以下步骤来解决: 一、简单方案 1. 检查问题来源: 确认问题是否由依赖包引起,而不是你的代码或其他配置问题。查看错误信息、文档和相关的 GitHub issue…...
Oracle exp和imp命令导出导入dmp文件
目录 一. 安装 instantclient-tools 工具包二. exp 命令导出数据三. imp 命令导入数据四. expdp 和 impdp 命令 一. 安装 instantclient-tools 工具包 ⏹官方网站 https://www.oracle.com/cn/database/technologies/instant-client/linux-x86-64-downloads.html ⏹因为我们在…...