• 2024-09-22freeRTOS源码解析4--tasks.c 5
    4.2.13继续任务--vTaskResume接口:voidvTaskResume(TaskHandle_txTaskToResume)形参1:xTaskToResume,想要继续的任务handle;首先是vTaskResume调用的一个内部函数:staticBaseType_tprvTaskIsTaskSuspended(constTaskHandle_txTask),用于检查任务是否是挂起状态,只有挂起的
  • 2024-09-10freeRTOS源码解析4--tasks.c 4
    4.2.9周期任务用的延迟--xTaskDelayUntil接口:BaseType_txTaskDelayUntil(TickType_t*constpxPreviousWakeTime,constTickType_txTimeIncrement)形参1:pxPreviousWakeTime,上一次唤醒时间,第一次需要用接口xTaskGetTickCount()获取;形参2:xTimeIncrement,想要延迟的时间。
  • 2024-09-08freeRTOS源码解析4--task.c 3
    4.2.6任务删除--vTaskDelete这个接口并不复杂,主要是在判断是否要放到xTasksWaitingTermination列表里,还是直接处理。1voidvTaskDelete(TaskHandle_txTaskToDelete)2{3TCB_t*pxTCB;4BaseType_txDeleteTCBInIdleTask=pdFALSE;5BaseTyp
  • 2024-08-07Free-RTOS任务删除函数vTaskDelete()解析
    目录函数vTaskDelete()函数prvDeleteTCB()总结函数vTaskDelete()此函数用于删除已被创建的任务,被删除的任务将从就绪态任务列表、阻塞态任务列表、挂起态任务列表和事件列表中移除,要注意的是,空闲任务会负责释放被删除任务中由系统分配的内存,但是由用户在任务删除前申请的内存,
  • 2024-05-02优先级翻转实验以及分析现象
    优先级翻转实验以及分析现象优先级翻转指的是高优先级的任务反而慢执行,低优先级的任务反而优先执行。优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未知的严重后果。上图中三个任务的优先级
  • 2023-11-16FreeRTOS 原理 --- 最少剩余可用栈 与 栈溢出检查
    函数 uxTaskGetStackHighWaterMark()可用于获取任务的最少剩余可用栈#if(INCLUDE_uxTaskGetStackHighWaterMark==1)UBaseType_tuxTaskGetStackHighWaterMark(TaskHandle_txTask){TCB_t*pxTCB;uint8_t*pucEndOfStack;UBaseType_tuxRetur
  • 2023-10-19FreeRTOS 原理 --- 互斥锁
    互斥锁相比于二值信号量,有以下特点:1、通过优先级继承,防止优先级反转2、只有互斥锁持有的线程可以释放互斥锁3、FreeRTOS提供支持递归版本的互斥锁 创建互斥锁互斥锁使用的描述符是队列的描述符,不单独定义互斥锁描述符。初始化时,指定队列的长度 pxNewQueue->uxLength 为
  • 2023-10-03FreeRTOS 原理 --- 任务通知
    简介任务通知核心包含是一个32位的无符号整数和一个8位的通知状态,这两个在任务控制块中,通知任务就是一个任务或者中断改写另外一个任务中的32位的无符号整数,改写这个整数的方式可以有所不同可以让这个整数加1,模拟信号量设置该整数的指定的某些位,模拟事件组直接选择覆盖或者不