十、什么是临界资源及如何访问临界资源

这篇具有很好参考价值的文章主要介绍了十、什么是临界资源及如何访问临界资源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、什么是临界资源?

临界资源是一次仅允许一个进程使用的共享资源。通俗可以理解为同一时刻只能由一个进程进行访问的资源。

2、什么是临界区?

每个进程中访问临界资源的那段代码称为临界区(Critical Section)。即是一段不能被打断的代码段
即保护了关键代码的执行不被打断,但也会影响系统的实时,任何使用了操作系统的中断响应都不会比裸机快。
每次只准许一个进程进入临界区,进入后不允许其他进程进入。

3、临界资源访问的两种方法

FreeRTOS中提供读写队列等API函数内部,均进行了临界资源的访问(即不会被其他事情干扰),在任务中如果不想使用队列等并且也不想被其他事情打扰均可参考这种进入临界区的做法。

(1)关闭中断:避免了其他任务和中断来破坏,即这时候中断和任务调度无法正常进行

在FreeRTOS提供的读写队列、信号量、互斥量等API函数里面,均实现了临界区的访问,其采用的均是关闭中断的方法来进行临界区的访问。
那么问题来了——这个关闭中断是关闭了所有中断吗?
答案很显然,肯定不是了,它关闭的只是部分优先级较低的中断。FreeRTOS为什么这样操作和在代码上如何做的在后面中断管理的博客中会详细说说。

进行临界资源访问的时候,这些API函数都是成对出现的,即有进入临界区的API函数,也有退出的。具体如下

1)在任务中屏蔽中断

/* 在任务中,当前时刻中断是使能的
* 执行这句代码后,屏蔽中断
*/
taskENTER_CRITICAL();
/* 访问临界资源 */
/* 重新使能中断 */
taskEXIT_CRITICAL();

2)在中断服务函数中屏蔽中断

{
 /* 用来记录当前中断是否使能 */
 UBaseType_t uxSavedInterruptStatus;
 
 /* 在 ISR 中,当前时刻中断可能是使能的,也可能是禁止的
 * 所以要记录当前状态, 后面要恢复为原先的状态
 * 执行这句代码后,屏蔽中断
 */
 uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
 
 /* 访问临界资源 */
 /* 恢复中断状态 */
 taskEXIT_CRITICAL_FROM_ISR( uxSavedInterruptStatus );
 /* 现在,当前 ISR 可以被更高优先级的中断打断了 */
}

3)补充说明

taskENTER_CRITICA()/taskEXIT_CRITICAL()之间和taskENTER_CRITICA_FROM_ISR()/taskEXIT_CRITICAL_FROM_ISR()之间:
a)低优先级的中断被屏蔽了:即优先级低于、等于configMAX_SYSCALL_INTERRUPT_PRIORITY
b)高优先级的中断可以产生:优先级高于configMAX_SYSCALL_INTERRUPT_PRIORITY

4)为什么关闭中断也使任务调度停止了?——因为任务调度依赖于systick中断

(2)关闭调度器:避免了其他任务破坏,但这时候中断还是可以发生和处理的

在事件组的相关API函数内部进入临界区的方法均是采用关闭调度器的方法

/* 暂停调度器 */
void vTaskSuspendAll( void );
/* 恢复调度器
* 返回值: pdTRUE 表示在暂定期间有更高优先级的任务就绪了
* 可以不理会这个返回值
*/
BaseType_t xTaskResumeAll( void );

4、如果没有使用临界区后果会如何?

(1)应用任务的优先级比初始任务高时

创建完应用任务后会立马去执行优先级最高的任务,当其被阻塞时回到初始任务继续创建任务,直至应用任务创建完成,最后把自己(初始任务)删除。

(2)应用任务的优先级和初始任务一样时

创建完应用任务后根据任务的时间片来执行,直到所有应用任务创建完成,最后初始任务把自己删除。

(3)应用任务的优先级比初始任务低时

创建完应用任务后不会被执行,除非优先级和上述两种情况一样,直到所有应用任务创建完成,最后初始任务把自己删除。文章来源地址https://www.toymoban.com/news/detail-742365.html

到了这里,关于十、什么是临界资源及如何访问临界资源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F4+FreeRTOS+LVGL实现嵌入式快速开发(缝合怪)

    极速进行项目开发,只需要懂一款芯片架构+一个操作系统+一个GUI。各种部件程序全靠抄 ,成为究极缝合怪。本文用stm32f407+FreeRTOS+lvgl演示一些demo。 原文链接:STM32F4+FreeRTOS+LVGL实现快速开发(缝合怪) lvgl官方的音乐播放器demo: 百问网的2048小游戏: STM32F407这款芯片就不多介绍

    2024年02月08日
    浏览(65)
  • FreeRTOS 中断配置和临界段

    1. 中断简介 中断是微控制器一个很常见的特性,中断由硬件产生,当中断产生以后 CPU 就会中断当前的流程转而去处理中断服务,Cortex-M 内核的 MCU 提供了一个用于中断管理的嵌套向量中断控制器(NVIC)。 Cotex-M3 的 NVIC 最多支持 240 个 IRQ(中断请求)、1 个不可屏蔽中断(NMI)、1 个

    2023年04月10日
    浏览(40)
  • 【蓝桥杯嵌入式】资源拓展板模块详解——数码管

    目录 一、原理 1.1数码管 1.2 74HC595 二、编码说明 2.1 数码管字模 2.2十六进制数字模编码参考 三、程序设计 3.1 原理图 3.2 逻辑分析 3.3 配置方法和参考代码 3.4 参考例程   1.1数码管   扩展板使用3位5161AS数码管。 5161AS数码管引脚图:     5161AS数码管原理图:     从上图可知,

    2024年02月04日
    浏览(44)
  • 初级嵌入式软件工程师养成记(学习路线+学习资源+实战项目汇总)

    我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强企业! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! 世界这么大,还是遇见你… 大家好,我是董哥,一名嵌入式 Linux 开发工程师,

    2024年02月13日
    浏览(74)
  • stm32 freertos多任务状态迁移,中断临界段,任务延时

    arm中SP,LR,PC寄存器以及其它所有寄存器以及处理器运行模式介绍 特权级与用户级的区别主要是某些寄存器能不能访问与修改: cortex M3/M4内核 特权级与用户级详解 Cortex-M3双堆栈MSP和PSP Cortex-M3双堆栈MSP和PSP M3内核何时使用MSP何时使用PSP? 特权级可以使用MSP 和PSP指针 用户级

    2024年02月12日
    浏览(56)
  • 【Linux】临界资源和临界区

    目录 一、临界资源 二、如何实现对临界资源的互斥访问  1、互斥量  2、信号量  3、临界区 三、临界区 四、进程进入临界区的调度原则 概念:临界资源是 一次 仅允许 一个 进程使用的 共享资源 ,如全局变量等。 互斥量是用来保护临界区的一种机制。当一个线程需要访问

    2024年02月11日
    浏览(24)
  • 什么是多态?多态有什么用途?(嵌入式学习)

    多态(Polymorphism)是面向对象编程中的一个重要概念,指的是同一种操作或函数可以在不同的对象上具有不同的行为。它允许以一种统一的方式使用不同类型的对象,而不需要关心具体对象的类型。 多态性可以通过两种方式实现:静态多态和动态多态。 静态多态(Static Pol

    2024年02月09日
    浏览(46)
  • 什么是嵌入式AI

    人工智能概念: AI,英文的直译就是人工智能,什么是人工智能?计算机科学家们为我们定义了:就是希望计算机有类似人的意识,比如可以推理,自我学习,感情等能力,研究、开发用于模拟、延伸和扩展人智能的理论、方法、技术及应用系统的一门新技术科学。人工智能

    2024年04月23日
    浏览(41)
  • 嵌入式linux开发板,通过网线连接电脑,共享电脑无线网络,访问外网

    控制面板----网络和 Internet----网络连接 右击WLAN----属性 “以太网”即开发板通过网线连接的电脑网口 点击确定后,一般会出现 以太网的IP地址将自动改为192.168.137.1。可通过“右击以太网----属性----lnternet 协议版本4 (TCP/IPv4)----属性”查看IP地址是否已修改。 设置IP,需要与以太

    2024年02月12日
    浏览(49)
  • 100篇帮小白入门——什么是嵌入式系统?

    嵌入式系统 是指一种基于微处理器或微控制器的特定应用系统,通常在某个产品或系统中被嵌入到一个电路板或芯片中。这种系统通常用于控制和监测各种设备和系统,例如汽车、工业机器人、智能家居和医疗设备等。嵌入式系统的应用广泛,其使用范围覆盖了几乎所有的行

    2024年02月02日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包