FreeRTOS软件定时器apollo中断状态判断

 更新时间:2022年04月07日 16:35:25   作者:jiang_2018  
这篇文章主要为大家介绍了FreeRTOS软件定时器apollo中断状态的判断,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

问题场景

开发中发现FreeRTOS软件定时器不走了,具体表现在软件定时器中断进不去。

分析问题

观察发现只有在某个任务执行期间,FreeRTOS的软件定时器才会不走,其他任务执行时正常,排查后是此任务的优先级比定时器任务高,且占用时间比较长,导致任务切不出去。

解决问题

在FreeRTOSConfig.h中修改定时器任务优先级为最高解决问题

apollo中断状态判断

在看apollo3 代码时发现下面这个函数

void WsfSetOsSpecificEvent(void)
{
  if(xRadioTaskEventObject != NULL) 
  {
      BaseType_t xHigherPriorityTaskWoken, xResult;
      if(xPortIsInsideInterrupt() == pdTRUE) {
          // Send an event to the main radio task
          xHigherPriorityTaskWoken = pdFALSE;
          xResult = xEventGroupSetBitsFromISR(xRadioTaskEventObject, 1,
                                              &xHigherPriorityTaskWoken);
          // If the radio task is higher-priority than the context we're currently
          // running from, we should yield now and run the radio task.
          //
          if ( xResult != pdFAIL )
          {
              portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
          }    
      }
      else {
          xResult = xEventGroupSetBits(xRadioTaskEventObject, 1);
          //
          // If the radio task is higher priority than the context we're currently
          // running from, we should yield now and run the radio task.
          //
          if ( xResult != pdFAIL )
          {
              portYIELD();
          }
      }

  }    
}

这是FreeRTOS发送一个事件标志组,xPortIsInsideInterrupt这个函数判断是否在中断中,进而调用判断是否调用FromISR结尾的api,下面看下原理

static portFORCE_INLINE BaseType_t xPortIsInsideInterrupt( void )
{
uint32_t ulCurrentInterrupt;
BaseType_t xReturn;
	/* Obtain the number of the currently executing interrupt. */
	__asm
	{
		mrs ulCurrentInterrupt, ipsr
	}
	if( ulCurrentInterrupt == 0 )
	{
		xReturn = pdFALSE;
	}
	else
	{
		xReturn = pdTRUE;
	}
	return xReturn;
}

读IPSR寄存器,0表示当前没有中断在运行,非0表示正在运行的中断号,即处于中断中,所以要用FromISR结尾的api

以上就是FreeRTOS软件定时器apollo中断状态判断的详细内容,更多关于FreeRTOS定时器apollo中断判断的资料请关注脚本之家其它相关文章!

相关文章

  • FreeRTOS进阶之调度器启动过程分析

    FreeRTOS进阶之调度器启动过程分析

    这篇文章主要为大家介绍了FreeRTOS进阶之调度器启动过程分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • FreeRTOS实时操作系统的任务创建与任务切换

    FreeRTOS实时操作系统的任务创建与任务切换

    这篇文章主要为大家介绍了FreeRTOS实时操作系统的任务创建与任务切换,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • FreeRTOS实时操作系统空闲任务的阻塞延时实现

    FreeRTOS实时操作系统空闲任务的阻塞延时实现

    这篇文章主要为大家介绍了FreeRTOS实时操作系统空闲任务的阻塞延时实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • FreeRTOS任务控制API函数的功能分析

    FreeRTOS任务控制API函数的功能分析

    这篇文章主要为大家介绍了FreeRTOS任务控制API函数的功能分析,FreeRTOS任务控制API函数主要实现任务延时、任务挂起、解除任务挂起、任务优先级获取和设置等功能
    2022-04-04
  • FreeRTOS进阶之空闲任务示例完全解析

    FreeRTOS进阶之空闲任务示例完全解析

    这篇文章主要为大家介绍了FreeRTOS进阶之空闲任务示例的完全解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • FreeRTOS进阶之系统延时完全解析

    FreeRTOS进阶之系统延时完全解析

    这篇文章主要为大家介绍了FreeRTOS进阶之系统延时完全解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • FreeRTOS操作系统的配置示例解析

    FreeRTOS操作系统的配置示例解析

    这篇文章主要为大家介绍了FreeRTOS操作系统的配置示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • FreeRTOS实时操作系统支持时间片示例详解

    FreeRTOS实时操作系统支持时间片示例详解

    这篇文章主要为大家介绍了FreeRTOS实时操作系统支持的时间片示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • FreeRTOS实时操作系统移植操作示例指南

    FreeRTOS实时操作系统移植操作示例指南

    这篇文章主要为大家介绍了FreeRTOS移植操作示例指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • FreeRTOS软件定时器apollo中断状态判断

    FreeRTOS软件定时器apollo中断状态判断

    这篇文章主要为大家介绍了FreeRTOS软件定时器apollo中断状态的判断,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04

最新评论