欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 02【FreeRTOS-任务-命名规则与常用优先级函数与挂起或解挂】

02【FreeRTOS-任务-命名规则与常用优先级函数与挂起或解挂】

2025/2/22 2:09:24 来源:https://blog.csdn.net/Clock77582481/article/details/145639812  浏览:    关键词:02【FreeRTOS-任务-命名规则与常用优先级函数与挂起或解挂】
补充: 红色 部分为重要部分;
绿色 为解析或者补充,如果红色前有绿色,代表文章后有 相关知识
蓝色 为代 ,如果蓝色内部有红色如上;
紫色 为自我理解与认知不一定正确。
1.命名规则
2.常用函数
如何获取改变任务的优先级:
task.h
//定义一个优先级变量        
UBaseType_t  uxPriority;
//优先级获取函数   INCLUDE_vTaskPriorityGet   = 1    (内部参数是任务控制块) 为NULL时表示查询调用此函数的任务的优先级。
uxPriority  = uxTaskPriorityGet(NULL);   
//优先级设置    INCLUDE_vTaskPrioritySet   = 1 (内部参数为任务控制块,任务优先级) 如果任务块为NULL默认为本身函数
vTaskPrioritySet();
3.任务的挂起与恢复
任务挂起是一种任务状态控制机制。当一个任务被挂起,它不会被任务调度器执行,直到它被恢复,这就好比把一个正在运行的程序片段暂停,并且任务系统暂时不会去管它,直到你明确地告诉系统可以继续运行这个任务。
任务恢复就是让挂起的任务重新进入就绪状态,恢复的任务会保留被挂起前的状态信息,在恢复的时候根据挂起时的状态继续运行,如果被恢复任务在所有就绪任务中,处于最高优先级列表的第一位,那么系统将进行任务上下文的切换。
使用:多个任务需要访问共享资源时,为了避免数据冲突和错误操作,需要对访问进行控制;
当系统检测到某个任务出现异常:死循环,内存泄漏等等
    任务挂起与删除的区别:删除就是完全删除,但是挂起会保留其内部的资源,在恢复后依旧可以使用;
task.h
//挂起任务         INCLUDE_vTaskSuspend = 1
void vTaskSuspend( TaskHandle_t xTaskToSuspend );
//恢复被挂起的函数     INCLUDE_vTaskSuspend = 1;
void vTaskResume( TaskHandle_t xTaskToResume );
无论优先级如何被挂起后都将不在执行直到任务被恢复;
//在中断中恢复被挂起的任务     INCLUDE_xTaskResumeFromISR  = 1  INCLUDE_vTaskSuspend = 1
BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume );
中断属于一种异常状态,和任务执行栈的区间也是不同的每一个中断都有一个独属于它的栈区的;
注意:中断服务函数中要调用freeRTOS的API函数则中断优先级不能高于FreeRTOS所管理的最高优先级。
//中断回调函数

注意:每个中断函数都会调用该回调函数所以判断条件要有区别不能相同

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{
    if(GPIO_Pin == GPIO_PIN_0)
    {
        HAL_Delay(10);
        xTaskResumeFromISR(task2_TCB);
    }

}

//任务切换
portYIELD_FROM_ISR
//补充临
临界 段是一段代码,在这段代码中,进程或者线程访问共享资源如(共享变量,外设)这些共享资源在同一时刻只能被一个任务访问,以确保数据的一直性和完整性,如果多个任务在同一时刻访问这些共享资源,可能会导致数据竞争,和不一致的结果,用一句话表示就是一段在执行时不能被中断的代码段

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词