- 博客(40)
- 收藏
- 关注
原创 单片机从编译到启动的流程
c源文件、.h头文件:预处理后的.i文件删除所有注释展开宏定义(#define处理条件编译(#if#ifdef将#include的头文件内容插入到当前位置。
2026-03-01 16:40:07
831
原创 FreeRTOS内核(七)中断的核心机制
FreeRTOS 的所有内核对象操作(队列、信号量、任务通知等)都提供两套 API,分别用于和。FromISR:中断服务程序必须尽快执行,中断版本的 API 没有等待时间参数,总是立即返回成功或失败。:当在中断中向队列发送数据时,可能唤醒一个因等待该队列而阻塞的任务。如果这个被唤醒的任务优先级比当前被中断的任务高,理论上应该进行任务切换。:如果每唤醒一个高优先级任务就立即切换,而中断中可能多次调用 API(比如多次发送数据),就会导致多次无意义的切换,浪费 CPU 时间。。:中断版本多了一个输出参数。
2026-03-01 15:08:30
484
原创 FreeRTOS内核(六)定时任务的核心机制
定时器的通用实现逻辑,这是理解 FreeRTOS 的前提:超时时间:比如设置 100ms,就是(记为),当累加到这个值时触发回调;定时器链表:所有定时器通过挂到一个链表中,且链表按从小到大排序。FreeRTOS 为了保证中断的快速退出和提高灵活性,采用了“委托”机制。被唤醒的两种情况:情况1:收到用户操作(启动/停止/修改定时器)的命令消息(来自 xTimerQueue);情况2:阻塞等待超时(无新命令,且链表头定时器的超时时间已到);若因“阻塞超时”唤醒:主动遍历定时器链表,处理所有超时的定时
2026-03-01 13:15:12
913
原创 FreeRTOS内核(五)事件组与任务通知的核心机制
操作队列/信号量事件组临界区保护(关中断)(仅禁调度)原因支持 ISR 访问,需防中断干扰等待仅限任务;设置 ISR 版走代理模式,实际修改在任务中唤醒策略通常唤醒一个任务 (FIFO 或优先级)遍历链表,唤醒所有满足条件的任务数据清除队列出队即删除数据可选(自动清零) 或保留 (手动清零结构体复用Queue_t独立。
2026-02-28 22:54:01
945
原创 FreeRTOS内核(四)信号量与互斥量的核心机制
信号量、互斥量的句柄本质都是队列句柄,底层均通过计数值:复用队列的字段,代表「资源数 / 可用状态」;无数据区:创建时指定,无需拷贝数据,仅管理计数值和等待状态;等待链表:复用(等待获取)、(等待释放),管理阻塞的任务;原子操作:所有计数值修改(++/--)均在关中断后执行,保证多任务 / 中断下的原子性。
2026-02-28 17:30:34
676
原创 FreeRTOS内核(二)任务的核心机制
任务 = 函数 + 独立栈:函数是业务逻辑,栈是保存局部变量、调用关系、现场的空间;TCB 是任务的 “身份证”:保存栈顶指针、优先级、链表节点,用来管理任务;链表用于任务管理:就绪链表、延迟链表、挂起链表,分别管理不同状态的任务;调度器靠 Tick 中断驱动:每隔一段时间检查延迟链表、切换任务;核心调度规则:高优先级抢占,同优先级时间片轮转;空闲任务是 “兜底”:优先级最低,做清理工作,还会礼让同优先级任务;硬件中断(包括Tick) > PendSV 中断 > 任务。
2026-02-28 11:34:11
920
原创 力扣刷题记录4(无算法背景,纯C语言)
一开始写错了(对和进行了跨越相加,而不是抛弃重新开始)后面加了一个globle参数进行历史记录,后边进行重新开始合计。
2026-02-04 14:54:24
212
原创 力扣刷题记录3(无算法背景,纯C语言)
15、杨辉三角(118 动态规划,正常解)15、只出现一次的数字(136技巧 异或)14、爬楼梯(70动态规划 记忆递归)16、多数元素(169技巧 投票法)13、找字符串中所有字母异位词。
2026-02-01 23:48:11
589
原创 单片机内存分配管理笔记
与 BSS 段的核心区别:BSS 段是静态分配(编译链接时确定大小),堆区是动态分配(运行时确定大小);核心特性:程序上电启动后,启动文件会自动将 bss 段对应的 RAM 区域全部清零(赋 0),因此未初始化的全局 / 静态变量默认值一定是 0;与 BSS 段的核心区别:都是存全局 / 静态数据、都占 RAM,但 data 段需要 Flash 存初始值,BSS 段不需要。与 text 段的关系:text 段偏 “执行指令”,rodata 段偏 “只读数据”,本质都是 Flash 中的只读内容。
2026-01-27 20:54:10
694
原创 STM32低频函数信号发生器(四通道纯软件生成)
本项目以 “低成本、多通道、易操作” 为目标,开发一款基于单片机 + DAC 方案的低频函数信号发生器,用于满足电子电路调试中的多支路同步信号激励需求。设备以STM32G431CBU6为主控,通过单片机定时器触发 DMA 传输与 DAC 转换,结合预定义波形数组实现信号生成,具备 4 路独立输出通道,支持 0.30~3.00V 幅值、0.1~50kHz 频率、0~100% 占空比的精准调节,可输出正弦波、双向锯齿波、方波、三角波共 5 种波形。
2026-01-26 19:17:39
703
原创 TFT屏幕:STM32硬件SPI+DMA+队列自动传输
加入队列前的基本流程是控制"DC电平->写入数据->等待DMA传输完成->DC电平->写入数据->等待DMA传输完成"这种操作是很浪费时间资源的,那么加入队列之后的操作是"写入数据->写入数据->写入数据"大部分时间都在写入队列与中断中,其它部分都是DMA自己在传输数据,不需要一直等待。看了网上的很多的SPI+DMA的代码,感觉都有一些缺陷,就是基本都是需要有手动等待DMA完成的这个操作,我感觉这种等待操作在很大程度上浪费了时间,那么我加入的“队列”就是一种将等待时间利用起来的方法。最后是完整版本的代码。
2025-09-01 21:46:49
952
原创 【已解决】供电需求突变,导致单片机重启
如果初始化时,使GPIO输出低电平,三极管截至,MOS关闭,此时,附属元器件无供电,单片机工作正常。后面若使GPIO输出高电平,开启附属元器件供电,此时会使单片机重启。
2025-04-20 13:00:00
690
原创 Vscode进入代理模式的暴力方法
就是在使用Platformio的时候,发现要使用新开发板的时候一直得下载很久,然后我就发现就算我在外面的软件打开了代理模式,但是Vscode还是无法访问外部网站。尝试了很多办法之后都没有成功,最后我不知道从哪里找来的方法,百试百灵。只要把这两部分结合一下,在我这里就是127.0.0.1:61995。然后进入CMD命令行输入以下命令,这样子就可以进入代理模式了。首先得找到自己的端口号,软件里面正常是有的。
2024-11-25 19:00:17
1088
原创 FreeRTOS学习笔记---ESPIDF中的不同
3.自己的API,可以定义任务在哪个核上运行,通常0是运行无线信号任务,1是其他任务。1.ESP32具有多核心,而原本的FreeRTOS是为单核系统准备的。2.自动创建五个任务。
2024-11-18 20:36:07
251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
4