前言
本篇文章记录我学习FreeRTOS实时操作系统有关任务的挂起和恢复的知识,希望我的分享能给你带来不一样的收获!文中会涉及一些有关任务挂起和恢复的API函数,需要了解的读者可以参考以下文章:FreeRTOS任务相关的API函数-CSDN博客
目录
一、FreeRTOS任务挂起和恢复
(一)、实验目的
学习使用FreeRTOS 的任务挂起和恢复相关API函数,包括vTaskSuspend()、vTaskResume()和xTaskResumeFromISR()。
(二)、实验设计
本实验设计4个任务: start_task、key_task、taskl_task 和task2_task,这四个任务的任务功能如下:
start_task:用来创建其他3个任务。
key_task:按键服务任务,检测按键的按下结果,根据不同的按键结果执行不同的操作。task1 _task:应用任务1。
task2_task:应用任务2。
实验需要四个按键,KEYO、KEY1、KEY2和KEY_UP,这四个按键的功能如下:KEYO:此按键为中断模式,在中断服务函数中恢复任务2的运行。
KEY1:此按键为输入模式,用于恢复任务1的运行。
KEY2:此按键为输入模式,用于挂起任务2的运行。KEY_UP:此按键为输入模式,用于挂起任务1的运行。
(三)、程序分析与设计
1、任务设置
实验中需要设置的是任务优先级、堆栈大小、任务句柄等。
mian()函数
在main函数中我们主要完成硬件的初始化,在硬件初始化完成以后创建了任务start_task()并且开启了FreeRTOS的任务调度。
2、任务函数
(1)、start_task 任务,用于创建其他3个任务。
(2)、在 key_tssk任务里面,KEY_UP被按下,调用函数vTaskSuspend()挂起任务1。(3)、KEY1被按下,调用函数vTaskResume()恢复任务1的运行。
(4)、KEY2被按下,调用函数vTaskSuspend()挂起任务2。
(5)、任务1的任务函数,用于观察任务挂起和恢复的过程。
(6)、任务2的任务函数,用于观察任务挂起和恢复的过程(中断方式)。
3、中断初始化及处理过程
(1)、设置中断优先级,前面在讲解FreeRTOS中断的时候就讲过,如果中断服务函数要使用FreeRTOS的 API函数的话那么中断优先级一定要低于configMAX_sYSCALL_INTERRUPT_PRIORITY!这里设置为6。
(2)、调用函数xTaskResumeFromISR()来恢复任务2的运行。
(3)、根据函数xTaskResumeFromISR()的返回值来确定是否需要进行上下文切换。当返回值为pdTRUE的时候就需要调用函数 portYIELD_FROM_ISR()进行上下文切换,否则的话不需要。
二、结语
关于FreeRTOS任务挂起和恢复的实训就到此结束了,希望我的的分享能给你带来不一样的收获!需要源工程的读者可以从下方链接免费获取。如有疑问,可以下方留言或私信我。