ARM Cortex-M3内核详解
目录
一、ARM Cortex-M3内核基本介绍
(一)基本介绍
(二)主要组成部分
(三)调试系统
二、ARM Cortex-M3内核的内核架构
三、ARM Cortex-M3内核的寄存器
四、ARM Cortex-M3内核的存储结构
五、ARM Cortex-M3内核的中断与异常
(一)中断
(二)异常
(三)中断与异常的协同工作
一、ARM Cortex-M3内核基本介绍
(一)基本介绍
ARM Cortex - M3 内核是一款广泛应用于嵌入式系统的 32 位 RISC 处理器内核,以下是对其的简要介绍。
1、基本架构
采用哈佛架构,具有独立的指令总线和数据总线,能同时进行指令和数据的访问,提高了数据处理效率。
支持 Thumb - 2 指令集,它融合了 16 位 Thumb 指令和 32 位 ARM 指令的优点,既能保持代码的紧凑性,又能实现高效的处理性能。
2、性能特点
具有较高的性能和较低的功耗。其时钟频率通常可达几十MHz到上百MHz,能够满足多种实时应用的需求。
通过优化的流水线设计和硬件乘法器等部件,可快速执行各种算术和逻辑运算。
3、中断处理
具有强大的中断处理能力,支持嵌套向量中断控制器(NVIC)。
它可以对多个中断源进行优先级管理,能够快速响应外部事件,并且在中断处理过程中可以实现高效的上下文切换,确保实时任务的及时处理。
4、存储器管理
支持多种存储器类型,包括闪存、SRAM 等。具有灵活的存储器映射机制,允许开发人员根据具体应用需求合理分配内存空间。
还支持位带操作,能对特定的内存位进行单独访问和操作,提高了对寄存器等控制位的操作效率。
5、应用领域
由于其高性能、低功耗和丰富的外设接口,广泛应用于工业控制、汽车电子、消费电子、医疗设备、物联网等众多领域,如智能传感器、电机控制器、智能家居设备等。
(二)主要组成部分
1、处理器核心
这是内核的核心运算部分,包含 32 位的ALU(算术逻辑单元)、32 个通用寄存器以及控制单元。
ALU 负责执行各种算术和逻辑运算;
通用寄存器用于暂存数据和中间结果,方便处理器快速访问;
控制单元则负责指令的译码和执行控制,确保指令按照正确的顺序和方式执行。
2、嵌套向量中断控制器(NVIC)
它是 Cortex - M3 内核中断处理的核心部件。NVIC 能够管理多个中断源,为每个中断源分配优先级,支持中断嵌套功能。
当中断发生时,NVIC 会迅速响应,并根据中断优先级决定是否暂停当前正在执行的任务,转而处理中断服务程序,处理完成后再恢复原来的任务执行。
3、系统控制块(SCB)
主要用于配置和控制处理器的系统级功能。它包含了多个寄存器,可用于配置系统时钟、低功耗模式、异常处理等。
通过对 SCB 中寄存器的设置,开发人员可以根据具体应用需求优化系统性能和功耗。
4、调试系统
该部分为内核提供调试功能,支持硬件断点、单步执行等调试操作。开发人员可以利用调试系统来查找和解决程序中的错误,监控处理器的运行状态,提高开发效率。
5、总线接口
负责内核与外部存储器和外设之间的数据传输。它提供了与系统总线的连接,使处理器能够快速访问外部资源,确保数据在处理器、存储器和外设之间的高效流动。
(三)调试系统
ARM Cortex-M3 内核的调试系统是嵌入式开发中至关重要的组成部分,它为开发人员提供了强大的工具来诊断、调试和优化软件与硬件设计。以下是其核心功能和特点的简要介绍:
1、调试架构基础
Cortex-M3的调试系统基于ARM Debug Interface (ADI) 标准,支持多种调试方式:
①串行线调试(SWD):使用两线(时钟和数据)进行高效通信,占用引脚少,适合小型设备。
②JTAG 接口:标准的四线调试接口,兼容性强,但占用更多 GPIO 资源。
③跟踪功能:通过TPIU(Trace Port Interface Unit)输出指令和数据跟踪信息,用于实时分析。
2、主要调试特性
(1)断点与观察点
① 硬件断点:支持指令执行断点(最多 2 个),可在特定地址中断程序运行。
② 数据观察点:支持最多 4 个数据观察点,可监视内存地址的读写操作(如变量被修改时触发中断)。
(2)单步执行与寄存器访问
① 单步执行:支持单步执行指令,方便逐行调试代码。
② 寄存器访问:可实时读取和修改 CPU 寄存器(如 R0-R15、PSRs)及内存内容。
(3)低功耗调试
① 支持在系统进入睡眠或停机模式时保持调试连接,便于测试功耗敏感场景。
(4)系统调试寄存器
① 调试控制寄存器:配置调试接口和断点行为。
② 异常跟踪寄存器:记录异常和中断的发生过程。
3、调试组件
① 调试访问端口 (DAP):连接调试器与内核的物理接口,支持 SWD 或 JTAG 协议。
② 调试子系统 (DSU):管理调试会话,处理断点 / 观察点请求。
③ ITM (Instrumentation Trace Macrocell):支持 printf 类调试信息的输出,无需占用串口。
④ ETM (Embedded Trace Macrocell):提供指令执行跟踪,用于性能分析(部分型号支持)。
4、常用调试工具
① Keil MDK、GDB、OpenOCD:主流的调试工具链,支持 Cortex-M3。
② ST-Link、J-Link、CMSIS-DAP:常见的调试器硬件,通过SWD或JTAG连接目标设备。
5、应用场景
① 软件开发:定位程序崩溃、变量异常等问题。
② 性能优化:通过指令跟踪分析代码执行效率。
③ 硬件验证:测试外设驱动(如 ADC、SPI)的功能正确性。
6、限制与注意事项
① 调试接口会占用 GPIO 引脚,可能影响硬件设计。
② 某些低功耗模式下调试连接可能中断,需特殊配置。
③ 实时跟踪功能(如 ETM)可能需要额外的存储设备捕获数据。
二、ARM Cortex-M3内核的内核架构
ARM Cortex - M3 内核采用了哈佛架构,具有独立的指令总线和数据总线,能同时进行指令和数据的访问,提高了数据处理效率。其内核架构主要包括以下几个部分:
1、处理器核心
(1)寄存器组
包含 32 个 32 位通用寄存器,如R0-R15。
其中 R0 - R7 为低组通用寄存器,R8 - R15 为高组通用寄存器。
R13 通常用作堆栈指针(SP),R14 为链接寄存器(LR),用于保存函数调用的返回地址,R15 是程序计数器(PC),指示当前正在执行的指令地址。
(2)算术逻辑单元(ALU)
负责执行各种算术运算 (如加法、减法、乘法等) 和逻辑运算 (如与、或、非等) 。
并根据运算结果设置状态寄存器中的标志位,如进位标志 (C)、零标志 (Z)、负数标志 (N) 和溢出标志 (V) 。
(3)控制单元
负责指令的取指、译码和执行控制。
它从指令总线获取指令,对指令进行译码,然后根据指令的功能控制 ALU、寄存器组和其他相关部件进行相应的操作,确保指令按照正确的顺序和方式执行。
4、指令集架构
支持 Thumb - 2 指令集,它融合了 16 位 Thumb 指令和 32 位 ARM 指令的优点。
Thumb - 2 指令集在保持代码紧凑性的同时,能够实现高效的处理性能,使 Cortex - M3 内核在代码密度和执行效率方面取得了较好的平衡。
5、嵌套向量中断控制器(NVIC)
集成在内核中的中断控制器,支持多个中断源,并为每个中断源分配优先级。
它可以快速响应外部中断请求,实现中断的嵌套处理,即在处理一个中断的过程中,可以响应更高优先级的中断,从而确保实时任务的及时处理。
6、系统控制块(SCB)
包含多个用于配置和控制处理器系统级功能的寄存器,如系统时钟控制寄存器、低功耗控制寄存器、异常屏蔽寄存器等。
通过对 SCB 中寄存器的设置,开发人员可以根据具体应用需求来优化系统的性能和功耗。
7、总线接口
提供了与外部存储器和外设进行连接的接口,包括指令总线接口和数据总线接口。
通过这些接口,内核可以从外部存储器读取指令和数据,并将处理结果写回到外部存储器或发送到外设,实现与外部设备的通信和数据交互。
8、调试系统
支持硬件断点、单步执行、实时跟踪等调试功能,为开发人员提供了方便的调试手段,有助于快速定位和解决程序中的错误,提高开发效率。
9、存储器保护单元(MPU)(部分型号支持)
用于对存储器进行分区管理和保护,可将存储器划分为不同的区域,并为每个区域设置不同的访问权限(如只读、读写、禁止访问等),防止程序对未授权的存储器区域进行非法访问,提高系统的稳定性和安全性。
三、ARM Cortex-M3内核的寄存器
ARM Cortex - M3 内核的寄存器在处理器的运行和控制中起着关键作用,以下是对其主要寄存器的介绍:
1、通用寄存器
(1)R0 - R7:低组通用寄存器,用于存储操作数、中间结果和函数参数等,在指令执行过程中频繁使用,可快速访问以提高运算速度。
(2)R8 - R15:高组通用寄存器。
① 其中 R8 - R11 在一些情况下可用于特定的功能或优化,
② R12 通常作为子程序内部的临时寄存器。
③ R13 作为堆栈指针(SP),指向当前堆栈的顶部,用于管理函数调用和局部变量的存储。
④ R14 为链接寄存器(LR),在函数调用时保存返回地址,以便函数执行完毕后能正确返回调用处继续执行。
⑤ R15 是程序计数器(PC),存储着当前正在执行的指令地址,它会自动更新指向下一条要执行的指令,控制程序的执行流程。
2、特殊功能寄存器
(1)程序状态寄存器(PSRs)
包括应用程序程序状态寄存器(APSR)、中断程序状态寄存器(IPSR)和执行程序状态寄存器(EPSR)。
① APSR 包含了条件标志位,如进位标志(C)、零标志(Z)、负数标志(N)和溢出标志(V),这些标志位反映了指令执行的结果,常用于条件判断和分支指令中。
② IPSR 用于指示当前正在处理的中断号。
③ EPSR 主要用于存储一些与指令执行相关的状态信息。
(2)中断屏蔽寄存器
包括 PRIMASK、FAULTMASK、BASEPRI,用于控制中断的屏蔽。
PRIMASK 用于屏蔽除了 NMI(不可屏蔽中断)之外的所有中断;FAULTMASK 用于在处理故障时屏蔽其他可屏蔽中断;BASEPRI 用于设置一个基本的优先级阈值,低于该阈值的中断将被屏蔽。
(3)系统控制寄存器(SCB 中的部分寄存器)
① 系统时钟控制寄存器,用于配置系统时钟的源、分频系数等,以满足不同应用对时钟频率的需求;
② 低功耗控制寄存器,可设置处理器进入不同的低功耗模式,如睡眠模式、停机模式等,实现节能目的。
3、调试相关寄存器
(1)调试控制寄存器
用于配置调试接口的工作模式、断点和观察点的使能等。例如,可通过该寄存器设置断点的类型(指令断点或数据断点)、断点地址等参数。
(2)异常跟踪寄存器
记录异常和中断的发生过程,包括异常的类型、进入异常的时间等信息,帮助开发人员分析系统在异常情况下的运行状态,便于调试和故障排除。
4、存储器保护单元(MPU)相关寄存器(部分型号支持)
(1)MPU 类型寄存器(MPU_TYPER)
用于描述 MPU 的特性,如支持的区域数量、每个区域的大小等信息。
(2)MPU 区域设置寄存器(MPU_RASR)
用于配置每个存储器区域的属性,包括区域的起始地址、大小、访问权限(如只读、读写、禁止访问)以及是否缓存等。通过对这些寄存器的设置,可以实现对不同存储器区域的保护和管理,提高系统的稳定性和安全性。
四、ARM Cortex-M3内核的存储结构
ARM Cortex - M3 内核的存储结构采用冯・诺依曼架构,将程序和数据存储在同一个地址空间中,主要包括以下几个部分:
1、代码区(Flash)
通常用于存储程序代码和常量数据,如指令、函数、全局常量等。它是只读存储器,掉电后数据不会丢失。
代码区的大小根据具体的芯片型号和应用需求有所不同,一般从几十 KB 到数 MB 不等。由于代码在执行过程中通常不会被修改,所以存储在 Flash 中可以保证程序的稳定性和可靠性。
2、数据区(SRAM)
用于存储程序运行时的变量、堆栈、中间结果等数据。它是随机存取存储器,读写速度快,但掉电后数据会丢失。
SRAM 的大小也因芯片而异,一般在几 KB 到几十 KB 之间。数据区分为多个段,包括全局变量区、静态变量区、堆区和栈区。
全局变量和静态变量在程序启动时被分配固定的存储空间,堆区用于动态内存分配,栈区则主要用于函数调用和局部变量的存储。
3、外设寄存器区
映射到特定的地址范围,用于与各种外设进行交互。通过访问这些寄存器,可以配置外设的工作模式、控制外设的运行状态以及读写外设的数据。
例如,定时器、串口、GPIO 等外设都有各自对应的寄存器,开发人员可以通过对这些寄存器的操作来实现对外设的控制和数据传输。
4、系统控制空间(SCS)
包含了一些用于系统控制和状态监测的寄存器,如中断控制寄存器、系统时钟控制寄存器、低功耗控制寄存器等。
这些寄存器用于配置和管理整个系统的运行,包括中断的使能和屏蔽、时钟的设置、低功耗模式的选择等,对系统的性能和功耗管理起着关键作用。
5、位带区(Bit - Band Region)
Cortex - M3 内核提供了位带区功能,将特定的内存区域(包括 SRAM 和外设寄存器区的一部分)映射到一个位带别名区。
通过位带别名区,可以对内存中的每一位进行单独的读写操作,就像操作一个单独的位变量一样,大大提高了对单个位进行操作的效率,方便了对寄存器位和标志位的控制。
例如,在对 GPIO 引脚进行控制时,可以直接通过位带操作来设置或清除某个引脚的状态,而无需进行复杂的寄存器位掩码操作。
五、ARM Cortex-M3内核的中断与异常
ARM Cortex - M3 内核的中断与异常是其重要的功能特性,用于处理各种外部事件和内部错误,以保证系统的实时响应和可靠性。以下是相关介绍:
(一)中断
1、中断类型
Cortex - M3 支持多种外部中断,这些中断可以来自外设,如定时器、串口、外部中断引脚等。每个中断都有对应的中断号,用于在中断发生时识别和区分不同的中断源。
2、中断优先级
通过嵌套向量中断控制器(NVIC)对中断进行管理,每个中断都可以被分配一个优先级。
优先级的设置可以是静态的,也可以在运行时动态调整。数值越小,优先级越高。
高优先级的中断可以打断正在执行的低优先级中断,实现中断的嵌套处理,从而确保重要的实时任务能够得到及时响应。
3、中断处理过程
当中断发生时,处理器会暂停当前正在执行的任务,保存当前的上下文环境(包括寄存器的值等)到堆栈中。
然后根据中断向量表找到对应的中断服务程序(ISR)入口地址,并跳转到该地址执行 ISR。在 ISR 执行完毕后,会恢复之前保存的上下文环境,继续执行被中断的任务。
(二)异常
1、异常类型
(1)复位异常
在系统上电启动或复位操作时发生,用于初始化系统,将处理器和相关硬件设置为初始状态,然后开始执行复位向量指向的代码,通常是系统的启动代码。
(2)NMI(不可屏蔽中断)
具有最高的优先级,用于处理极其重要的紧急事件,如电源故障、硬件错误等。NMI 不能被软件屏蔽,一旦发生,处理器会立即响应并执行相应的处理程序。
(3)硬 fault
当发生各种硬件错误,如指令执行错误、存储器访问错误、总线错误等情况时触发。硬 fault 的处理相对复杂,需要开发人员仔细分析错误原因并进行相应的处理,以避免系统崩溃。
(4)其他异常
还包括内存管理 fault、总线 fault、用法 fault 等,分别对应不同类型的错误情况,为开发人员提供了详细的错误诊断信息,有助于定位和解决系统中的问题。
2、异常处理过程
与中断处理类似,异常发生时,处理器会保存当前上下文,根据异常向量表跳转到相应的异常处理程序执行。不同的异常具有不同的优先级和处理要求,例如硬 fault 通常需要进行紧急处理,以防止系统出现严重故障。
(三)中断与异常的协同工作
中断和异常在 Cortex - M3 内核中协同工作,共同构成了系统的事件处理机制。
中断主要用于处理外部异步事件,而异常则侧重于处理内部的错误和特殊情况。当多个中断和异常同时发生时,处理器会根据它们的优先级进行仲裁,优先处理优先级高的事件。
通过这种方式,Cortex - M3 内核能够快速响应各种外部和内部事件,保证系统的稳定性和实时性。
以上即为 ARM Cortex-M3内核详解 的全部内容,创作不易,麻烦三连支持一下呗~
相关文章:

ARM Cortex-M3内核详解
目录 一、ARM Cortex-M3内核基本介绍 (一)基本介绍 (二)主要组成部分 (三)调试系统 二、ARM Cortex-M3内核的内核架构 三、ARM Cortex-M3内核的寄存器 四、ARM Cortex-M3内核的存储结构 五、ARM Co…...
基于Unity的简单2D游戏开发
基于Unity的简单2D游戏开发 摘要 本文围绕基于Unity的简单2D游戏开发进行深入探讨,旨在分析其开发过程中的技术架构与实现策略。通过文献综述与市场分析,研究发现,近年来Unity引擎因其优秀的跨平台特性及可视化编程理念,成为2D游戏开发的主要工具。文章首先梳理了游戏开发的…...
Linux系统编程——exec族函数
我们来完整、系统、通俗地讲解 Linux 系统编程中非常重要的一类函数:exec 族函数(也叫 exec family)。 一、什么是 exec? exec 系列函数的作用是: 用一个新的程序,替换当前进程的内容。 也就是说…...

ThinkStation图形工作站进入BIOS方法
首先视频线需要接在独立显卡上,重新开机,持续按F1,或者显示器出来lenovo的logo的时候按F1,这样就进到bios里了。联*想*坑,戴尔贵。靠。...

go 集成base64Captcha 支持多种验证码
base64Captcha 是一个基于 Go 语言开发的验证码生成库,主要用于在 Web 应用中集成验证码功能,以增强系统的安全性。以下是其主要特点和简介: base64Captcha主要功能 验证码类型丰富:支持生成多种类型的验证码,包括纯…...

【C语言字符函数和字符串函数(一)】--字符分类函数,字符转换函数,strlen,strcpy,strcat函数的使用和模拟实现
目录 一.字符分类函数 1.1--字符分类函数的理解 1.2--字符分类函数的使用 二.字符转换函数 2.1--字符转换函数的理解 2.2--字符转换函数的使用 三.strlen的使用和模拟实现 3.1--strlen的使用演示 3.2--strlen的返回值 3.3--strlen的模拟实现 四.strcpy的使用和模拟实现…...
deepseek问答记录:请讲解一下hugingface transformers中的AutoProcessor
Hugging Face Transformers库中的AutoProcessor是一个用于自动加载与预训练模型配套的处理器的工具类。它简化了预处理流程,特别适用于多模态模型(如同时处理文本、图像、音频的模型)。以下是详细讲解: 1. AutoProcessor的功能 •…...

大模型基础之量化
概述 量化,Quantization,机器学习和深度学习领域是一种用于降低计算复杂度、减少内存占用、加速推理的优化方法。定义:将模型中的数据从高精度表示转换为低精度表示。主要目的是为了减少模型的存储需求和计算复杂度,同时尽量减少…...

游戏引擎学习第286天:开始解耦实体行为
回顾并为今天的内容定下基调 我们目前正在进入实体系统的一个新阶段,之前我们已经让实体的移动系统变得更加灵活,现在我们想把这个思路继续延伸到实体系统的更深层次。今天的重点,是重新审视我们处理实体类型(entity type&#x…...

win10-django项目与mysql的基本增删改查
以下都是在win10系统下,django项目的orm框架对本地mysql的表的操作 models.py----->即表对应的类所在的位置 在表里新增数据 1.引入表对应的在models.py中的类class 2.在views.py中使用函数:类名.objects.create(字段名值,字段名"值"。。。…...
Windows 本地部署MinerU详细教程
📖 项目概述 MinerU是一款由OpenDataLab开发的开源PDF转Markdown工具,可以高质量地提取PDF文档内容,生成结构化的Markdown格式文本。本指南将帮助您在本地部署并使用MinerU。 ⭐ 功能特性 MinerU具有以下核心功能: ✨ 文档处理…...

动态范围调整(SEF算法实现)
一、背景介绍 继续在整理对比度调整相关算法,发现一篇单帧动态范围提升的算法:Simulated Exposure Fusion,论文表现看起来很秀,这里尝试对它进行了下效果复现。 二、实现流程 1、基本原理 整体来说,大致可以分为两步…...

SpringCloud微服务开发与实战
本节内容带你认识什么是微服务的特点,微服务的拆分,会使用Nacos实现服务治理,会使用OpenFeign实现远程调用(通过黑马商城来带你了解实际开发中微服务项目) 前言:从谷歌搜索指数来看,国内从自201…...

WAS和Tomcat的对比
一、WAS和Tomcat的对比 WebSphere Application Server (WAS) 和 Apache Tomcat 是两款常用的 Java 应用服务器,但它们有许多显著的区别。在企业级应用中,它们扮演不同的角色,各自有其特点和适用场景。以下是它们在多个维度上的详细对比&…...
Rust 数据结构:String
Rust 数据结构:String Rust 数据结构:String什么是字符串?创建新字符串更新字符串将 push_str 和 push 附加到 String 对象后使用 运算符和 format! 宏 索引到字符串字符串在内存中的表示字节、标量值和字形簇 分割字符串遍历字符串的方法 R…...

IntelliJ IDEA打开项目后,目录和文件都不显示,只显示pom.xml,怎样可以再显示出来?
检查.idea文件夹 如果项目目录中缺少.idea文件夹,可能导致项目结构无法正确加载。可以尝试删除项目根目录下的.idea文件夹,然后重新打开项目,IDEA会自动生成新的.idea文件夹和相关配置文件,从而恢复项目结构。 问题解决࿰…...

Hot100-链表-JS
160.相交链表 160. 相交链表 已解答 简单 相关标签 相关企业 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整…...

事件驱动架构:从传统服务到实时响应的IT新风潮
文章目录 事件驱动架构的本质:从请求到事件的范式转变在EDA中: 事件驱动架构的演进:从消息队列到云原生标配核心技术:事件驱动架构的基石与工具链1. 消息队列:事件传递的枢纽2. 消费者:异步处理3. 事件总线…...

网络流量分析 | NetworkMiner
介绍 NetworkMiner 是一款适用于Windows(也适用于Linux/Mac)的开源网络取证分析工具。它可被用作被动网络嗅探器/数据包捕获工具,也可被用于检测操作系统、会话、主机名、开放端口等,还能被用于解析pcap文件进行离线分析。点击此…...
弦理论的额外维度指的是什么,宇宙中有何依据
弦理论中的额外维度是解释微观世界与宏观宇宙矛盾的关键假设之一。它们并非科幻中的平行宇宙,而是通过严谨的数学框架提出,并可能留下可观测的宇宙学痕迹。以下是具体解析: 一、弦理论为何需要额外维度? 数学自洽性要求 弦理论中…...
std::tuple 用法
std::tuple 是 C11 引入的模板类,用来存储多个不同类型的值,类似于 Python 的元组。你可以把它看作是一种“组合多个变量在一个对象中”的方式。 ✅ 基本用法 #include <tuple> #include <iostream>int main() {std::tuple<int, std::st…...

深入理解 Git 分支操作的底层原理
在软件开发的世界里,Git 已经成为了版本控制的标配工具。而 Git 分支功能,更是极大地提升了团队协作和项目开发的效率。我们在日常开发中频繁地创建、切换和合并分支,但是这些操作背后的底层原理是怎样的呢?在之前的博客探秘Git底…...

Excel MCP: 自动读取、提炼、分析Excel数据并生成可视化图表和分析报告
最近,一款Excel MCP Server的开源工具火了,看起来功能很强大,咱们今天来一探究竟。 基础环境 最近两年,大家都可以看到AI的发展有多快,我国超10亿参数的大模型,在短短一年之内,已经超过了100个&…...

C语言:深入理解指针(4)
目录 一、字符指针变量 二、数组指针变量 三、二维数组传参的本质 四、函数指针变量 五、typedef 类型重命名 六、函数指针数组 一、字符指针变量 我们常见的字符指针变量是这样的: char a w; char* p &a; char arr[] "abcd"; char* pa ar…...
Gensim 是一个专为 Python 设计的开源库
Gensim 是一个专为 Python 设计的开源库,其核心代码和生态系统均基于 Python 构建,目前官方仅支持 Python 语言。如果你需要在其他编程语言中实现类似功能(如词向量训练、主题模型等),通常需要使用对应语言的替代库或通…...
质量管理工程师面试总结
今天闲着无聊参加了学校招聘会的一家双选会企业,以下是面试的过程。 此次面试采用的是一对多的形式。(此次三个求职者,一个面试官) 面试官:开始你们每个人先做个自我介绍吧。 哈哈哈哈哈哈哈哈,其实我们…...
python 爬虫框架介绍
文章目录 前言一、Requests BeautifulSoup(基础组合)二、Scrapy(高级框架)三、PySpider(可视化爬虫)四、Selenium(浏览器自动化)五、Playwright(新一代浏览器自动化&…...
window 显示驱动开发-使用有保证的协定 DMA 缓冲区模型
Windows Vista 的显示驱动程序模型保证呈现设备的 DMA 缓冲区和修补程序位置列表的大小。 修补程序位置列表包含 DMA 缓冲区中命令引用的资源的物理内存地址。 在有保证的协定模式下,用户模式显示驱动程序知道 DMA 缓冲区和修补程序位置列表的确切大小,…...
蓝牙协议架构与调试工具详解(含 BLE、HCI 命令、调试命令)
本文介绍蓝牙协议从物理层到应用层的完整通信流程,并详解了 Linux 下主流蓝牙调试工具的使用方法,适用于嵌入式蓝牙驱动开发、BLE调试、通信协议分析等场景。 🔧 1. 蓝牙架构概览 ✅ 芯片架构 单模芯片:仅支持 BLE 或 Classic 蓝…...
预测模型开发与评估:基于机器学习的数据分析实践
在当今数据驱动的时代,预测模型已成为各行各业决策制定的核心工具。本文将分享我在COMP5310课程项目中开发预测模型的经验,探讨从数据清洗到模型优化的完整过程,并提供详细的技术实现代码。 ## 研究问题与数据集 ### 研究问题 我们的研究聚焦…...