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分)
  1. 下列哪一项是HAL库的主要优势?

     

    A) 更低的性能开销
    B) 易于使用的API
    C) 对硬件的直接访问
    D) 更高的代码效率

     

    正确答案:B) 易于使用的API
    解释:HAL库提供了一个抽象层,使得开发者可以更容易地使用STM32的外设功能,而无需深入了解底层寄存器。

  2. LL库最适合哪种应用场景?

     

    A) 快速原型开发
    B) 需要优化性能的应用
    C) 不同微控制器间的代码移植
    D) 简单应用开发

     

    正确答案:B) 需要优化性能的应用
    解释:LL库提供了对硬件更直接的控制,减少了函数调用层次,因此适合那些需要最大化性能和最小化延迟的应用。

  3. 使用HAL库时,初始化外设通常通过什么来完成?

     

    A) 直接操作寄存器
    B) 调用底层驱动函数
    C) 配置结构体与初始化函数
    D) 手动编写汇编代码

     

    正确答案:C) 配置结构体与初始化函数
    解释:HAL库通常会定义一系列配置结构体用于设置外设参数,并且有对应的初始化函数来启动这些外设。

  4. 在STM32CubeMX中生成的初始化代码,默认使用的是哪个库?

     

    A) LL库
    B) HAL库
    C) 标准外设库
    D) 自定义库

     

    正确答案:B) HAL库
    解释:STM32CubeMX默认情况下会为新项目生成基于HAL库的初始化代码。

  5. 如果开发者需要对硬件进行精细控制,应该选择哪个库?

     

    A) HAL库
    B) LL库
    C) Standard Peripheral Library
    D) CMSIS

     

    正确答案:B) LL库
    解释:LL库允许更接近硬件级别的编程,从而实现更细粒度的控制。

二、简答题(每题10分,共30分)
  1. 解释HAL库和LL库之间的主要区别,并说明它们各自适合的应用场景。

    • HAL库
      • 特点:提供了一组高层API,简化了对外设的操作;具有较好的可移植性。
      • 适用场景:适用于快速开发、需要频繁移植代码到不同型号MCU的情况,以及不需要极致性能的应用。
    • LL库
      • 特点:提供了较低层次的接口,可以直接操作硬件寄存器;执行效率更高。
      • 适用场景:当应用程序要求极高的性能或非常低的延迟时,或者开发者希望对硬件有更多控制权时,LL库是一个更好的选择。
  2. 描述在STM32CubeMX工具中如何配置以生成基于LL库的初始化代码。

     

    在STM32CubeMX中,可以通过以下步骤配置生成基于LL库的初始化代码:

    1. 打开“Project Manager”标签页。
    2. 在“Advanced Settings”部分找到“Generate peripheral initialization as function calls”,并确保选中此选项。
    3. 点击左侧栏中的“Code Generation”。
    4. 将“Peripheral Initialization Code”设置为“Low Level (LL)”。
    5. 完成上述配置后,点击“GENERATE CODE”按钮,STM32CubeMX将根据您的配置生成相应的LL库初始化代码。
  3. 举例说明如何利用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分)
  1. 编写一段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){// 错误处理逻辑}
    }
  2. 编写一段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分)
  1. 比较HAL库和LL库在代码可读性和维护性方面的优缺点。
  • HAL库

    • 优点:由于其高级别抽象,代码通常更加直观易懂,易于学习和使用,对于新手来说特别友好;并且由于封装良好,即使硬件平台发生变化,也往往只需修改少量代码即可完成移植。
    • 缺点:由于增加了额外的抽象层,可能会导致某些复杂的功能难以理解或实现;另外,相比LL库,它的性能可能稍逊一筹。
  • LL库

    • 优点:提供更低层次的接口,代码执行效率高,能够更好地发挥硬件性能;对于熟悉底层硬件的人来说,代码更直接明了。
    • 缺点:由于缺乏高层次抽象,代码可读性较差,尤其是对于不熟悉底层硬件的开发者来说;同时,随着硬件的变化,代码的移植工作量也会相应增加。
  1. 深入探讨在项目初期选择HAL库或LL库时应考虑的因素,并给出针对不同项目类型的推荐。
  • 选择因素

    • 性能需求:如果项目对实时性和性能有严格要求,则应优先考虑LL库。
    • 开发速度与成本:对于需要快速迭代开发的小型项目或原型设计,HAL库可能是更好的选择,因为它可以减少开发时间和降低学习曲线。
    • 团队技能水平:如果团队成员对底层硬件和嵌入式系统有一定了解,那么LL库可以提供更大的灵活性;否则,HAL库更为合适。
    • 代码移植性:如果计划将来要将代码迁移到其他型号的MCU上,那么HAL库提供的较好兼容性将是重要因素之一。
  • 推荐

    • 快速原型开发/小型项目:建议使用HAL库,因为它能加速开发进程并简化调试过程。
    • 高性能要求的应用:如工业控制、通信设备等领域,LL库因其高效性而成为首选。
    • 长期维护项目:考虑到未来的维护和升级,HAL库提供的更好可移植性和更高的代码质量可能是更好的选择。
五、应用设计题(每题15分,共15分)
  1. 设计一个简单的温度监控系统,该系统使用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分)
  1. 下列哪一项不是ST-Link的主要用途?

    • A) 在线调试
    • B) 烧录程序
    • C) 直接访问硬件寄存器
    • D) USB转串口适配
  2. 关于ST-Link V3相比V2的优势,以下说法正确的是:

    • A) 更低的数据传输速率
    • B) 减少I/O引脚数量
    • C) 支持更少类型的内核
    • D) 增强了调试能力
  3. SWD接口相比于JTAG接口的主要优点是什么?

    • A) 需要更多信号线
    • B) 占用较少引脚资源
    • C) 不适用于ARM Cortex-M内核MCU
    • D) 功能更加全面
  4. 如果需要同时调试多个核心或设备链路,应该优先选择哪种接口?

    • A) SWD
    • B) JTAG
    • C) UART
    • D) SPI
  5. 在STM32CubeMX中生成初始化代码时,默认使用的库是哪一个?

    • A) LL库
    • B) HAL库
    • C) Standard Peripheral Library
    • D) 自定义库
二、简答题(每题10分,共30分)
  1. 解释为什么对于大多数STM32应用来说,ST-Link V3搭配SWD接口是一个理想的选择,并列出至少两个理由。

  2. 描述如何在STM32CubeMX中配置项目以确保使用SWD接口进行调试。

  3. 举例说明一个场景,在这个场景中你会选择JTAG而不是SWD接口来进行调试,并解释原因。

三、编程题(每题20分,共40分)
  1. 编写一段C代码,使用HAL库配置并启动一个定时器,使其每隔1秒触发一次中断。请包括必要的初始化步骤,并添加适当的注释。

  2. 编写一段C代码,使用LL库实现GPIO引脚的配置为推挽输出模式,并使LED连接到该引脚上闪烁。要求代码适用于STM32系列微控制器,并附上详细注释。

四、分析题(每题15分,共30分)
  1. 比较JTAG和SWD接口在实际应用中的优缺点,并说明在什么情况下应该选择其中一个而不是另一个。

  2. 深入探讨在项目初期选择ST-Link V2还是V3时应考虑的因素,并给出针对不同项目类型的推荐。

五、应用设计题(每题15分,共15分)
  1. 设计一个简单的温度监控系统,该系统使用STM32微控制器、温度传感器以及LCD显示器。请详细描述你将如何根据系统的性能需求选择合适的调试接口(JTAG或SWD),并说明选择的理由。此外,请概述如何利用所选接口的功能来优化开发流程和系统性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/66324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查询docker overlay2文件夹下的 c7ffc13c49xxx是哪一个容器使用的

问题背景 查询docker overlay2文件夹下的 c7ffc13c49xxx是哪一个容器使用的 [root@lnops overlay2]# du -sh * | grep G 1.7G 30046eca3e838e43d16d9febc63cc8f8bb3d327b4c9839ca791b3ddfa845e12e 435G c7ffc13c49a43f08ef9e234c6ef9fc5a3692deda3c5d42149d0070e9d8124f71 1.…

LeetCode:700.二叉搜索树中的搜索

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:700.二叉搜索树中的搜索 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。 你…

美食烹饪互动平台

本文结尾处获取源码。 一、相关技术 后端:Java、JavaWeb / Springboot。前端:Vue、HTML / CSS / Javascript 等。数据库:MySQL 二、相关软件(列出的软件其一均可运行) IDEAEclipseVisual Studio Code(VScode)Navica…

单片机从入门到放弃教程001

1. 单片机介绍 单片微型计算机(Single Chip Microcomputer)简称单片机,是典型的嵌入式微处理器(Micro Controller Unit简称MCU),是一种将中央处理器(CPU)、内存、输入输出接口以及其他功能模块集成在单一芯片上的微型计算机。 1…

2024数据湖架构实践案例(附资料)

2024年数据湖架构的一些实践情况: 技术趋势 湖仓架构融合:湖仓架构的采用在2024年持续发展,它结合了数据湖的可扩展性和数据仓库的分析性能,能够处理多种数据类型和复杂的工作流程,为企业提供更全面的数据视图。例如…

Redis——主从复制模式

文章目录 1. 引入2. 主从复制模式2.1 概念2.2 配置2.3 原理2.3.1 建立连接阶段2.3.2 命令传播阶段2.3.3 心跳检测机制2.3.4 部分重同步机制(1) 主节点通过 复制积压缓冲区 记录写命令(2) 主节点通过 复制偏移量 判断从节点是否满足执行部分重同步的条件(3) 执行部分重同步操作 …

Mysql数据实时同步到Es上

同步方案 ① 同步双写 同步双写实一种数据同步策略,它指的是在主数据库(如mysql) 上进行数据修改操作,同时将这些修改同步写入到ES 中,这种策略旨在确保两个数据库之间的数据一致性,并且优化系统的读写性能。 目标 同步双写是…

供需平台信息发布付费查看小程序系统开发方案

供需平台信息发布付费查看小程序系统主要是为了满足个人及企业用户的供需信息发布与匹配需求。 一、目标用户群体 个人用户:寻找兼职工作、二手物品交换、本地服务(如家政、维修)等。 小微企业:推广产品和服务,寻找合…

深入理解计算机系统—虚拟内存(3)

9.9 动态内存分配 虽然可以使用低级的 mmap 和 munmap 函数来创建和删除虚拟内存的区域,但是 C程序员还是会觉得当运行时需要额外虚拟内存时,用 动态内存分配器 更方便,也有更好的可移植性。 动态内存分配器维护着一个进程的虚拟内存区域&…

Swift Concurrency(并发)学习

Swift 的并发模型是基于 异步任务 和 任务调度 的一套现代化的异步编程工具。以下是相关语法规则总结 1. 异步函数(async)与 await async 用于声明一个异步函数,表示函数可能会执行耗时任务,例如网络请求、文件读写等。在调用异步…

html本地字符串处理工具|去重、分割、求交集、求并集

源代码&#xff08;保存到本地文件命名为 xxx.html&#xff0c;用浏览器打开该文件即可使用&#xff09; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>数据处理</title><style>inpu…

毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

MySQL数据库基础 === DDL DML

目录 概述-数据模型 1、关系型数据库&#xff08;RDBMS&#xff09; 2、MySQL数据库 通用语法及分类 通用语法 DDL&#xff08;数据定义语言&#xff09; 数据库操作 表操作 DML&#xff08;数据操作语言&#xff09; 添加数据 更新和删除数据 概述-数据模型 1、关…

企业二要素如何用C#实现

一、什么是企业二要素&#xff1f; 企业二要素&#xff0c;通过输入统一社会信用代码、企业名称或统一社会信用代码、法人名称&#xff0c;验证两者是否匹配一致。 二、企业二要素适用哪些场景&#xff1f; 例如&#xff1a;信用与金融领域 1.信用评级&#xff1a;信用评级…

微信小程序中 “页面” 和 “非页面” 的区别

微信小程序中 “页面” 和 “非页面” 的区别&#xff0c;并用表格进行对比。 核心概念&#xff1a; 页面 (Page)&#xff1a; 页面是微信小程序中用户可以直接交互的视图层&#xff0c;也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…

基于微信小程序的面部动作检测

目录 引言系统架构概述前端实现细节后端实现细节防止欺骗与误导的措施前后端数据交互详细细节关键技术选型关键技术框架与算法详细说明优化与注意事项总结 引言 微信小程序的面部动作检测的核心功能包括检测用户的左右转头、眨眼和张嘴动作&#xff0c;并根据检测结果逐步引导…

asp.net core中的 Cookie 和 Session

在 Web 开发中&#xff0c;用户会话管理是非常重要的&#xff0c;尤其是在需要保持用户状态和身份验证的应用中。ASP.NET Core 提供了多种状态管理技术&#xff0c;如 Cookie 和 Session&#xff0c;它们可以帮助你管理用户会话、存储数据并实现用户身份验证等功能。下面将详细…

互联网直播点播平台EasyDSS无人机视频推拉流技术实现工地远程监控巡检直播

在建筑行业&#xff0c;施工现场的安全管理和实时监控一直是项目管理中的重点。随着技术的进步&#xff0c;无人机工地直播技术成为了一种新兴的解决方案&#xff0c;它不仅能够提高施工透明度&#xff0c;还能够加强现场安全管理。EasyDSS作为一种先进的流媒体技术平台&#x…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 四、提示范式&#xff08;Explanation for Prompting Paradigm&#xff09; 随着语言模型规模的扩大&#xff0c;基于提示&#xff08;prom…

基于区块链的共享算力系统概念方案

以下白皮书为一个去中心化的 GPU 共享算力系统的概念性方案参考&#xff0c;旨在帮助社区和开发者初步了解该系统的设计思路与运作机制。该方案受到 IPFS、区块链&#xff08;如比特币、以太坊&#xff09;等去中心化项目的启发&#xff0c;结合了激励机制和点对点资源共享理念…