FreeRTOS任务挂起和恢复

FreeRTOS任务挂起和恢复_第1张图片

 前言

本篇文章记录我学习FreeRTOS实时操作系统有关任务的挂起和恢复的知识,希望我的分享能给你带来不一样的收获!文中会涉及一些有关任务挂起和恢复的API函数,需要了解的读者可以参考以下文章:FreeRTOS任务相关的API函数-CSDN博客

目录

一、FreeRTOS任务挂起和恢复

(一)、实验目的

(二)、实验设计 

(三)、程序分析与设计 

1、任务设置

 2、任务函数

3、中断初始化及处理过程 

二、结语 

FreeRTOS任务挂起和恢复_第2张图片


一、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、任务设置

实验中需要设置的是任务优先级、堆栈大小、任务句柄等。

FreeRTOS任务挂起和恢复_第3张图片

mian()函数

FreeRTOS任务挂起和恢复_第4张图片

在main函数中我们主要完成硬件的初始化,在硬件初始化完成以后创建了任务start_task()并且开启了FreeRTOS的任务调度。

 2、任务函数

FreeRTOS任务挂起和恢复_第5张图片

(1)、start_task 任务,用于创建其他3个任务。
(2)、在 key_tssk任务里面,KEY_UP被按下,调用函数vTaskSuspend()挂起任务1。

(3)、KEY1被按下,调用函数vTaskResume()恢复任务1的运行。
(4)、KEY2被按下,调用函数vTaskSuspend()挂起任务2。
(5)、任务1的任务函数,用于观察任务挂起和恢复的过程。
(6)、任务2的任务函数,用于观察任务挂起和恢复的过程(中断方式)。

3、中断初始化及处理过程 

FreeRTOS任务挂起和恢复_第6张图片

(1)、设置中断优先级,前面在讲解FreeRTOS中断的时候就讲过,如果中断服务函数要使用FreeRTOS的  API函数的话那么中断优先级一定要低于configMAX_sYSCALL_INTERRUPT_PRIORITY!这里设置为6。
(2)、调用函数xTaskResumeFromISR()来恢复任务2的运行。
(3)、根据函数xTaskResumeFromISR()的返回值来确定是否需要进行上下文切换。当返回值为pdTRUE的时候就需要调用函数 portYIELD_FROM_ISR()进行上下文切换,否则的话不需要。

二、结语 

关于FreeRTOS任务挂起和恢复的实训就到此结束了,希望我的的分享能给你带来不一样的收获!需要源工程的读者可以从下方链接免费获取。如有疑问,可以下方留言或私信我。

https://download.csdn.net/download/m0_73931287/88829204

FreeRTOS任务挂起和恢复_第7张图片

 

你可能感兴趣的:(FreeRTOS实时操作系统,FreeRTOS实时操作系统)