0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS开关中断定义

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-09-28 11:37 次阅读

FreeRTOS 开关中断

FreeRTOS 开关中断函数为 portENABLE_INTERRUPTS ()和 portDISABLE_INTERRUPTS(),这两个函数其实是宏定义,在 portmacro.h 中有定义,如下:

#define portDISABLE_INTERRUPTS()    vPortRaiseBASEPRI()
#define portENABLE_INTERRUPTS()    vPortSetBASEPRI(0)

可以看出开关中断实际上是通过函数 vPortSetBASEPRI(0)和 vPortRaiseBASEPRI()来实现的。

函数 vPortSetBASEPRI()是向寄存器 BASEPRI 写入一个值,此值作为参数 ulBASEPRI 传 递进来,portENABLE_INTERRUPTS()是开中断,它传递了个 0 给 vPortSetBASEPRI(),根据我们前面讲解 BASEPRI 寄存器可知,结果就是开中断。

函 数 vPortRaiseBASEPRI() 是 向 寄 存 器 BASEPRI 写 入 宏configMAX_SYSCALL_INTERRUPT_PRIORITY , 那 么 优 先 级 低 于configMAX_SYSCALL_INTERRUPT_PRIORITY 的中断就会被屏蔽!

临界段代码

临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,比如有的外设的初始化需要严格的时序,初始化过程中不能被打断。FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断。FreeRTOS 系统本身就有很多的临界段代码,这些代码都加了临界段代码保护,我们在写自己的用户程序的时候有些地方也需要添加临界段代码保护。

FreeRTOS 与 临 界 段 代 码 保 护 有 关 的 函 数 有 4 个 :taskENTER_CRITICAL() 、taskEXIT_CRITICAL() 、 taskENTER_CRITICAL_FROM_ISR() 和taskEXIT_CRITICAL_FROM_ISR(),这四个函数其实是宏定义,在 task.h 文件中有定义。这四个函数的区别是前两个是任务级的临界段代码保护,后两个是中断级的临界段代码保护。

任务级临界代码保护使用方法如下:

图片

中断级临界代码保护使用方法如下:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开关
    +关注

    关注

    19

    文章

    2997

    浏览量

    92725
  • 嵌入式
    +关注

    关注

    4984

    文章

    18300

    浏览量

    288656
  • 寄存器
    +关注

    关注

    30

    文章

    5042

    浏览量

    117768
  • 函数
    +关注

    关注

    3

    文章

    3911

    浏览量

    61313
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61359
收藏 人收藏

    评论

    相关推荐

    rt-thread 优化系列(二) 之 同步和消息关中断分析

    书接前文,上篇优化聊的是关中断操作,在很多地方过保护,导致关中断时间太久,可能引起其它中断不能及时响应。今天特意说说线程间同步和通信,分析一下它们是怎么影响关中断时间的,比起前文会有些
    的头像 发表于 06-21 09:47 3477次阅读

    FreeRTOS中断测试避坑指南

    任何调用中断安全FreeRTOS API函数的中断服务例程都可以使用的最高中断优先级。不要从任何优先级高于此的中断调用
    的头像 发表于 12-21 09:04 461次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>中断</b>测试避坑指南

    转:第15章 FreeRTOS临界段和开关中断

    第15章FreeRTOS临界段和开关中断 本章教程为大家讲解两个重要的概念,FreeRTOS的临界段和开关中断。 本章教程配套的例子含Cortex-M3内核的STM32F103和Cor
    发表于 08-31 10:15

    转第16章 FreeRTOS调度锁,任务锁和中断

    的作用区分开,调度锁只是禁止了任务调度,并没有关闭任何中断中断还是正常执行的。而临界段进行了开关中断操作。16.2 中断中断锁就是RTO
    发表于 09-01 07:45

    为什么ucosII移植后开关中断函数总是报错?

    for CPU status register */ OS_CPU_SRcpu_sr; #endif不加开关中断,功能能实现;加了开关中断,有这个定义不会报错,也能实现功能但我感觉这样肯定不对啊,我
    发表于 07-26 04:35

    STM32,NVIC不能通过FreeRTOS开关中断函数屏蔽中断是怎么回事

    最近用原子的教程学Freertos,最近进度到中断管理的时候卡住了。自己是使用STM32F103ZET6,跑FreeRTOS v10.0.1系统。设置和教程的几乎一样,建立开始任务和中断
    发表于 07-13 07:00

    FreeRTOS_中断Github简介

    STM32CubeMX学习笔记——FreeRTOS_中断Github简介任务创建可视化创建方式代码创建方式开关中断Github简介在应用中有许多禁止被打断的操作,如底层驱动等,这个时候就需要...
    发表于 08-13 06:07

    怎样去使用FreeRTOS中断配置和临界段呢

    函数1.开关中断2.临界段代码1、taskENTER_CRITICAL()和 taskEXIT_CRITICAL()任务级临界代码保护使用方法如下:2.
    发表于 01-14 09:28

    RTThread中开关中断的具体实现过程以及进入临界区的相关操作说明

    1、全局中断对于Cortx-M3系列MCU ,RTThread是通过操作,中断屏蔽寄存器PRIMASK实现开关中断操作的,《Cortex-M3权威指南》中对PRIMASK寄存器有描述如下:这个是只有
    发表于 05-27 14:52

    灯管预热和中断定时器电路图

    灯管预热和中断定时器电路图 灯管预热和中断定时器电路图 在ML4835中设计的
    发表于 07-17 09:36 1069次阅读
    灯管预热和<b class='flag-5'>中断定</b>时器电路图

    基于STM32应用的FreeRTOS中断设置

    一、FreeRTOS中断设置介绍 FreeRTOSConfig.h中定义了两个宏,分别是: configKERNEL_INTERRUPT_PRIORITY
    发表于 11-29 19:46 1612次阅读
     基于STM32应用的<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中断</b>设置

    介绍什么是中断定时器?作用是什么?

    lesson7-1中断定时器
    的头像 发表于 07-09 03:36 8172次阅读
    介绍什么是<b class='flag-5'>中断定</b>时器?作用是什么?

    STM32中断FreeRTOS中断优先级配置

    STM32中断,及FreeRTOS中断优先级配置
    的头像 发表于 03-04 11:45 8206次阅读
    STM32<b class='flag-5'>中断</b>及<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中断</b>优先级配置

    探究PIC单片机的中断定时器运用

    探究PIC单片机的中断定时器运用
    发表于 10-18 09:49 2次下载

    STM32之FreeRTOS:(一) 中断配置和临界段的使用

    API函数1.开关中断2.临界段代码1、taskENTER_CRITICAL()和 taskEXIT_CRITICAL()任务级临界代码保护使用方法如下:2.
    发表于 01-14 15:43 3次下载
    STM32之<b class='flag-5'>FreeRTOS</b>:(一) <b class='flag-5'>中断</b>配置和临界段的使用