美文网首页
FreeRTOS判断当前程序是否在中断中执行

FreeRTOS判断当前程序是否在中断中执行

作者: tianxiaoMCU | 来源:发表于2019-08-18 14:03 被阅读0次

FreeRTOS中有些API功能相同,但是会有一个带ISR版本的用于中断中,就像下图标出的那样。

如果自己封的函数需要在中断和任务中都调用,简单点就跟着封装两个函数,一个任务中用,一个中断中用。对于我这种有强迫症的还是觉得不爽,如果有方法能判断当前是否处于中断处理程序中不就好办了?幸运的是FreeRTOS自身就提供了一个相关的函数,有了这个函数就可以判断了。

具体代码如下:

extern __asm uint32_t vPortGetIPSR(void);    // 这个函数在FreeRTOS的port.c中可以找到

static __inline bool IS_IRQ(void) 
{
    if (vPortGetIPSR())
        return TRUE;

    return FALSE;
}

判断当前程序是否在中断中执行,如果是那就调用带ISR版本,不然就调用普通版本,这样就不用分别封装两个函数了。

void xxx_func(void)
{
    if (IS_IRQ())
    {
        BaseType_t xHigherPriorityTaskWoken = pdFALSE; 
        vTaskNotifyGiveFromISR(xTaskHdl, &xHigherPriorityTaskWoken);
        portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
    }
    else
    {
        xTaskNotifyGive(xTaskHdl);
    }   
}

相关文章

  • FreeRTOS判断当前程序是否在中断中执行

    FreeRTOS中有些API功能相同,但是会有一个带ISR版本的用于中断中,就像下图标出的那样。 具体代码如下: ...

  • Arduino 中断

    中断介绍 “中断”顾名思义就是中断Arduino当前正在处理的事情而优先去执行中断服务程序。当中断服务程序完成以后...

  • Linux中断详解

    中断与定时器 中断的概念:指CPU在执行过程中,出现某些突发事件急待处理,CPU暂停执行当前程序,转去处理突发事件...

  • Python入门笔记四(流程控制)

    一、条件分支流程 条件语句可以给定一个判断条件,并在程序执行过程中判断该条件是否成立。程序根据判断结果执行...

  • 逆向 - 汇编 - 第三天

    中断 中断是由于软件的或者硬件的信号, 使 CPU 暂停当前任务, 转而去执行另一段子程序. 分类:硬中断 (外中...

  • python中try/except/else/finally的用

    格式 try-except 正常执行的程序在try下面,如果执行过程中出现异常则中断当前在Nomal execut...

  • Java Servlet 运行原理分析

    1 Servlet基本执行过程 Web容器(如Tomcat)判断当前请求是否第一次请求Servlet程序 。 如果...

  • 上下文切换

    背景: 中断导致CPU从执行当前任务改变到执行内核程序。这种操作在通常系统中经常发生,当中断发生时,系统需要保存当...

  • Java 内存结构

    1. 内存区域 程序计数器 保存当前正在执行的程序的内存地址。 JAVA是多线程的,被中断的线程当前执行到哪条内存...

  • IPC:信号

    使用场景:1、为了并发,中断处理其它事件,1、进程间通信1、中断中止(注意不是终止)当前正在执行的程序,转而执行其...

网友评论

      本文标题:FreeRTOS判断当前程序是否在中断中执行

      本文链接:https://www.haomeiwen.com/subject/emjrsctx.html