硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2839|回复: 2
收起左侧

[FreeRTOS] FreeRTOS与uCOS中断效率

[复制链接]

58

主题

118

回帖

292

积分

高级会员

积分
292
发表于 2018-10-18 14:52:20 | 显示全部楼层 |阅读模式
以前没仔细分析,一定情况下二者效率确实不同,例如。
freeRTOS:
uint32_t cnt=0;
void ISR()
{
        BaseType_t  HigherPriorityTaskWoken = pdFALSE;
        if(cnt++>65536)
      {
              xSemaphoreGiveFromISR(handle,&HigherPriorityTaskWoken);
      }
        if( HigherPriorityTaskWoken != pdFALSE )
        {
                portEND_SWITCHING_ISR( HigherPriorityTaskWoken );
        }

}

uCOS:
uint32_t cnt=0;
void ISR()
{
        OSIntEnter();
       if(cnt++>65536)
        {
                OSSemPost(semInfKey);
         }
        OSIntExit();
}

出中断时,uCOS每次都会强制检查就绪表,进行调度,而FreeRTOS仅在cnt>65536时才检查一下。尽管调度算法简单,但确确实实在耗费cpu.

回复

使用道具 举报

58

主题

118

回帖

292

积分

高级会员

积分
292
 楼主| 发表于 2018-10-18 14:54:04 | 显示全部楼层
老老实实用portEND_SWITCHING_ISR( HigherPriorityTaskWoken ),而不是portYIELD()
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106997
QQ
发表于 2018-10-19 11:04:09 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-13 20:16 , Processed in 0.250441 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表