自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 FreeRTOS中断管理

FreeRTOS中断管理机制通过优先级配置和两套API设计实现实时性与稳定性的平衡。关键点包括:1)将中断优先级分为受管理区(可调用FromISR版API)和非管理区(禁止调用API);2)提供任务级和中断安全版两套API;3)采用xHigherPriorityTaskWoken参数机制处理上下文切换;4)通过临界区保护关键代码段;5)推荐延迟处理模式,将耗时操作移至任务中执行。最佳实践包括保持ISR简短、合理分配优先级、正确使用API和同步机制。该机制有效解决了嵌入式系统中的实时响应、资源共享和优先级管理

2025-09-25 23:48:46 814

原创 FreeRTOS内存管理

FreeRTOS提供5种内存管理方案:heap_1(仅分配不释放)、heap_2(支持释放但碎片化)、heap_3(标准库的线程安全封装)、heap_4(支持碎片合并的通用方案)和heap_5(支持非连续内存区域)。方案选择需考虑确定性、线程安全、碎片管理等特性,其中heap_4因平衡功能与效率成为多数应用首选。通过合理配置堆大小、监控内存使用及优化分配策略,可满足嵌入式系统对高效可靠内存管理的需求。不同方案适用于不同场景,开发者应根据应用特点选择最合适的实现方式。

2025-09-25 23:44:21 1125

原创 FreeRTOS 互斥量与事件组

本教程详细解析了FreeRTOS中的两种核心同步机制:互斥量和事件组。互斥量通过优先级继承机制解决优先级翻转问题,适用于保护共享资源和设备独占访问,但不适合任务与中断间的同步。事件组则提供多事件同步能力,支持24个事件位,可实现"与/或"条件等待,适用于多条件触发场景。教程通过UART保护和多传感器采集两个实际案例,展示了如何正确使用这些机制,并给出了保持临界区简短、合理设置事件位等最佳实践建议。这些同步机制是构建可靠实时系统的关键组件。

2025-09-24 12:52:40 515

原创 FreeRTOS 信号量

本文详细介绍了FreeRTOS中的信号量机制,包括二值信号量、计数信号量、互斥信号量和递归互斥量四种类型及其应用场景。重点分析了信号量的运作原理、API函数和使用方法,并通过多个实例演示了任务同步、资源管理和临界区保护等典型应用。文章还提供了信号量使用的最佳实践,包括避免优先级反转和死锁的技巧、性能优化建议以及调试方法。最后给出了信号量类型选择指南,帮助开发者根据具体需求选择合适的同步机制,确保RTOS系统的高效可靠运行。

2025-09-22 16:22:27 969

原创 FreeRTOS 软件定时器

FreeRTOS软件定时器是基于系统时钟节拍(tick)的定时服务机制,支持单次和自动重载两种类型。它由专门的定时器服务任务管理,通过命令队列处理定时器操作。与硬件定时器相比,软件定时器资源消耗更少但精度较低。配置时需合理设置优先级、队列长度等参数。API提供创建、启动、停止、重置和删除等功能,回调函数应简洁且避免阻塞。最佳实践包括:合理设置优先级,优化队列长度,使用定时器ID区分多个定时器,以及进行错误处理。在内存受限系统中可考虑静态分配。

2025-09-22 16:13:16 933

原创 FreeRTOS 任务调度与管理

FreeRTOS任务调度器提供了三种调度模式:抢占式(默认)、协作式和带时间片的抢占式,支持多任务优先级管理。任务状态分为运行态、就绪态、阻塞态和挂起态。核心API包括任务创建/删除、延时/周期控制、优先级调整及挂起/恢复功能。高级特性涵盖空闲任务钩子、Tickless低功耗模式和调度器锁定。实践示例展示了不同优先级任务的调度效果,其中vTaskDelayUntil能实现更精确的周期控制。该调度系统适用于实时性要求不同的嵌入式场景,开发者需根据需求选择合适的调度策略和任务管理方法。

2025-09-17 23:29:39 831

原创 FreeRTOS任务管理概述

FreeRTOS是一个嵌入式实时操作系统,其核心是任务管理机制。系统采用抢占式调度,允许高优先级任务中断低优先级任务,并通过时间片轮转实现相同优先级任务的公平执行。任务具有四种状态(运行、就绪、阻塞、挂起),每个任务创建时需指定优先级和栈空间。系统包含自动创建的空闲任务(优先级0)用于后台处理,并通过定时器中断(Tick)进行时间管理。关键配置包括抢占开关、时间片轮转、Tick频率等。这些特性共同构建了一个高效、实时的多任务嵌入式环境。

2025-09-17 00:47:54 673

原创 计算机指令集架构体系及其生态科普

本教程系统介绍了主流指令集架构(ISA)的分类及应用。ISA主要分为RISC(ARM、RISC-V等)和CISC(x86)两大阵营,各具特点:RISC指令简单高效,CISC功能丰富。重点分析了ARM系列(Cortex-A/R/M)、x86/x86-64、RISC-V等架构的分支特点及应用领域,如移动设备、服务器、IoT等。同时说明了Linux、Windows等操作系统对不同ISA的支持情况,包括近年来ARM架构在桌面系统的发展趋势。文章全面梳理了各类ISA的技术特性和实际应用场景。

2025-09-17 00:13:09 1057

原创 嵌入式Linux常用命令

本文介绍了Linux系统常用命令,分为核心文件操作、文本处理、系统管理、网络操作和压缩解压五大类。文件操作包括pwd、ls、cd、cp等基础命令;文本处理重点介绍cat、less、grep等日志分析工具;系统管理涵盖ps、top、df等进程和资源监控命令;网络操作讲解ping、scp、ssh等远程交互指令;压缩解压主要说明tar的使用方法。文章特别强调使用man和--help查阅命令手册的重要性,这些命令是嵌入式开发和系统调试的基础工具。

2025-09-14 22:04:54 834

原创 CMake Qt程序打包与添加图标详细教程

本文将详细指导如何为CMake编译的Qt程序打包并添加图标。首先准备多尺寸的ICO图标文件,创建资源文件(.rc)并修改CMakeLists.txt以包含该文件。接着编译Release版本,使用windeployqt工具自动复制运行时依赖项,最后在未安装Qt的电脑上测试打包结果。文章还提供了常见问题的解决方案,如图标未显示、依赖缺失等,并建议了高级选项如添加版本信息和制作安装程序。整个过程虽步骤较多,但通过分步操作即可顺利完成。

2025-09-09 23:53:20 761

原创 QMainWindow 核心组件详解

本文介绍了Qt中QMainWindow的主要组件及其实现方法。主要内容包括:1)菜单栏(MenuBar)的创建与菜单项添加;2)工具栏(ToolBar)的配置与自定义控件;3)状态栏(StatusBar)的消息显示和部件添加;4)停靠窗口(DockWidget)的浮动特性设置;5)中心部件(CentralWidget)的指定。文章还提供了完整的QMainWindow示例代码,展示了这些组件的综合应用,并介绍了多文档界面(MDI)、状态保存恢复以及样式自定义等高级功能。

2025-09-07 00:25:14 705

原创 C++ Lambda 表达式完整指南

摘要:C++11引入的Lambda表达式是一种匿名函数机制,主要用于STL算法、回调和异步操作。其核心语法包括捕获列表(支持值/引用捕获、初始化捕获)、参数列表和返回类型。关键特性有:mutable允许修改值捕获变量、C++14支持auto参数、C++17支持constexpr计算。典型应用场景包括STL排序/查找、多线程同步和事件处理。注意事项:避免悬挂引用、正确使用mutable、小Lambda利于内联优化。Lambda显著提升了代码简洁性和表达力,是现代C++的重要特性。

2025-09-06 16:24:50 791

原创 Qt信号与槽机制全面解析

Qt信号槽机制是Qt框架的核心特性,实现了对象间松耦合通信。信号(Signals)是对象在特定事件发生时发出的通知,只需声明不需实现;槽(Slots)是响应信号的成员函数,需要实现具体逻辑。通过connect()函数建立连接,支持多种连接类型和跨线程通信。该机制具有自动内存管理、线程安全等特点,可通过Q_OBJECT宏启用元对象系统支持。最佳实践包括使用Qt5新语法、注意参数兼容性、合理使用连接类型等。信号槽机制替代了传统回调,是Qt事件驱动编程的基础。

2025-09-05 22:36:35 1088

原创 C++ Qt 开发核心知识

本文介绍了Qt框架的核心概念与应用开发技术。主要内容包括:1)Qt的元对象系统、信号与槽机制和事件处理;2)核心模块如GUI、Widgets、Network等;3)数据处理方法,包括JSON序列化和图像处理;4)网络通信实现,涵盖TCP客户端和HTTP客户端;5)多线程处理技术;6)界面设计与数据绑定,包括Model/View架构和自定义控件;7)完整客户端示例,展示网络连接、数据传输和图像显示功能。这些内容为开发具有图形界面和网络通信功能的应用程序提供了完整的技术方案。

2025-09-04 12:20:32 567

原创 C++ 核心语法与类的基础知识(与C语言对比)

C++核心语法特性摘要:相比C语言,C++引入了面向对象编程范式,支持类、继承、多态等特性。类可包含构造函数/析构函数、成员变量/函数、访问控制修饰符(private/protected/public)。C++特有功能包括函数重载、运算符重载、模板编程、智能指针和异常处理机制。面向对象核心体现在继承(支持多态通过虚函数)、抽象类(纯虚函数)和封装。其他重要特性包括引用、命名空间、STL标准库。典型示例展示了类定义、静态成员、友元函数等实现方式。这些特性使C++成为更强大的系统编程语言。

2025-09-02 15:47:02 737

原创 使用STM32CubeMX搭建FreeRTOS工程控制双LED闪烁

本文介绍了使用STM32CubeMX配置FreeRTOS的关键步骤:1)将系统时基源从SysTick改为其他定时器;2)启用FreeRTOS中间件并选择CMSIS_V2接口;3)创建任务并设置优先级和堆栈大小(建议初始128words)。重点注意事项包括:必须修改时基源避免冲突,合理设置任务堆栈防止硬件错误,在任务中使用vTaskDelay()而非HAL_Delay(),以及注意任务优先级对调度的影响。通过这三个主要配置步骤,即可实现多任务调度功能。

2025-09-02 01:07:19 631

原创 STM32手动移植FreeRTOS(非常详细且通用,以STM32H743为例)

FreeRTOS移植到hal库的STM32简明指南

2025-09-01 13:02:35 1332

原创 STM32手动移植FreeRTOS

常见的错误包括头文件路径不正确、函数未定义(可能是移植层文件没添加或路径错误)、重复定义(中断服务函数没注释掉)等。:如果程序运行不正常,使用调试器进行单步调试,检查系统是否能成功创建任务、是否成功启动调度器、是否进入正确的硬件中断等。(例如一个简单的LED闪烁工程),配置好时钟树、调试接口(如SYS)和你需要的外设(如GPIO、USART等)。// 调用FreeRTOS的SysTick Handler。(Group),例如 "FreeRTOS_CORE", "FreeRTOS_PORTABLE"。

2025-08-30 21:57:09 856

原创 FreeRTOS基础知识记录

FreeRTOS任务调度与状态概述 FreeRTOS提供三种任务调度方式:1)抢占式调度(按优先级执行,高优先任务可抢占低优先任务);2)时间片调度(同优先级任务轮转执行);3)协程式调度(官方已停止开发)。任务有四种状态:运行态(当前执行)、就绪态(可执行但未运行)、阻塞态(等待事件或延时)和挂起态(需手动恢复)。调度器从就绪队列中选择最高优先级任务执行,同一时间仅一个任务处于运行态。注意状态转换规则:只有就绪态任务可转为运行态,其他状态需先转为就绪态才能执行。

2025-08-29 23:10:27 279

原创 提供一种在树莓派5上切换模式的思路(本文是面向显示屏配置文件)

摘要:本文介绍了在Linux系统(树莓派5)上创建显示器模式切换工具的方法。通过两个脚本实现功能:1) display-toggle用于物理/虚拟显示器切换,通过移动配置文件并重启显示服务实现;2) display-status用于检查当前显示模式。两个脚本均需放置在/usr/local/bin目录并赋予执行权限。使用示例显示切换效果,通过简单的命令即可完成显示器模式转换和状态查询,方便用户根据不同需求快速切换显示输出方式。

2025-06-25 10:51:30 312

原创 STM32系列依赖手动下载以及可能遇到的问题(以下以stm32f407VET6为例)

摘要:安装Keil开发环境的ARM设备依赖文件可通过官网下载并直接运行安装包完成。调试STM32程序时,需在工程选项的Debug设置中选择正确调试器(如ST-Link),勾选Reset and Run等选项,并添加匹配的Flash算法(如STM32F4xx系列)。若算法未自动加载,可手动指定路径至Keil安装目录下的Flash配置文件。该流程涵盖依赖安装与下载调试常见问题的解决方法。

2025-06-22 14:48:07 256

原创 在树莓派5上配置副串口通信(以开启副串口uart2为例)

树莓派5 UART2串口通信配置教程 摘要:本文介绍了树莓派5配置UART2串口通信的完整步骤。首先需要在/boot/config.txt文件中添加dtoverlay=uart2-pi5配置项并重启设备。UART2对应的引脚为GPIO4(TX)和GPIO5(RX)。提供Python实现代码,包含串口初始化、数据发送接收等基本功能,支持115200波特率。代码采用try-except结构确保异常处理,使用serial库实现串口通信功能,可作为树莓派5串口开发的参考实现。

2025-06-19 01:06:51 510

原创 树莓派5实现串口通信教程

摘要:本文介绍在树莓派5上配置和使用串口通信的完整流程。首先需安装pyserial库,建议通过Python虚拟环境安装;其次通过raspi-config启用串口硬件并确认配置正确,特别注意树莓派5的UART0引脚映射;最后提供Python示例代码实现串口通信,包括打开串口、发送接收数据等基本操作。文中强调了关键的配置细节和常见问题排查方法,如确认/boot/firmware/config.txt中的uart设置和正确的设备映射关系。

2025-06-12 16:23:02 1734

原创 树莓派远程登陆RealVNC Viewer出现卡顿

《树莓派5无显示器配置指南》摘要(148字) 针对无外接显示屏的树莓派5用户,本教程提供虚拟显示器解决方案: 1️⃣ 先安装xserver-xorg-video-dummy驱动 2️⃣ 创建适配树莓派5的配置文件,关键设置包括: 128MB显存分配(VideoRam 131072) 1920x1080@60Hz分辨率模型 强制开启GPU全性能渲染 3️⃣ 通过cvt生成精确的刷新率参数 配置完成后重启生效,可解除无显示器时的性能限制,特别适合需要GPU加速的服务器应用场景。该方案在Bookworm系统实测有

2025-06-07 16:01:11 777

原创 自增运算符(自减运算符类似)

2024-03-28 23:32:34 162

原创 字符串的“+”操作和char字符的“+”操作

char类型的“+”操作:以对应字符ASCII进行相加,不仅仅是+,*、/、-等运算都是如此。

2024-03-28 23:19:34 398

原创 java隐式转换规则

2024-03-25 23:24:43 170

原创 java注释,关键字,字面量,变量

6,空类型:null,打印语句不能直接打印null,只能以字符串“null",的形式打印。4、字符串类型的字面量,如: “张三” “101班级” “6” “true” “”2、浮点类型字面量,如:3.14 0.001 9.0 -859.7。字符串类型:可以一次存储0个,1个或多个,由英文双引号引起。1、字面量的整数类型,如:10 -1 99999 0。5、字符类型的字面量如: ‘a’ ‘7’ ‘男’布尔类型:只有两个值,即true、falseØ。3、布尔类型字面量,如:true false。

2024-03-11 23:14:05 312

原创 常见CMD命令

说明盘符切换,如“D:”+回车,表示切换到D盘。5,cd 目录1\目录2......说明查看当前路径下的内容。说明:退出命令提示符窗口。3,cd +指定目录。说明:进入上一级目录。说明:回退到盘符目录。

2024-03-11 15:24:05 173

原创 翻转单词输出的超级简单代码,而且可以改为拆分单词

int main()gets(str);m=0;for(i=0;str[i]!='\0';i++)m=i;n=i;for(j=0;n>=m;j++,n--)a[j]='\0';;for(j=0;a[j]!='\0';j++)return 0;

2024-01-03 11:30:02 439

原创 转义字符及其作用

2023-12-19 15:12:34 569 1

原创 标识符的组成以及要求

标识符是C程序的最基本组成部分,例如:变量名称、函数名称、数据类型等等,都是一个标识符。标识符的要求是:必须由字母(区分大小写)、数字、下划线组成。而且,标识符的第一个字符不可以是数字。另外标识符不能是关键字。在C语言中,大写字母和小写字母被认为是不同的字符,所以,ABC与abc表述的标识符是不一样的。1aik (不合法);char (不合法);_1451(合法);int1 (合法);

2023-12-18 15:46:27 802

原创 c语言中的关键字

值得注意的是:scanf, printf等为函数,不是关键字。

2023-12-18 15:14:09 450 1

原创 要求通过键盘输入5串字符串,然后调用函数sort完成字符串从小到大排列,然后调用print函数完成字符串输出。

/temp,name[j]都是指针,可以用等号赋值。

2023-12-05 19:13:32 137

原创 指针在数组中的应用

void inv(int *x,int n) //形参x是指针变量。

2023-12-04 18:40:18 75

原创 镂空三角形的超级简单方法

int main()char c;for(m=0;m<n-1;m++)for(a=1;a<=(2*n-1);a++)for(i=0;i<(2*n-1);i++)return 0;

2023-11-28 22:00:26 252

原创 共用体的应用——比较日期大小

struct{int main()if(ret>0)return 0;

2023-11-16 09:19:04 98 1

原创 用typedef声明类型

(非完整代码)int age;int gender;}person;Person p1;p1.age=23;

2023-11-16 08:23:45 104 1

原创 结构体数组的应用--投票程序代码

printf("Li:%d票\nZhang:%d票\nFun:%d票\n",leader[0].count,leader[1].count,leader[2].count);

2023-11-15 22:49:15 105 1

原创 结构体--成绩排序(id一起排序)

3,注意题中的temp,它是一个结构体定义量,而不是int定义量。1,这里包含了数组结构体的应用。

2023-11-15 21:07:21 132 1

空空如也

空空如也

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

TA关注的人

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