RTOS事件控制块
事件控制块 它一般作为信号量、消息队列、事件标志等功能的基础。 功能 任务在事件控制块上等待,暂停运行 事件发生,通知事件控制块 时间控制块通知等待任务列表中的任务 被通知的任务脱离事件控制块,继续运行 解决的问题 实现任务间的同步 解决多任务共享资源的冲突问题 实现多任务间的消息传递 在中断ISR与任务之间传递多个事件标志 实现原理 事件控制块的...
事件控制块 它一般作为信号量、消息队列、事件标志等功能的基础。 功能 任务在事件控制块上等待,暂停运行 事件发生,通知事件控制块 时间控制块通知等待任务列表中的任务 被通知的任务脱离事件控制块,继续运行 解决的问题 实现任务间的同步 解决多任务共享资源的冲突问题 实现多任务间的消息传递 在中断ISR与任务之间传递多个事件标志 实现原理 事件控制块的...
当前任务状态转换图 任务的挂起 概念:展示禁止任务占用CPU运行,也就是无条件暂停任务运行,增加了挂起状态的任务状态切换图: 实现 添加挂起计数器:记录任务被挂起的次数 编写挂起函数与唤醒函数: ```c void taskSuspend(task_t* task) { uint32_t st = enterCritical(); if (task-&...
目标 允许RTOS支持多个任务拥有同一优先级,同一优先级的任务按时间片来占用CPU运行 实现 将任务就绪表taskTable的类型改为’listHead’,即在任务就绪表中保存一个链表的头节点,就绪表中不同的表项表示不同的优先级,同一个优先级的任务则通过链表结点连接到taskTable中对应的链表头上。 在task结构中添加linkNode元素,用于将任务插入到对应的优先级链表上,同时要添...
处理任务延时的问题 当前处理任务延时是通过扫描任务数组来实现的,且无论任务有没有被延时,在每个时钟节拍都要扫描所有任务,这种方式比较耗时。在后期实现多任务相同优先级时,这种方式将更加耗时。 更加快速、简单的方法 将所有需要延时的任务单独放置在一个队列当中,每次发生系统时钟节拍时,只需要扫描这个延时队列即可,避免了扫描所有任务的耗时行为 方式一:独立保存延时时间 此方法在每个延...
多优先级概述 问题:当资源(CPU、事件等等)可用时,应该分配哪个任务去占用这些资源呢? 使用优先级策略可以解决这个问题。将任务按优先级进行划分,优先级高的优先占有资源运行。 实现 RTOS维护一个就绪表,每个表项对应一个任务,代表一个不同的优先级。就绪表指明哪些优先级的任务等待占用资源。使用位图数据结构来标识这个就绪表的状态,位图的某一位为1代表就绪表的这一表项中的任务等待占用CPU(资...
位图概述 位图是一组连续的标志位,每一位用于标识某种状态的有无。 实现 typedef struct { uint32_t bitmap; }Bitmap; void bitmapInit(Bitmap* bitmap); void bitmapSet(Bitmap* bitmap, uint32_t pos); void bitmapClear(Bitmap* bitmap, uin...
调度锁是什么? 一种锁,上锁之后使得当前任务一直运行,不能进行任务切换,解锁后才能切换任务。 代码实现 uint8_t schedLockCount = 0; void schedLockInit(void){ schedLockCount = 0; } void lockSched(void) { uint32_t st = enterCritical(); if (sch...
临界区的概念 临界区指的是访问多个任务共享的资源的一段代码。临界区在任何时间内只允许一个任务进入并执行的代码段,当有任务进入临界区时,其它任务必须等待至该任务离开临界区,来确保对共享资源的访问不会冲突。 临界区的目的 防止数据竞争(Data Race),即多个线程同时读写同一数据导致的结果不确定性和不一致性问题。 确保操作的原子性,即对于临界资源的操作要么全部完成,要么完全不执行...
代码在这里 任务是什么? 任务的外观:一个永远不会返回的函数。 无返回值 单个void *参数,即可以传递任意参数 永远不会返回, 任务内一般是一个死循环 任务的内在: 一个函数的执行 分为堆、栈、数据区、代码区 代码区由程序员实现,存放编写的代码 通过代码可以控制寄存器进...
NVIC概览 向量中断控制器,即NVIC,是 Cortex-M3 不可分离的一部分,它与 CM3 内核的逻辑紧密耦合。NVIC 与 CM3 内核同声相应,同气相求,相辅相成,里应外合,共同完成对中断的响应。NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外,NVIC 还包含了 MPU、SysTick 定时器以及调试控制相关的寄存器。 NVIC 共...