- 博客(45)
- 收藏
- 关注
原创 STM32F407 的通用定时器与串口配置深度解析
在TIM3_IRQHandler函数中,通过TIM_GetITStatus(TIM3,TIM_IT_Update)==SET检测是否发生更新中断事件。若发生,进行相应处理,如示例中每 1000 次中断(即 1 秒)通过串口发送 "hello\r\n" 字符串,并使用TIM_ClearITPendingBit(TIM3, TIM_IT_Update);清空中断标志位,告知 CPU 中断已处理完毕。
2025-04-23 20:52:48
1050
原创 STM32 中断系统深度剖析
中断是指当 CPU 执行程序时,由于外部或内部随机事件的发生,导致 CPU 暂时停止正在运行的程序,转而执行一段特殊的服务程序(中断服务子程序或中断处理程序)。待事件处理完毕后,CPU 再返回被中断的程序继续执行,引发中断的事件源被称为中断源。STM32 的中断功能极为强大,每个外设都具备产生中断的能力。其中,可屏蔽中断通道多达 82 个(外部),系统异常有 10 个,并且拥有 16 个可编程优先级(使用 4 位中断优先级)。除个别异常优先级固定外,其他异常优先级均可编程。在标准库文件的。
2025-04-22 21:00:32
1342
原创 GPIO(通用输入输出端口)详细介绍
GPIO(General - Purpose Input/Output)即通用输入输出端口,是微控制器(如 STM32 系列)中非常重要的一个外设。它是一种软件可编程的引脚,用户能够通过编程来控制这些引脚的输入或输出状态。在嵌入式系统里,GPIO 引脚如同微控制器与外部世界沟通的桥梁,可连接各种外部设备,像按键、LED 灯、传感器等。
2025-04-22 20:40:02
2571
原创 LinuxTCP/UDP基础概念
TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。:在传输数据之前,需要通过“三次握手”建立连接;传输结束后,通过“四次挥手”断开连接。:使用确认机制、重传机制和滑动窗口机制等确保数据无差错、不丢失、不重复且按序到达。:允许通信双方在同一时刻互相发送和接收数据。
2025-03-30 21:21:37
769
原创 C语言:多线程
多线程是指在一个程序中可以同时运行多个不同的执行路径(线程),这些线程可以并发或并行执行。并发是指多个线程在宏观上同时执行,但在微观上可能是交替执行的;并行则是指多个线程真正地同时执行,通常需要多核处理器的支持。
2025-03-30 20:53:22
1299
原创 线程同步与互斥
在C语言中,线程的互斥与同步是多线程编程中的重要概念,用于处理多个线程对共享资源的访问问题,以避免数据竞争和不一致的情况。下面将详细介绍这两个概念以及相关的实现方法。
2025-03-30 20:46:00
400
原创 C++异常处理机制
在 C++ 中,异常处理机制是一种用于处理程序运行时出现的错误或异常情况的手段,它可以将错误处理代码与正常的业务逻辑代码分离,提高代码的可读性和可维护性。在 C++11 之前,可以使用异常规范来指定函数可能抛出的异常类型。块的顺序很重要,通常将派生类的异常捕获放在前面,基类的异常捕获放在后面。语句重新抛出当前捕获的异常,以便将异常传递给更上层的调用者进行处理。,则该函数不会抛出异常,否则编译器会在函数抛出异常时进行相应的处理。块中,当异常抛出时,程序会跳转到与之匹配的。:用于包含可能抛出异常的代码。
2025-03-07 14:16:49
315
原创 C++:命名空间
在 C++ 中,命名空间(Namespace)是一种将全局作用域划分为不同部分的机制,它可以用来避免命名冲突,提高代码的可维护性和可扩展性。指令可以引入整个命名空间,之后可以直接使用该命名空间中的所有成员,而无需再使用作用域解析运算符。匿名命名空间是一种特殊的命名空间,它没有名称,其成员只在定义该命名空间的文件内可见,相当于为该文件提供了内部链接,类似于使用。声明可以在当前作用域中引入命名空间的某个特定成员,之后可以直接使用该成员,而无需再使用作用域解析运算符。的命名空间,其中包含一个整型变量。
2025-03-07 14:10:21
577
原创 线程介绍~
线程是轻量级的进程,它们共享进程的资源,如内存空间、文件描述符等,但拥有自己独立的执行栈和程序计数器。使用 POSIX 线程可以实现多线程编程,从而提高程序的并发性能,充分利用多核处理器的计算能力。函数是线程的执行体,在该函数中,每个线程对共享变量进行 100000 次加 1 操作,每次操作前后分别进行加锁和解锁操作。函数中,首先初始化互斥锁,然后创建两个线程,等待它们结束,最后销毁互斥锁并输出共享变量的值。:加锁操作,若互斥锁已被其他线程锁定,则当前线程会阻塞。:线程的返回值,可被其他线程通过。
2025-03-05 11:40:08
342
原创 进程基本介绍
在操作系统领域,进程是程序在操作系统内的一次动态执行过程,它是系统进行资源分配和调度的基本单元。当我们启动一个程序时,操作系统会为其创建一个或多个进程,每个进程都有自己独立的内存空间、系统资源以及执行状态。:它是操作系统管理进程的关键数据结构,记录了进程的各种信息,像进程状态、优先级、程序计数器、寄存器值等,操作系统依据 PCB 对进程进行跟踪和控制。在不同的操作系统中,进程创建的方式有所不同。函数创建一个无名管道,子进程向管道写数据,父进程从管道读数据,通过关闭不需要的管道端来确保数据的正确传输。
2025-02-24 09:00:21
940
原创 系统IO及代码实例
Linux 系统中,I/O(Input/Output)操作是实现计算机与外部设备(如磁盘、键盘、显示器、网络等)之间数据传输的基础。下面将详细介绍 Linux 系统的 I/O 类型、常用的 I/O 函数,并给出相应的代码实例。
2025-02-24 08:52:33
666
原创 Makefile介绍
Makefile 是一个用于控制编译过程的文件,最常用于编译 C 和 C++ 程序。Makefile 包含了一系列的规则,每个规则定义了如何生成一个目标文件(通常是可执行文件或对象文件)。Make 工具会读取 Makefile 并根据规则自动执行相应的命令,从而简化和自动化编译过程。Makefile 是一个强大的工具,可以显著简化和自动化编译过程。通过合理定义变量、目标规则和特殊目标,可以轻松管理复杂的多文件项目系统。
2025-01-03 17:05:27
411
原创 项目:停车场车辆管理系统
该程序通过菜单驱动的方式,提供了对车辆信息的多种管理功能。使用单链表存储数据,确保了数据的动态性。通过文件操作,实现了数据的持久化存储。排序功能通过创建临时链表进行,避免直接修改原始数据。整体结构清晰,功能完善,适合小型车辆管理系统使用。
2025-01-03 16:56:51
746
原创 数据结构:循环单链表
循环单链表通过维护尾节点指向头节点的指针,形成一个闭环结构,提供了无缝遍历和高效插入删除操作的能力。虽然在内存消耗和实现复杂度上较低,但在需要频繁插入和删除操作,并需要无缝遍历的场景中,循环单链表具有很大的优势。
2025-01-03 16:29:37
851
原创 数据结构:双向循环链表
双向循环链表通过维护前驱和后继指针,并形成闭环结构,提供了双向遍历和高效插入删除操作的能力。虽然在内存消耗和实现复杂度上有所增加,但在需要频繁插入和删除操作,并需要无缝遍历的场景中,双向循环链表是一个非常有用的数据结构。它在许多实际应用中具有独特的优势。
2025-01-03 16:17:49
1334
原创 数据结构:双向链表
双向链表通过维护前驱和后继指针,提供了双向遍历和高效插入删除操作的能力。虽然在内存消耗和实现复杂度上有所增加,但在需要频繁插入和删除操作的场景中,双向链表是一个非常有用的数据结构。
2025-01-03 16:15:28
622
原创 数据结构:树
树是一种非常重要的数据结构,具有层次性和递归性,广泛应用于各种算法和系统中。理解树的基本概念、分类、遍历方法以及操作,对于深入学习计算机科学和解决实际问题具有重要意义。
2025-01-03 16:12:45
1218
原创 数据结构:栈
Push(压栈):将元素添加到栈的顶部。Pop(出栈):从栈的顶部移除元素。Peek(或 Top):查看栈顶的元素,但不移除它。IsEmpty(判空):检查栈是否为空。IsFull(判满):检查栈是否已满(如果栈的大小有限)。栈是一种简单但强大的数据结构,遵循LIFO原则,适合处理需要后进先出的场景。栈的基本操作包括压栈、出栈、查看栈顶和判断栈空/满。栈可以通过数组或链表实现,数组实现适合小规模数据处理,链表实现适合动态调整大小。栈在函数调用、括号匹配、表达式计算等场景中有广泛的应用。
2024-12-25 15:34:55
850
原创 数据结构:链表
链表是一种常见的数据结构,它由一系列节点(Node)组成,每个节点包含两个部分:数据域和指针域。数据域用于存储数据元素的值,而指针域则用于指向链表中的下一个节点。这种结构使得链表能够动态地进行插入和删除操作,具有较高的灵活性。:链表的大小可以在运行时动态地增长或缩小,不需要预先分配固定大小的空间。:在已知某一节点位置的情况下,链表的插入和删除操作可以在常数时间内完成,无需像数组那样移动大量元素。:链表中的元素是顺序访问的,从头节点开始,依次访问到尾节点。
2024-12-25 15:30:53
640
原创 数据结构概念介绍
数据结构是计算机科学中一个重要的基础概念,它指的是数据在计算机中的组织和存储方式,以及相关的操作和算法。数据结构的设计和选择直接影响到程序的效率和可维护性。以下是数据结构的一些基本概念和常见类型,以及它们的特点和应用。
2024-12-23 14:13:40
1260
原创 数据结构:顺序表
define MAXSIZE 100 // 顺序表的最大容量// 存储数据的数组int length;// 当前长度} SeqList;在这个定义中,data数组用于存储顺序表中的元素,length表示当前顺序表中实际存储的元素个数。
2024-12-23 13:57:46
792
原创 Git使用步骤
Git 是一个分布式版本控制系统,广泛用于软件开发和其他需要跟踪文件变更的项目。以下是 Git 的基本使用方法和一些常用命令的详细说明。在大多数操作系统上,你可以通过包管理器安装 Git:在项目目录中初始化一个新的 Git 仓库:配置 Git首次使用 Git 时,需要配置用户信息:添加文件到仓库将文件添加到 Git 的暂存区:添加所有文件:提交更改将暂存区的文件提交到仓库:查看状态查看当前工作目录的状态:查看提交历史查看提交历史记录:查看简洁的提
2024-12-19 09:43:06
893
原创 C语言:预处理
define命令用于定义宏,宏是在预处理阶段进行文本替换的代码片段。宏可以是简单的常量定义,也可以是带参数的宏函数。在代码中,所有出现PI的地方都会被替换为。预处理器定义了一些有用的宏,如__FILE____LINE____DATE____TIME__等,可以在代码中使用。预处理是C语言编译过程中的一个重要阶段,通过使用#include#define、条件编译等命令,可以增强代码的灵活性和可维护性。正确理解和使用预处理功能,对于编写高效、可读性好的C代码至关重要。
2024-12-19 09:29:04
481
原创 C语言:排序
算法时间复杂度空间复杂度稳定性特点插入排序O(n^2)O(1)稳定适合小规模数据或部分有序数据选择排序O(n^2)O(1)不稳定简单直观,适用于小规模数据快速排序O(n log n)O(log n)不稳定高效,适用于大规模数据冒泡排序O(n^2)O(1)稳定简单易于理解。
2024-12-18 10:50:35
2145
原创 C语言:文件I\O
C 语言的文件 I/O 功能强大,通过标准库提供的函数,可以方便地进行文件的读写操作。正确地打开、读写和关闭文件,以及处理文件错误,是编写健壮程序的重要部分。通过理解文件指针、打开模式和各种文件操作函数,你可以有效地进行文件处理。
2024-12-17 19:08:01
713
原创 C语言:枚举
枚举类型的定义使用enumenum 枚举类型名 {枚举常量1,枚举常量2,...枚举常量N枚举类型名:这是枚举类型的名称,可以省略,但通常建议命名以提高代码的可读性。枚举常量:这些是枚举类型的成员,它们是命名的整数常量。枚举类型在C语言中是一种非常有用的工具,它可以帮助开发者更好地组织代码,提高代码的可读性和可维护性。通过枚举,开发者可以清晰地表示一组相关的常量,并在代码中安全地使用它们。
2024-12-17 09:28:50
364
原创 Datagrip使用教程
通过本教程,可以了解到如何安装和配置 Datagrip,连接数据库,编写和执行 SQL 查询,编辑和管理数据,以及使用 Datagrip 的一些高级功能。Datagrip 是一个功能强大的数据库 IDE,能够更高效地管理和操作数据库。
2024-12-16 09:06:17
5874
原创 结构体介绍
通过掌握结构体的声明与定义、初始化、成员的访问与修改以及结构体数组与指针等知识点我们可以更有效地利用结构体来编写复杂且高效的C语言程序。访问结构体成员时,需要使用点运算符(.)或箭头运算符(->),具体取决于访问的是结构体变量还是结构体指针。结构体(Struct)是C语言中一种重要的复合数据类型,它允许将不同类型的数据组合成一个单一的类型,以便于更有效地管理和操作这些数据。在声明结构体变量时,可以为其成员赋予初始值,这称为结构体的初始化。结构体指针则是指向结构体变量的指针,可以用来访问或修改结构体的成员。
2024-12-16 08:53:37
533
原创 C语言基础总结
C语言提供了丰富的运算符,包括 arithmetic、 relational、 logical 和 assignment 等。通过本教程,可以了解了C语言的基础概念,包括变量、数据类型、运算符、控制结构、数组、指针、函数和结构体等。C语言提供了处理文件输入输出的函数,如fopen、fclose、fprintf、fscanf等。函数是组织好的、可重复使用的代码块,用于实现单一或相关联的功能。:=、+=、-=、*=、/=、%=等。:根据变量的值选择执行不同的代码块。:+、-、*、/、%(取模)。
2024-12-16 08:46:36
733
原创 C语言:字符指针
字符指针和指针字符在C语言中通常指的是同一种东西:指向char类型的指针。它们可以用于指向单个字符变量或字符串。通过指针可以访问和修改所指向的字符数据。在处理字符串时,指针特别有用,可以方便地进行字符串操作和遍历。
2024-12-10 17:38:55
583
原创 学生成绩管理系统-C语言
设计学生成绩管理系统,能够完成以下功能:输入学生的姓名和成绩。显示所有学生的成绩。计算并显示所有学生的平均成绩。查找并显示成绩最高的学生。实现思路使用结构体来表示学生信息(姓名和成绩)。使用一维数组来存储多个学生的信息。通过函数实现各个功能模块。结构体定义: 用于存储学生的姓名和成绩。输入学生数据: 函数用于输入学生的姓名和成绩,并将其存储在数组中。显示所有学生数据: 函数用于显示所有学生的姓名和成绩。计算平均成绩: 函数用于计算并返回所有学生的平均成绩。查找成绩最高的学生: 函数用于查找并显示成绩最
2024-12-08 14:48:20
461
原创 C语言:函数
函数调用:通过函数调用可以实现代码的复用和模块化。函数可以接受参数,执行特定任务,并返回结果。函数的声明和定义通常分开,以提高代码的可读性和可维护性。函数递归:递归函数通过调用自身来解决问题,适用于可以分解为子问题的情况。递归函数必须有一个或多个基本情况,以防止无限递归。递归可以提高代码的简洁性和可读性,但过度使用可能导致栈溢出。
2024-12-08 14:26:23
415
原创 C语言:数组
C语言中的数组是一种用来存储多个相同类型数据的数据结构。数组提供了一种方便的方式来管理和访问大量数据。数组可以是单一维度的(一维数组),也可以是多维的(如二维数组),甚至可以是字符类型的数组(字符数组)。
2024-12-08 14:23:49
306
原创 10个C语言基础面试题
指针是一个变量,它存储的是另一个变量的内存地址。指针的优势在于它提供了直接访问和操作内存的能力,从而提高了程序的灵活性和效率。局部变量是在函数或代码块内部定义的变量,其作用域仅限于该函数或代码块。关键字用于告诉编译器,某个变量的值可能在程序的控制之外被修改,例如由硬件、信号或其他线程修改。关键字声明的变量,它的生命周期是整个程序的运行期间,但其作用域仍然是局部的。函数也用于分配内存,但它会将分配的内存初始化为零,并且它接受两个参数:元素的数量和每个元素的大小。宏可以是基本的文本替换,也可以是带参数的宏。
2024-11-25 14:02:18
553
原创 Vim编辑器
Vim(Vi IMproved)是一款功能强大的文本编辑器,广泛用于Unix和Linux系统。它是Vi编辑器的增强版本,提供了更多功能和改进的用户界面。Vim有两种基本模式:命令模式和插入模式。在命令模式下,你可以使用各种命令来操作文本;在插入模式下,你可以直接编辑文本。
2024-11-22 11:58:03
382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人