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

发布时间:2024年01月16日

十、资源管理

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

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

文章来源:https://blog.csdn.net/weixin_44029896/article/details/135635417
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。