自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 非递归的快速排序算法实现(AI时代下防痴呆专练)

文章摘要:本文介绍了一种非递归的快速排序实现方法,特别适用于内存受限的嵌入式设备。该方法通过数组模拟栈来替代递归,避免爆栈风险。核心步骤包括:1)选取参考值;2)通过左右指针分区;3)用数组存储待排序区间边界,循环处理直至完成排序。这种方法实现了内存可控,保证了排序效率。

2026-06-28 12:37:32 194

原创 CAN通信协议学习记录(UART和I2C的究极结合并升级版)

本文主要介绍了高速CAN总线的基础知识,包括硬件电路、电平协议、帧格式、仲裁机制和错误处理等核心内容。文章首先概述了CAN总线的特性,如差分传输、半双工通信、多主控架构等。硬件部分详细讲解了TJA1050收发器电路和终端电阻的作用(消除信号反射、快速放电)。协议层重点解析了数据帧结构(标准/扩展格式)及位填充机制。此外,还阐述了同步机制、波特率计算和基于ID优先级的非破坏性仲裁原理。最后说明了五种错误类型及状态机转换规则,通过波形图展示了不同错误状态下的信号特征。全文以江科大视频内容为基础,结合技术文档进行

2026-06-28 12:36:54 449 3

原创 FreeRTOS实现软件定时器的三个核心——command队列、后台任务、双链表

前面几篇关于FreeRTOS的文章,介绍了煮包在学习任务创建、队列、内存管理和任务切换等等的思考,今天介绍的是FreeRTOS的另外一个大功能,就是软件定时器;FreeRTOS的软件定时器实现的思路感觉很值得学习,特别是有一个“前后台系统”,所以写下这篇博客记录一下学习过程;

2026-05-14 14:22:39 517

原创 写bootloader程序时由于跳转应用程序前未关中断导致访问“野指针”引起的hardfualt异常分析

本文分析了由非法地址访问引发的HardFault异常问题。通过调试发现异常发生在执行LDR指令时访问0x424B0A48地址,溯源发现该地址来自pxCurrentTCB指针。深入排查发现,bootloader在跳转应用程序前未关闭1ms定时器中断,导致在FreeRTOS初始化阶段意外触发PendSV中断,错误修改了pxCurrentTCB指针。根本原因是bootloader与应用程序的中断管理不协调,建议在跳转应用程序前彻底清除所有中断标志,并确保VTOR寄存器正确指向新的向量表,避免中断误触发导致关键数据

2026-03-30 13:56:01 247 2

原创 未初始化局部变量导致内存信息丢失的bug分析

摘要:应用程序从bootloader跳转后出现中文字体显示异常问题。经DEBUG分析发现,问题源于中文字符匹配失败。具体原因是局部变量ch[5]未初始化,导致存储中文字符时后三位保持随机值,无法与字库正确匹配。解决方法是将该数组初始化为零,确保字符比对时仅包含有效数据。该问题仅在跳转运行时出现,单独烧录正常,说明与内存初始化状态有关。

2026-03-30 13:50:15 406

原创 FreeRTOS的队列介绍以及怎么实现互斥访问,休眠唤醒以及保存数据(环形缓冲区)

前面介绍完了FreeRTOS的一些核心功能,如任务切换,创建任务等等,并将煮包从ARM内核以及内存的视角的相关思考进行了分享,从这里开始介绍FreeRTOS的另外一个板块,就是任务间通信机制,如队列、信号量、互斥量、事件组这些,今天分享的是FreeRTOS队列的学习笔记;是关于标题中的互斥访问、休眠唤醒以及环形缓冲区都会在文章中一一介绍到~~~~关于队列,数据结构里面的描述就不做介绍啦~,最重要的就是队列是FIFO结构,即数据先进先出,对于FreeRTOS的队列,它有如下几个核心知识点:1. 关中断(对应标

2026-03-17 15:42:52 608

原创 通过链表深入理解FreeRTOS内存管理的实现原理

本文分析了FreeRTOS的内存管理实现原理,重点介绍了heap1、heap2和heap4三种内存管理算法。heap1只能分配不能释放内存,heap2通过链表管理解决了释放问题但仍存在内存碎片问题,heap4进一步优化,通过地址排序和相邻块合并机制提高了内存利用率。文章详细阐述了各算法的初始化、分配和释放过程,揭示了FreeRTOS如何通过链表管理内存池,并指出实际分配大小会包含链表头和对齐填充。最后说明这些内容基于韦东山老师的课程总结。

2026-02-23 16:30:17 1248

原创 ARM Cortex M3内核的操作模式

本文解析了ARM Cortex-M3内核中CONTROL寄存器和EXC_RETURN异常返回值的作用。CONTROL寄存器通过bit0和bit1控制处理器操作模式(特权级/用户级)和堆栈指针选择(MSP/PSP),与handler模式和线程模式组合形成三种运行状态。特权级可直接修改CONTROL寄存器,而用户级需通过异常服务例程修改。EXC_RETURN作为32位异常返回值,其低四位决定中断返回行为,包括中断嵌套(0xFFFF_FFF1)、返回MSP(0xFFFF_FFF9)和返回PSP(0xFFFF_FF

2026-02-14 15:00:32 252

原创 通过链表深入理解FreeRTOS的任务调度机制

本文解析了FreeRTOS任务调度机制,包括抢占式调度和时间片轮转调度两种方式。通过链表管理任务状态(就绪、运行、阻塞、挂起),其中就绪链表按优先级数组组织。调度由tick中断触发,涉及现场保存与恢复。空闲任务(IDLE)具有特殊退让规则,会主动让出CPU。文章详细介绍了调度器启动过程、第一个任务启动的硬件相关配置(涉及MSP指针和SVC中断),以及任务切换的本质(寄存器值切换)和过程(在PendSV中断中完成)。最后指出理解这些机制已掌握FreeRTOS约30%的核心内容,后续将探讨IPC通信和内存管理等

2026-02-14 14:45:20 1311

原创 FreeRTOS任务创建时消失的三个形参?

本文详细解析了FreeRTOS任务创建过程中的关键细节,重点分析了任务栈的内存分布机制。作者首先回顾了任务创建函数原型中缺失的pxTaskCode、usStackDepth和pvParameters三个参数在TCB中的转化过程。通过分析源码中的pxPortInitialiseStack函数,揭示了任务栈初始化的核心机制:函数入口地址(pxCode)被存入栈中特定位置,在任务切换时可恢复到PC寄存器;任务参数(pvParameters)则会被恢复到R0寄存器。文章还探讨了任务栈大小的决定因素(局部变量、函数调

2026-02-03 20:15:15 648

原创 FreeRTOS的任务创建在内存上的体现

本文从内存视角分析FreeRTOS任务创建过程,指出任务由TCB(任务控制块)和栈空间两部分组成,都存储在堆内存中。任务创建过程包括:1)申请内存并初始化TCB,设置任务名、优先级等属性;2)初始化任务栈空间,保存任务上下文信息,其中PC寄存器指向任务函数入口。文章还解析了任务创建API参数含义,并展示了栈空间初始化结构图,强调任务切换时上下文信息的重要性。最后补充了PC和EXC_RETURN寄存器的作用说明。

2025-10-24 08:56:20 1757

原创 浅析CM3内核“双堆栈“机制在FreeRTOS任务切换中的应用

本文深入解析FreeRTOS任务切换的底层机制,重点剖析了PendSV中断中的关键汇编代码。文章从CM3内核的"双堆栈机制"(1个主栈+N个任务栈)入手,解释了MSP和PSP指针的作用。通过逐行分析xPortPendSVHandler汇编函数,详细揭示了任务上下文保存与恢复的全过程:当前任务的寄存器值被压入其专属栈空间,新任务的上下文从栈中弹出并恢复。作者特别强调了pxTopOfStack指针在任务切换中的闭环机制,以及中断屏蔽寄存器basepri的保护作用。

2025-09-24 15:04:53 2085 1

原创 深入内核理解ARM单片机的中断机制

以STM32F407为例,中断执行流程如下:a.中断触发(中断源):外设或内核产生中断信号,置位中断标志位。CPU检测到中断请求,若满足优先级条件(未被更高优先级中断抢占、当前指令执行完毕等),则暂停当前任务。自动保存现场(PC、寄存器等上下文)到栈中。根据中断向量表找到对应ISR地址并跳转执行。在ISR中完成具体功能(如数据读取、状态更新等),需手动清除中断标志位。执行完ISR后,自动恢复现场,返回原程序继续执行。需配置中断优先级分组、使能外设及NVIC中断通道,确保标志位正确清除。

2025-06-09 12:21:18 1924 2

空空如也

空空如也

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

TA关注的人

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