C/C++
文章平均质量分 71
分享C/C++编程相关的技术
麻辣长颈鹿0v0
牛顿早生百年,只为避我锋芒
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
冒泡排序和插入排序算法详解及实现(内附代码及注释)
本文介绍了插入排序算法的工作原理及实现。插入排序通过构建有序序列,将未排序元素逐个插入到已排序部分的适当位置,实现方式类似于整理扑克牌。其时间复杂度最好为O(n),最差为O(n²),空间复杂度为O(1),是一种稳定的原地排序算法。相比冒泡排序,插入排序在实际应用中效率更高,特别适合资源受限的嵌入式系统。文中提供了C语言实现的完整代码,包含插入排序和冒泡排序两种实现方式,并详细注释了算法流程。原创 2025-11-20 19:10:32 · 479 阅读 · 0 评论 -
改进版快速排序算法详解及实现(内附完整代码及注释)
本文介绍了快速排序算法的C++实现,重点讲解了其分治思想和三数取中优化方法。文章阐述了算法的核心流程:选取基准值、左右双指针遍历、分区交换和递归处理。针对不同场景给出了使用建议,指出在嵌入式系统需考虑内存限制(推荐SRAM≥32KB)。提供了完整代码实现,包含三数取中函数、递归排序逻辑和正/逆序支持,并建议小数据量时可简化基准值选取以提高效率。最后通过测试案例验证了算法正确性。原创 2025-11-14 17:29:43 · 542 阅读 · 0 评论 -
单片机中的机器周期、指令周期、总线周期的联系和区别
本文系统解析了计算机系统中的三种关键周期概念:总线周期、机器周期和指令周期。总线周期是CPU与存储器进行一次数据交换的最小时间单位;机器周期包含多个总线周期,对应指令执行的一个基本阶段(如取指、译码);指令周期则包含若干机器周期,是完成整条指令的时间。三者呈层级包含关系(指令周期≥机器周期≥总线周期),其中现代架构通过流水线和单周期指令技术已模糊了这种严格划分。文章通过厨房运作的类比,生动阐释了这些抽象概念的实际意义与相互关系。原创 2025-10-22 21:19:00 · 897 阅读 · 0 评论 -
软件模拟SPI通信详解(内附完整代码及注释)
摘要: 本文详细介绍了SPI通信协议及其应用。SPI是一种高速同步串行接口,包含CLK、CS、MOSI和MISO四线制。文章重点解析了时钟极性(CPOL)和相位(CPHA)参数,通过时序图说明数据采样过程。针对CPOL=0、CPHA=1的从机设备,提供了完整的软件模拟SPI实现方案,包含C语言和面向对象的C++版本代码。其中C++版本采用继承方式实现多设备支持,包含管脚初始化、时钟控制、数据收发等核心功能。两种实现均采用高位先发的MSB传输方式,通过精确的时序控制实现SPI通信功能。原创 2025-10-22 20:51:18 · 1520 阅读 · 0 评论 -
【CS32L015C8T6】SPI详解及硬件SPI配置方法(内附完整代码及注释)
本文介绍了在CS32L015C8T6单片机上开发SPI通信的实践经验。作者针对该芯片资料匮乏、官方驱动不适用等问题,详细讲解了SPI协议原理、时序特点及硬件实现机制。文章重点分析了CS32L015的SPI硬件资源,包括双SPI接口、12Mbps速率和CRC校验功能,并提供了完整的初始化代码和GPIO配置方法。通过对比三个核心通信函数(发送、接收、收发)的工作原理,深入解析了SPI基于移位寄存器的数据交换本质。本文旨在为开发者提供实用参考,减少重复开发工作。原创 2025-09-24 10:16:57 · 1220 阅读 · 1 评论 -
【CS32L015C8T6】UART串口通信详解及驱动配置方法(内附完整代码及注释)
本文介绍了CS32L015C8T6单片机的UART串口通信配置方法。首先对比了串行通信和并行通信的特点,重点讲解了UART串口协议的基本原理和连接方式。针对CS32L015C8T6芯片,详细说明了其串口硬件资源,包括4个通用串口和1个低功耗串口的区别。文章提供了完整的串口配置流程:GPIO复用初始化、UART参数设置、中断配置及回调函数实现,并附有详细的代码注释。特别指出该芯片特有的"BaudDouble"参数的作用,虽然能支持更高波特率但不会改变实际配置波特率。最后给出了UART数据收原创 2025-09-24 10:07:37 · 795 阅读 · 0 评论 -
【CS32L015C8T6】GPIO驱动配置方法(内附完整代码及注释)
本文介绍了芯海CS32L015C8T6单片机的GPIO配置方法。该芯片具有4个GPIO端口(A-D),每个端口最多8个复用功能。文章详细说明了GPIO配置的特殊参数(如硬件消抖功能),并提供了完整的初始化代码示例,包括中断模式、SWD下载端口、输入/输出模式的配置方法。作者分享了在实际开发中总结的经验,旨在帮助开发者减少重复工作。代码示例包含详细注释,展示了GPIO模式设置、中断配置、时钟使能等关键操作。原创 2025-09-19 16:42:32 · 341 阅读 · 0 评论 -
【CS32L015C8T6】ADC驱动配置方法(内附完整代码及注释)
本文介绍了芯海CS32L015C8T6单片机的ADC配置方法。该MCU采用12位精度ADC,具有17个外部和5个内部输入通道,但缺乏DMA功能。文章详细阐述了配置流程:1)设置GPIO模拟输入功能;2)配置ADC参数(包括自动累加功能);3)实现中断处理。重点讲解了ADC单通道中断回调函数的实现方法,并提供了完整代码示例。作者分享了实际开发中的经验,指出官方驱动代码的不足,帮助开发者避免重复造轮子。适用于需要低成本ADC解决方案的嵌入式开发场景。原创 2025-09-19 14:57:06 · 1076 阅读 · 2 评论 -
【CS32L015C8T6】下载Hex文件配置及异常现象解决方法
本文介绍了CS32L015C8T6单片机在Keil环境下的下载配置方法及常见问题解决方案。主要内容包括:1)选择正确的下载器和Cortex-M0+内核;2)处理地址映射错误提示;3)通过Debug-Setting界面重新配置Flash下载算法;4)添加64KB Flash下载算法后成功下载Hex文件。文章提供了基于芯海官方HAL库开发的实用技巧,适用于开发过程中遇到的下载异常情况。原创 2025-09-10 20:02:51 · 489 阅读 · 0 评论 -
【CS32L015C8T6】内部FLASH读写方法(内附完整代码及注释)
本文介绍了芯海CS32L015C8T6单片机内部FLASH操作方法。该芯片具有64KB FLASH(128个512B扇区)和8KB SRAM,文章详细讲解了FLASH地址定义差异,并提供了基于HAL库的读写函数代码:写入函数包含解锁、擦除(以扇区为单位)、编程(双字写入)和上锁流程;读取函数采用memcpy实现数据复制。文末附有完整代码注释,并提示需要官方支持库可联系作者或芯海官方。原创 2025-09-10 19:52:10 · 550 阅读 · 0 评论 -
【CS32L015C8T6】配置单片机PWM输出(内附完整代码及注释)
摘要:本文介绍了CS32L015微控制器的PWM配置方法。CS32L015是一款基于ARM Cortex-M0+内核的低功耗MCU,内置丰富外设资源,包含多个定时器模块。文章详细说明了其PWM硬件资源,包括3个16位高级定时器、4个通用定时器等。重点描述了PWM配置步骤:1)使能时钟;2)初始化GPIO复用功能;3)配置定时器参数;4)设置PWM模式。最后提供了完整的代码实现,包括定时器初始化、PWM通道配置等关键函数,并附有详细注释,可作为开发参考。原创 2025-09-04 20:00:39 · 556 阅读 · 0 评论 -
【CS32L015C8T6】使用 通用定时器 配置单片机时基TimeBase(内附完整代码及注释)
本文介绍了CS32L015微控制器的时基(TimeBase)和SysTick系统滴答的概念、联系与区别。时基作为系统时间基准可由SysTick或通用定时器实现,常用于延时、任务调度等功能。文章详细讲解了通过CS32L015的基本定时器配置系统时基的步骤,包括时钟使能、定时器选择、结构体初始化、中断优先级设置等关键环节,并提供了完整的配置代码示例。该配置可实现软件定时器扩展功能,适用于嵌入式系统开发。原创 2025-09-04 19:53:57 · 926 阅读 · 0 评论 -
【C++】使用中值滤波算法过滤数据样本中的尖刺噪声
本文介绍了中值滤波的基本原理、优劣分析和应用领域。中值滤波通过滑动窗口排序取中值的方式有效去除椒盐噪声并保留边缘信息,在图像处理和数据滤波中应用广泛。文章详细阐述了算法实现步骤,包括窗口定义、邻域像素收集、排序取中值等核心流程,并提供了C语言实现代码。同时分析了中值滤波的局限性,如对高斯噪声效果不佳、窗口过大导致模糊等问题。最后列举了其在医学影像、卫星遥感、工业检测等领域的典型应用场景。原创 2025-07-24 22:21:25 · 629 阅读 · 0 评论 -
【Keil】C/C++混合编程的简单方法
本文介绍了在Keil开发环境下实现C与C++混合编程的方法。主要内容包括:1)在.c文件中调用C++代码的步骤:在.cpp文件中定义C风格接口函数,在其中调用C++类方法,并在main.c中声明调用;2)在.cpp文件中调用C代码的方法:使用extern "C"声明C函数。文章通过具体代码示例展示了如何解决两种语言因编译规则差异导致的调用问题,帮助开发者在保持C语言高效性的同时,利用C++面向对象特性增强功能。适用于嵌入式开发中需要融合两种语言优势的场景。原创 2025-07-15 22:20:11 · 1444 阅读 · 0 评论 -
嵌入式变量存储空间详解(内附代码及注释)
摘要:本文以STM32G070CBT6单片机为例,详细解析了嵌入式系统中内存和变量的存储管理。128KB的内部FLASH用于存储程序代码、中断向量表和常量,支持通过特定操作进行数据写入。36KB的SRAM则分为栈(存储局部变量)、堆(动态分配内存)和静态存储区(全局变量)三个区域,并配以代码示例说明不同变量的存储位置。文章还强调了查看.map文件进行内存分配验证的重要性,为嵌入式开发者提供了实用的内存管理参考。(149字)原创 2025-07-15 21:40:51 · 1102 阅读 · 0 评论 -
FreeRTOS源码学习之内核初始化
本文介绍了使用STM32CubeMX添加FreeRTOS后的初始化流程。主要内容包括:1)主函数中通过osKernelInitialize()进行内核初始化,并通过osKernelStart()启动任务调度;2)详细解析了osKernelInitialize()函数,该函数会检查中断状态并配置堆内存,将内核状态设为就绪;3)解释了IS_IRQ()宏如何通过读取IPSR寄存器检测当前是否处于中断上下文。文章还特别说明了在中断中不进行内核初始化的原因,是为了避免中断嵌套导致的资源竞争问题。原创 2025-07-11 11:34:38 · 640 阅读 · 0 评论 -
3、结合STM32CubeMX学习FreeRTOS实时操作系统——队列
本文介绍了FreeRTOS队列的核心概念、特性和使用方法。队列作为任务间通信的基础组件,具有FIFO、线程安全、阻塞机制等特性。文章详细讲解了队列的常用API函数(如xQueueSend、xQueueReceive等)、创建配置原则及选型指南,并通过示例代码演示了在任务中使用队列实现数据通信的过程。特别强调了在中断程序中需要使用FromISR后缀的队列操作函数。最后通过Keil仿真案例展示了两个任务间通过队列传递模拟传感器数据的具体实现方法。原创 2025-06-23 23:34:08 · 904 阅读 · 0 评论 -
2、结合STM32CubeMX学习FreeRTOS实时操作系统——任务
本文介绍了如何在STM32CubeMX中使用FreeRTOS的任务管理功能。FreeRTOS的任务是具有独立堆栈的循环函数,包含运行、就绪、阻塞和挂起四种状态。文章详细说明了任务状态转换机制,强调高优先级任务必须使用阻塞指令(如osDelay)以确保低优先级任务执行。通过STM32CubeMX创建任务后,开发者只需在app_freertos.c文件中编写具体功能代码。配置任务时需合理设置优先级,生成代码后系统会自动注册任务并调用osKernelStart()启动调度。示例展示了LED闪烁任务的实现,并指出F原创 2025-06-23 23:09:59 · 1198 阅读 · 0 评论 -
1、使用STM32CubeMX在项目中添加FreeRTOS源码
本文介绍了使用STM32CubeMX配置FreeRTOS系统的完整流程:1)需先下载FreeRTOS支持包;2)添加FreeRTOS系统时需在CMSIS_V1(适用于资源有限场景)和CMSIS_V2(支持动态内存分配)版本间选择;3)介绍了Project Manager的设置技巧;4)推荐将系统时钟源从SysTick改为TIMx定时器以提升兼容性;5)最后生成项目代码。文章还对比了CMSIS_V1和V2的特性差异,为开发者提供版本选择参考。原创 2025-06-18 20:24:37 · 948 阅读 · 0 评论 -
结合 STM32CubeMX 使用 FreeRTOS 实时操作系统
本文介绍了使用STM32CubeMX配置FreeRTOS操作系统的学习教程。作者指出STM32CubeMX简化了嵌入式开发流程,可以快速生成包含FreeRTOS源码的项目。教程分为两个阶段:核心基础(任务管理、调度、队列、信号量等)和进阶功能(定时器、内存管理、中断等)。作者推荐了学习顺序,并参考了优快云博主"不秃也很强"的相关教程。该系列将通过由浅入深的方式,帮助开发者系统掌握FreeRTOS在STM32平台的应用。原创 2025-06-18 20:08:57 · 728 阅读 · 0 评论 -
【LeetCode】122.买卖股票的最佳时机Ⅱ
1、分析问题关系得出,最大利润便是向量中所有升序列的序列尾减去序列头然后相加,比如说{1,2,3},最大利润为3-1=2,等价为(3-2)+(2-1)=2,在数组中可以用后一位减去前一位,若值>0,说明这两个数是递增的,便可以在总利润中加上两者差值。这里提供另一种时间复杂度O(N)版本,双指针,通常用来优化算法运行时间,但是麻烦一点,需要特别注意边界条件、停止条件和指针逻辑,容易出错,最好先画出流程图。原创 2023-09-14 17:00:42 · 147 阅读 · 1 评论 -
STM32 BootLoader 原理及使用方法(内附示例C代码及注释)
STM32中的BootLoader简介及配置流程说明原创 2025-06-03 21:37:05 · 3043 阅读 · 0 评论 -
【蓝桥杯】回文数简便算法
【代码】【蓝桥杯】回文数简便算法。原创 2020-03-01 21:57:02 · 331 阅读 · 0 评论 -
卡尔曼滤波算法公式详解及应用(内附完整C代码及注释)
本文是一篇卡尔曼滤波算法实用指南,通过通俗易懂的方式介绍其核心原理和使用方法。文章首先列出五个核心公式并解释参数意义,强调实际应用而非数学推导。然后通过信号框图展示预测与更新过程的关系,并以匀速直线运动为例说明如何建立状态方程。作者用打靶情景形象解释算法物理意义——用测量值修正预测值得到最优估计。详细说明使用流程:确定观测量/状态量/控制量、计算关键矩阵、初始化参数、迭代计算及参数调节。最后提供单传感器(标量形式)和多传感器融合(矩阵形式)的具体代码实现,帮助读者快速掌握这一广泛应用于导航、控制等领域的优化原创 2025-05-28 20:52:42 · 9486 阅读 · 5 评论 -
【C语言】快速排序算法思路及代码实现
快速排序算法属实不错,有说它的时间复杂度(快慢)不稳定,出现最坏情况时要比一些正常发挥的排序算法慢一点,但处理大量数据前提下(少量数据爱谁谁无所谓),这个概率可能比您吃饭噎死的概率再低一点,所以放心用大胆用,接下来进入正题哇思路:1,一堆无序数据2,挑一个数作基准3,比基准小的放它左边4,比基准大的放它右边5,无脑重复此操作递归6,就完了就这么简单*编程实现: 1,无序数组a...原创 2020-02-24 23:18:00 · 287 阅读 · 1 评论 -
【LeetCode】罗马数字转数字-C实现
【代码】【LeetCode】罗马数字转数字-C实现。原创 2023-10-21 12:17:18 · 209 阅读 · 1 评论 -
【LeetCode】80.删除有序数组中的重复项Ⅱ(C++)
【代码】【LeetCode】80.删除有序数组中的重复项Ⅱ(C++)原创 2023-09-11 16:45:07 · 220 阅读 · 1 评论 -
【STM32】ADC读数转电压值
STM32的ADC读数转电压值原创 2025-03-31 23:21:07 · 902 阅读 · 0 评论 -
【Leetcode】125.验证回文串
【代码】【Leetcode】125.验证回文串。原创 2023-09-05 16:20:08 · 118 阅读 · 0 评论 -
【软件模拟I2C】详解IIC通信协议(内附完整软件模拟IIC代码及注释)
IIC通信协议详解,内附软件模拟IIC通信协议完整代码以及代码注释,包甜的@!原创 2025-04-30 00:02:04 · 3530 阅读 · 0 评论 -
二、使用LSM6DS3TR六轴传感器加速度计+陀螺仪数据融合算法计算三维空间旋转向量(内附完整代码及注释)
本文介绍了一种新的加速度计和陀螺仪的传感器融合思路,用来计算三维空间的旋转向量,内附完整版的算法代码以及注释。原创 2025-05-23 00:05:26 · 1827 阅读 · 2 评论 -
【LeetCode】输入字符串最后一个单词长度
【代码】【LeetCode】输入字符串最后一个单词长度。原创 2023-10-21 16:36:23 · 204 阅读 · 1 评论 -
MS1003时间测量芯片驱动配置(内附完整代码及注释)
MS1003是一款高精度时间测量芯片(TDC),具有ps级的时间分辨率(1ps时间内光飞行0.3mm),是MS1002的升级版,有更高的精度和更小的封装,配置方式也更丰富,适用于激光雷达、激光测距和脉冲间隔测量。◼自动测量START到STOP之间的时间间隔,无需再配置寄存器◼在非校准模式下,可以测量(小于配置的预期脉冲数)内的任意数量的脉冲◼双通道单精度模式测量最小时间分辨率46ps(光在1ps时间飞行0.3毫米)◼单通道双精度模式测量最小时间分辨率23ps◼非校准单精度测量范围。原创 2025-06-16 18:08:05 · 1004 阅读 · 5 评论 -
LSMDSV16X六轴传感器驱动,启用SFLP功能输出四元数(内附驱动代码及注释)
最近在使用LSMDSV16X六轴传感器来做三维空间位姿估计,因为LSMDSV16X传感器有一个SFLP低功耗传感器融合功能,可以直接输出加速度计和陀螺仪数据融合后计算出的四元数,这个四元数是以世界坐标系位参考的,可以用来表示机身在世界坐标系下的姿态,类似于MPU6050的内置传感器融合模块,但是MPU6050价格太贵,所以使用LSMDSV16X来实现。驱动直接使用LSMDSV16X六轴传感器的官方版本,本文将介绍如何将官方驱动成功移植到开发者自己的项目中并实现运行。原创 2025-06-16 16:19:39 · 994 阅读 · 0 评论
分享