【RTOS】快速体验FreeRTOS所有常用API(10)资源管理

本文详细介绍了FreeRTOS中的资源管理,包括基本概念、任务调度器的暂停与恢复、中断的屏蔽与恢复。通过实例展示了如何使用vTaskSuspendAll,xTaskResumeAll,taskENTER_CRITICAL,taskEXIT_CRITICAL等API实现互斥操作和控制任务调度与中断。
摘要由CSDN通过智能技术生成

快速体验FreeRTOS所有常用API(1)工程创建
快速体验FreeRTOS所有常用API(2)任务管理
快速体验FreeRTOS所有常用API(3)同步与互斥
快速体验FreeRTOS所有常用API(4)队列
快速体验FreeRTOS所有常用API(5)信号量、互斥量
快速体验FreeRTOS所有常用API(6)事件组
快速体验FreeRTOS所有常用API(7)任务通知
快速体验FreeRTOS所有常用API(8)软件定时器
快速体验FreeRTOS所有常用API(9)中断管理
快速体验FreeRTOS所有常用API(10)资源管理
快速体验FreeRTOS所有常用API(11)打印空闲栈、CPU占用比

十、资源管理

该部分在上份代码基础上修改得来,代码下载链接:

https://wwzr.lanzout.com/iqBYJ1lauxof

密码:9adb

该代码尽量做到最简,不添加多余的、不规范的代码。

内容主要包括

  • 互斥的本质
  • 关中断
  • 关任务调度器

最终实现效果:

  • 创建任务1、任务2,任务1中暂停中断/调度器,死循环3s,后恢复中断/调度器。

img

10.1 基本概念

资源管理主要是说管理共享资源

资源管理涉及到任务之间对共享资源的互斥****访问

用 队列、信号量/互斥量、事件组、任务通知 都可以实现互斥操作。

他们实现互斥的本质,其实就是 关中断关任务调度器。这个在其函数内部都可以找到,最终都会调用这两个函数中的一个:关任务调度器vTaskSuspendAll(); 关中断taskENTER_CRITICAL();

互斥****的核心思想谁跟我抢,就先禁止谁。(任务抢资源,就关任务调度器。中断抢资源,就关中断)

10.2 关任务调度器

在FreeRTOS中,可以使用 vTaskSuspendAllxTaskResumeAll 函数来暂停和恢复调度器。这对于禁止任务切换非常有用,可以确保在关键部分的代码中不会发生任务切换。

// 暂停调度器
vTaskSuspendAll();

// 关键代码段,此时任务切换被禁止

// 恢复调度器
xTaskResumeAll();

10.3 关中断

在FreeRTOS中,可以使用 taskENTER_CRITICALtaskEXIT_CRITICAL 宏来屏蔽和恢复中断。适用于需要禁止中断的关键代码段。在中断被屏蔽时,所有中断都会被禁止,包括时钟中断和其他外部中断。任务调度器的运行依赖于时钟中断(SysTick),所以任务调度器也自然失效了

// 屏蔽中断
taskENTER_CRITICAL();

// 关键代码段,此时中断被禁止

// 恢复中断
taskEXIT_CRITICAL();

10.4 实例

img

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值