
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
信号量、互斥量的句柄本质都是队列句柄,底层均通过计数值:复用队列的字段,代表「资源数 / 可用状态」;无数据区:创建时指定,无需拷贝数据,仅管理计数值和等待状态;等待链表:复用(等待获取)、(等待释放),管理阻塞的任务;原子操作:所有计数值修改(++/--)均在关中断后执行,保证多任务 / 中断下的原子性。

g_Count++

c源文件、.h头文件:预处理后的.i文件删除所有注释展开宏定义(#define处理条件编译(#if#ifdef将#include的头文件内容插入到当前位置。

操作队列/信号量事件组临界区保护(关中断)(仅禁调度)原因支持 ISR 访问,需防中断干扰等待仅限任务;设置 ISR 版走代理模式,实际修改在任务中唤醒策略通常唤醒一个任务 (FIFO 或优先级)遍历链表,唤醒所有满足条件的任务数据清除队列出队即删除数据可选(自动清零) 或保留 (手动清零结构体复用Queue_t独立。

任务 = 函数 + 独立栈:函数是业务逻辑,栈是保存局部变量、调用关系、现场的空间;TCB 是任务的 “身份证”:保存栈顶指针、优先级、链表节点,用来管理任务;链表用于任务管理:就绪链表、延迟链表、挂起链表,分别管理不同状态的任务;调度器靠 Tick 中断驱动:每隔一段时间检查延迟链表、切换任务;核心调度规则:高优先级抢占,同优先级时间片轮转;空闲任务是 “兜底”:优先级最低,做清理工作,还会礼让

定时器的通用实现逻辑,这是理解 FreeRTOS 的前提:超时时间:比如设置 100ms,就是(记为),当累加到这个值时触发回调;定时器链表:所有定时器通过挂到一个链表中,且链表按从小到大排序。FreeRTOS 为了保证中断的快速退出和提高灵活性,采用了“委托”机制。被唤醒的两种情况:情况1:收到用户操作(启动/停止/修改定时器)的命令消息(来自 xTimerQueue);情况2:阻塞等待超时(无

实现串口bootloader

加入队列前的基本流程是控制"DC电平->写入数据->等待DMA传输完成->DC电平->写入数据->等待DMA传输完成"这种操作是很浪费时间资源的,那么加入队列之后的操作是"写入数据->写入数据->写入数据"大部分时间都在写入队列与中断中,其它部分都是DMA自己在传输数据,不需要一直等待。看了网上的很多的SPI+DMA的代码,感觉都有一些缺陷,就是基本都是需要有手动等待DMA完成的这个操作,我感觉这

FreeRTOS 的所有内核对象操作(队列、信号量、任务通知等)都提供两套 API,分别用于和。FromISR:中断服务程序必须尽快执行,中断版本的 API 没有等待时间参数,总是立即返回成功或失败。:当在中断中向队列发送数据时,可能唤醒一个因等待该队列而阻塞的任务。如果这个被唤醒的任务优先级比当前被中断的任务高,理论上应该进行任务切换。:如果每唤醒一个高优先级任务就立即切换,而中断中可能多次调用








