FreeRTOS任务挂起和恢复

 前言

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

目录

一、FreeRTOS任务挂起和恢复

(一)、实验目的

(二)、实验设计 

(三)、程序分析与设计 

1、任务设置

 2、任务函数

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

二、结语 


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

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

 

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小_扫地僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值