自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 Shell 脚本入门:从零开始写自动化脚本

本篇博客从基础语法出发,逐步介绍了 Shell 的常用命令、变量、输入输出、流程控制、函数封装以及开机自启脚本设计等内容,希望你能将所学应用到实际项目中,写出属于你自己的自动化脚本工具!

2025-04-25 19:00:54 2061

原创 CMake 入门指南:从零开始配置你的第一个项目

本文从 “CMake 是什么” 的基础出发,逐步深入讲解了 CMakeLists.txt 的结构与常用命令,展示了从构建可执行文件到静态库、动态库的完整流程。同时也涵盖了项目实战示例、嵌套使用、以及与 STM32 工程结合的案例,帮助你建立起对 CMake 的全面认知。

2025-04-23 22:56:09 1961

原创 快速LVGL移植(以GD32为例)

快速LVGL移植(以GD32为例)

2025-03-22 18:47:14 966

原创 RT-Thread Studio联合STM32CubeMX自动生成完整STM32的RT-Thread代码

RT-Thread Studio联合STM32CubeMX自动生成完整STM32的RT-Thread代码

2025-03-19 19:00:22 1414 1

原创 解析 Bootloader:嵌入式系统中不可或缺的启动程序

Bootloader 是嵌入式系统启动和管理的重要组成部分,它负责将系统从硬件初始化到主应用程序的加载。通过合理的 Flash 存储分配和代码实现,可以确保系统的稳定性、可维护性和灵活性。理解 Bootloader 的工作原理和设计思路,对于嵌入式开发者来说是非常重要的,这有助于优化系统启动时间、增强固件更新功能,并提高系统的可靠性。

2025-03-16 17:54:51 938

原创 使用DMA进行ADC数据读取与USART数据发送与接收

本文介绍了 DMA 如何用于 USART 和 ADC 数据传输,提高系统性能,减少 CPU 负担。这在 实时数据采集、传感器监测 等应用中非常重要。

2025-03-10 17:31:27 1328

原创 解决在FreeRTOS运行时无法进行精确微秒与毫秒延时问题

解决方案: 启用 DWT->CYCCNT 计数器,实现 高精度微秒级延时。

2025-03-09 14:29:40 1119

原创 详细GD32F103的FreeRTOS移植含常见错误

详细GD32F103的FreeRTOS移植,完全的自主,成功移植

2025-03-07 20:43:43 863

原创 深入理解动态规划:斐波那契数列、最长公共子序列和背包问题的分析

作为一名嵌入式软件工程师,学习动态规划(DP)是非常有价值的,因为动态规划不仅可以帮助你解决算法问题,还能提升你对问题分解和优化的能力。嵌入式系统中虽然资源有限,但动态规划的思想可以应用于优化资源分配、任务调度等问题。

2025-02-04 15:21:04 796

原创 常见排序与搜索算法的深度剖析——从基础到应用

排序和搜索算法是计算机科学的核心部分,无论是数据的组织还是问题的求解,都离不开它们。冒泡、快速、选择排序各有优势,适合不同的应用场景;而二分查找、深度优先搜索和广度优先搜索则提供了高效的数据搜索方式。在实际项目中,根据数据规模和需求选择合适的算法,能显著提升程序性能。理解这些基础算法,将为复杂问题的解决提供扎实的基础。

2024-12-04 15:15:00 896

原创 常见的数据结构---队列、树与堆的深入剖析

在现代计算机科学与工程领域,队列、树和堆是三种极其重要的基础数据结构,它们各自具有独特的特点和应用。在日常开发中,合理选择和使用这些数据结构可以显著提高程序的效率和可维护性。它们不仅奠定了算法设计的理论基础,还在系统开发、数据处理和实际应用中扮演着不可或缺的角色。

2024-12-03 17:35:48 881

原创 基于树莓派的安保巡逻机器人--项目介绍

我们的研发目标是通过开发本项目,解决安保领域存在的一系列工程问题。首先,我们致力于提高安保区域的安全性和可靠性,通过利用先进的激光雷达路径规划技术,机器人能够高效巡逻监控安保区域周边环境,及时发现并应对潜在的安全隐患。其次,我们着眼于降低人力成本和提高工作效率,通过人脸识别、环境监测和火灾检测等功能,能够自动化巡逻时检测异常情况并迅速报警,减少了人工监控。此外,我们还致力于提升安保区域智能化水平,通过智能避障技术和站岗门禁系统,保障机器人安全运行,并且实现对安保区域区域的严格控制与监管。

2024-11-30 16:50:38 1500 1

原创 常见的数据结构---数组、链表、栈的深入剖析

数据结构是算法的基石,是程序设计的核心基础。不同的数据结构适用于不同的场景和需求,选择合适的数据结构能显著提升程序的效率和可读性。在众多的数据结构中,数组、链表和栈是最基本、最常用的三种。它们各具特色,不仅应用广泛,也是更复杂数据结构的基础。

2024-11-29 19:30:00 1484

原创 C/C++ 高级数据类型详解——联合体、结构体与枚举

在嵌入式开发和系统编程中,联合体、结构体与枚举是三种基础而又强大的数据类型。它们不仅帮助我们更高效地组织数据,还在内存管理、状态表示和硬件操作中扮演着重要角色。无论是节省内存的联合体、灵活组织数据的结构体,还是清晰表示状态的枚举,熟练掌握这些数据类型的用法和特性,将大大提升代码的可读性与可靠性。本文将从基本定义到高级应用,对联合体、结构体与枚举进行深入解析,为您呈现它们的设计思路与实战技巧。

2024-11-28 12:30:00 2055

原创 typedef 与 #define 的深度比较与应用解析

的关键字。通过。

2024-11-27 16:15:00 1220

原创 嵌入式的C/C++:深入理解 inline 、extern与 extern “C“的用法与特点

在嵌入式开发中,C 和 C++ 是最常用的编程语言,特别是在高性能和低资源的硬件环境中,合理使用语言特性显得尤为重要。inline、extern 和 extern "C" 是嵌入式开发中的三大关键关键词,它们直接影响代码的性能、模块化设计以及跨语言的互操作性。然而,很多开发者对这些关键词的作用、使用场景以及注意事项了解不够全面,甚至可能在实际项目中导致难以察觉的错误。本文将从嵌入式开发的视角,深入剖析 inline、extern 和 extern "C" 的用法与特点,帮助您在项目中灵活运用,编写更高效、更

2024-11-26 15:00:00 1196

原创 嵌入式的C/C++:深入理解 static、const 与 volatile 的用法与特点

在嵌入式的C/C++ 编程中,关键字不仅仅是语法结构的一部分,更是语言核心特性的体现。static、const 和 volatile 是三个常见且重要的关键字,广泛应用于变量管理、优化控制、代码安全性和硬件编程等领域。然而,很多开发者在使用它们时,往往只了解表面作用,而忽视了深入理解可能带来的性能优化和代码维护收益。本篇博客将通过细致的分类讲解和实用的示例,带你全面掌握这三个关键字的用法、特性和应用场景。

2024-11-25 19:49:51 1789

原创 FreeRTOS --- 内存管理

通过合理选择内存管理算法和优化堆大小,可以有效提升 FreeRTOS 应用的稳定性和性能。

2024-11-25 09:45:00 1048

原创 FreeRTOS --- 软件定时器

FreeRTOS软件定时器是一种灵活高效的定时机制,可以用于多种应用场景,如周期任务、超时处理和延时操作。在需要多个定时器且硬件资源有限时,软件定时器是一个非常实用的解决方案。

2024-11-24 14:45:00 2077

原创 FreeRTOS:事件标志组与任务通知

事件标志组是一个强大的同步工具,适合多个任务需要根据不同事件状态来执行的场景。它提供了位操作、事件等待、事件清除等功能,能够灵活地管理任务间的同步。相比队列和信号量,事件标志组具有“广播”能力,能够同时唤醒多个任务,因此适合需要多个任务响应的场景。使用事件标志组时,开发者可以选择任务在事件发生后是否清除事件标志,确保任务的灵活性。总之,事件标志组是FreeRTOS中非常重要的同步工具,它为任务间通信提供了一种高效且灵活的方式。

2024-11-22 22:30:00 2107

原创 FreeRTOS---队列与信号量详解

总结消息队列:任务间数据传递。二值信号量:事件同步。计数信号量:资源计数。互斥信号量:解决优先级翻转。队列集:管理多个事件来源。这些功能可以灵活组合,满足多种实时应用需求。形象化比喻一览表总结对比表:通过这些对比可以更好地选择合适的机制,解决具体应用中的问题。

2024-11-21 15:15:00 915

原创 FREERTOS---时间片调度与时间管理

在FreeRTOS中,时间管理是任务调度和系统运行的重要组成部分。FreeRTOS提供了获取系统时间和进行节拍时间换算的多种方法,以便开发者更方便地对时间进行操作。以下是详细说明和示例。FreeRTOS的时间片调度和时间管理机制在实时系统中至关重要。通过合理配置时间片长度、使用时间管理API,可以实现高效的任务切换和准确的定时操作。在设计时需根据系统实时性和任务特点,选择合适的调度方式和时间管理策略,以实现最佳性能。

2024-11-20 16:14:42 1604

原创 分享一下之前学习UCOSIII的笔记

互斥信号量可以用于解决优先级反转的问题,但当共享资源被某个任务长时间占用那么需要共享资源的任务会进入长时间的等待阶段(阻塞),这是需要避免的。3.优先级反转:当一个低优先级任务获得对一个共享资源的访问权,并且此时有一个高优先级任务也需要访问相同的资源,但因为低优先级任务占用了资源,高优先级任务被阻塞,这就导致了优先级反转。较高优先级的任务具有更高的执行优先级,这意味着它们有更高的机会在竞争资源时执行。当一个低优先级任务获得资源时,将提升等待资源的高优先级任务的优先级,以便高优先级任务可以立即执行。

2024-11-18 12:30:00 624

原创 计算机中的比特、字节、字:基础单位详解

在计算机科学中,比特(Bit)、字节(Byte)、字(Word)等概念是构成数据的基础单位。它们共同定义了计算机如何存储、处理和传输数据。对于编程、计算机硬件和日常计算机应用来说,理解这些单位至关重要。本文将深入探讨这些基础单位的定义、由来、单位间的关系以及它们在实际应用中的意义。

2024-11-17 14:12:30 5618

原创 详细解析STM32 GPIO引脚的8种模式

在嵌入式系统设计中,GPIO(通用输入输出)引脚是非常重要的硬件资源,通常用于与外部设备进行通信和控制。不同的工作模式允许GPIO引脚在不同的场景下执行不同的任务。STM32等微控制器提供了多种GPIO模式,今天我们将详细介绍这八种常见的GPIO模式,帮助你更好地理解它们的功能和应用场景。

2024-11-15 17:56:58 1951

原创 Git 入门教程:基本操作和命令整理

目录 1. Git 安装 2. Git 初始配置 3. 创建空仓库 4. 提交文件到仓库 5. 修改最后一次提交的注释 6. 查看历史提交日志 7. 回滚代码仓库 8. 查看文件状态 9. 添加所有改动文件到缓存区 10. 撤销文件改动 11. 查看单个文件的历史记录 12. 删除文件并提交 13. 查看提交历史 14. Git 基本组成框架 15. 恢复被删除的文件 16. 创建分支 17. 切换分支 18. 合并分支 19. 查看所有分支 20. 删除分支 21. 修改分支名称 22. 保存当前工作切换

2024-11-11 06:15:00 689

原创 STM32 低功耗模式详解

低功耗指的是在系统设计中通过硬件和软件优化,使设备在执行任务时尽量减少能量消耗。特别是在嵌入式系统、物联网设备和电池供电的设备中,低功耗设计至关重要,因为它可以延长设备的工作时间,减少频繁充电或更换电池的需求。Tickless模式的核心思想是,当系统进入空闲状态并不需要频繁调度时,停止或减少时钟中断,使系统进入更深的低功耗模式。系统会根据需要再次唤醒,然后恢复时钟计数,这样可以避免因频繁的时钟中断唤醒而浪费功耗。/* 此条件编译检查应使用不等于0的判断,而不是等于1。

2024-11-10 05:00:00 4928

原创 LVGL:组件设计与实现心得

LVGL给了我们自由设计的空间,关键在于如何合理布局,打造出清晰、高效、可扩展的用户界面。希望本文的经验分享能为其他开发者提供启发,帮助大家更快上手并享受LVGL开发的乐趣。LVGL是一个充满可能性的工具。未来,我们可以继续发掘它在更多场景中的应用潜力,通过创新设计实现更多有趣的项目。欢迎大家一同交流探索,让LVGL的设计之路更加丰富多彩!

2024-11-09 15:15:00 3017

原创 在 STM32 使用 FreeRTOS 时如何重定位向量表实现 Bootloader 跳转

向量表(Vector Table)是存储在微控制器闪存(Flash)或存储器中的一个地址表,包含了系统异常和中断的服务程序地址。在 Cortex-M 系列的微控制器(如 STM32)上,向量表通常位于 Flash 的起始地址0x08000000或 SRAM 起始地址。向量表的作用是告诉微控制器,当发生特定的中断或异常时,应该跳转到哪个位置去执行相应的代码。在STM32系统上运行FreeRTOS且应用程序起始地址不为`0x08000000`时,重定位向量表是至关重要的一步。

2024-11-08 16:09:24 1575

原创 再学FreeRTOS---(中断管理)

中断是一种允许CPU在执行过程中暂停当前任务并立即处理突发事件的机制。其执行流程可以分为以下三个步骤:1.中断请求:由外设或事件(如GPIO外部中断、定时器中断等)发起中断请求。2.响应中断:CPU停止当前程序,转去执行相应的中断服务程序(ISR)。3.退出中断:中断服务程序执行完毕,CPU返回被打断的程序继续执行。

2024-11-03 08:30:00 791

原创 再学FreeRTOS---(任务的挂起与恢复)

在实时操作系统FreeRTOS中,任务的挂起与恢复是一项重要的控制功能。任务挂起相当于暂停任务的执行,直到条件满足才恢复继续运行。这种机制在任务的调度和系统资源管理上起到了关键作用。本篇文章将通过FreeRTOS提供的任务挂起和恢复API函数及相关实验来深入理解这一机制。

2024-11-02 16:29:27 921

原创 FreeRTOS移植到STM32F103C8T6(HAL库)

FreeRTOS移植到STM32F103C8T6(HAL库)

2024-11-01 18:52:55 1267 1

原创 MCU内存结构解析:FLASH、ROM与RAM的功能与区别

在嵌入式开发中,MCU(微控制器)是实现控制和数据处理的核心。MCU内部的存储结构对于程序的运行效率和存储管理至关重要。本文将深入分析MCU内部的三种常见存储器:FLASH、ROM和RAM,并解释它们各自的作用和特性。

2024-10-30 14:45:00 3712 1

原创 基于树莓派的安保巡逻机器人--(四、树莓派与onenet数据传输--http协议,树莓派与QQ邮箱的通信)

通过以上步骤,我们成功实现了树莓派与OneNET平台以及QQ邮箱的通信,进一步提升了安保巡逻机器人的数据交互与智能通知能力。借助OneNET的远程数据监控,机器人能够实时更新环境数据并进行自主决策,从而实现自动化和更精细的控制。此外,机器人在检测到异常情况时,还可以利用QQ邮箱发送即时警报,保障巡逻工作的及时性和可靠性。本篇内容展示了如何在物联网环境下通过简单易用的HTTP和SMTP协议实现数据传输和警报系统,这不仅拓宽了树莓派的应用范围,也为物联网开发提供了更多便利。

2024-10-29 18:45:00 928

原创 基于树莓派的安保巡逻机器人--(三、树莓派的语音合成与语音播报

对于基于树莓派的安保巡逻机器人来说,语音合成和语音识别功能不仅增强了交互体验,也使得机器人的安防效果更加智能化和人性化。本篇博客将详细讲解如何在树莓派上使用Piper进行语音合成,以及如何借助百度AI开放平台实现语音转文字,从而赋予机器人更强的语言理解与响应能力。

2024-10-28 08:45:00 1152

原创 对USART/UART、TTL、RS232、RS485、COM的理解

UART、USART、TTL、RS232、RS485和COM接口是串行通信中的重要概念,它们各自承担不同的角色。UART和USART是硬件模块,提供数据串行传输功能;TTL、RS232、RS485则定义了信号电平标准,影响通信的电压范围、距离和抗干扰能力;COM接口是PC端的串口,通常基于RS232标准。通过合理配置和使用这些通信方式和接口,可以在不同设备间实现可靠的串行通信,从而满足各种工业和嵌入式应用的需求。

2024-10-27 19:00:00 1134

原创 再学通信协议---(SPI通信协议,以OLED屏显示为例)

SPI以简单的硬件结构和高效的数据传输方式在嵌入式开发中扮演了重要角色,从屏幕显示到传感器通信,都离不开SPI的支持。

2024-10-27 09:00:00 1722

原创 基于树莓派的安保巡逻机器人--(二、增量式PID控制二维云台追踪)

在这一部分,我们将探讨如何实现一个基于树莓派的安保巡逻机器人,使用增量式PID控制算法进行二维云台追踪。该系统利用摄像头捕捉周围环境,并对检测到的人脸进行实时追踪。以下是实现该功能的详细代码及其说明。PID 控制线程和视频帧的实时处理。这两部分各司其职,分别通过单独的线程运行,协同完成对人脸的追踪。以下是这两部分的详细解释。我们希望摄像头的画面中心能够对准人脸的位置,因此摄像头画面中心 (320, 240) 被定义为目标点。

2024-10-26 08:30:00 1455

原创 基于树莓派的安保巡逻机器人--(一、快速人脸录入与精准人脸识别)

本文介绍了如何在树莓派5B上实现快速的人脸录入与精准的人脸识别。从采集人脸图像、训练人脸数据库,再到使用LBPH进行实时识别,我们完成了一套简单但有效的人脸识别系统。LBPH特征提取方法在资源有限的设备上表现出色,能够在保证准确率的同时实现实时检测。

2024-10-25 17:34:37 1832

原创 再学通信协议---(One-Wire协议,以读取DS18B20数据为例)

即单线总线,又叫单总线。是由Dallas Semiconductor(现属于Maxim Integrated)开发的数据通信协议。2、它因仅需一根数据线(加上一条地线)即可实现数据通信而得名。3、它是一种半双工的通信机制,意味着数据可以在两个方向上传输,但在同一时间内只能进行单向传输。4、所有数据都在一条线上传输,因此单总线协议对时序要求非常严格以确保数据的完整性。5、One-Wire协议虽然在硬件上较为简单,但在软件实现上可能较为复杂,需要精确控制数据线的时序。

2024-10-24 08:45:00 2571

学习CMake的例程-学习CMake的例程

学习CMake的例程

2025-04-23

GD32F103+GD32F407成功移植FREERTOS-V11,写好了DWT、DMA、ADC、USART、FREERTOS相关

GD32F103+GD32F407成功移植FREERTOS-V11,写好了DWT、DMA、ADC、USART、FREERTOS相关

2025-03-16

GD32F407完整bootloader与app代码

GD32F407完整bootloader与app代码

2025-03-16

基于树莓派的安保巡逻机器人-(一、快速人脸录入与精准人脸识别)

facedetection.py为人脸检测 01_face_dataset.py为人脸录入 02_face_training.py为模块训练 03_face_recognition.py为人脸识别

2024-10-25

树莓派5B对YOLOV5进行快速安装

树莓派5B对YOLOV5进行快速安装 文章:https://blog.csdn.net/wallwayj/article/details/142442672?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522D06BFD33-2283-40B3-B169-0A55F56B66D3%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=D06BFD33-2283-40B3-B169-0A55F56B66D3&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-142442672-null-null.142^v100^pc_search_result_base5&utm_term=%E6%A0%91%E8%8E%93%E6%B4%BE5B&spm=1018.2226.3001.4187

2024-09-23

利用小熊派做一个简单项目-基于OpenHarmony与OneNet的智慧仓储监测系统

利用小熊派做一个简单项目-基于OpenHarmony与OneNet的智慧仓储监测系统

2024-09-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除