OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3585|回复: 7

请教关于FREERTOS中断处理信号量的问题

[复制链接]

15

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2018-10-30
在线时间
60 小时
发表于 2018-12-17 17:14:03 | 显示全部楼层 |阅读模式
6金钱
本帖最后由 sheepsleepin414 于 2018-12-17 17:23 编辑

请问在中断服务函数中使用                osSemaphoreRelease(xSemaphore12);  这个函数,
然后代码中用        if(xSemaphoreTake(xSemaphore12, (300 /portTICK_PERIOD_MS)) == pdTRUE)  这个判断
是否会出现中断之后反应时间比较长的现象?
(同事留给我维护的代码,FREERTOS刚入门,求大神帮助)

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-12-18 02:09:43 | 显示全部楼层
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2018-12-18 09:11:15 | 显示全部楼层
中断里操作freertos的函数会进断言,  osSemaphoreRelease(xSemaphore12) 这个函数是怎么实现的?
if(xSemaphoreTake(xSemaphore12, (300 /portTICK_PERIOD_MS)) == pdTRUE) 这个函数外层会返回取得该信号量的时间,可以看一下究竟用了多长时间
回复

使用道具 举报

15

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2018-10-30
在线时间
60 小时
 楼主| 发表于 2018-12-18 09:51:17 | 显示全部楼层
HCHDaLeiGe 发表于 2018-12-18 09:11
中断里操作freertos的函数会进断言,  osSemaphoreRelease(xSemaphore12) 这个函数是怎么实现的?
if(xSe ...

这个函数是ST封装的:
/**
* @brief Release a Semaphore token
* @param  semaphore_id  semaphore object referenced with \ref osSemaphore.
* @retval  status code that indicates the execution status of the function.
* @note   MUST REMAIN UNCHANGED: \b osSemaphoreRelease shall be consistent in every CMSIS-RTOS.
*/
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)
{
  osStatus result = osOK;
  portBASE_TYPE taskWoken = pdFALSE;
  
  
  if (inHandlerMode()) {
    if (xSemaphoreGiveFromISR(semaphore_id, &taskWoken) != pdTRUE) {
      return osErrorOS;
    }
    portEND_SWITCHING_ISR(taskWoken);
  }
  else {
    if (xSemaphoreGive(semaphore_id) != pdTRUE) {
      result = osErrorOS;
    }
  }
  
  return result;
}
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2018-12-18 09:54:57 | 显示全部楼层
sheepsleepin414 发表于 2018-12-18 09:51
这个函数是ST封装的:
/**
* @brief Release a Semaphore token

噢,可能我们俩的代码版本不同,我的freertos里没有这个函数的封装。取得信号量反应时间长建议查一下具体时间,另外再调查一下任务调度顺序
回复

使用道具 举报

15

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2018-10-30
在线时间
60 小时
 楼主| 发表于 2018-12-18 10:07:02 | 显示全部楼层
HCHDaLeiGe 发表于 2018-12-18 09:54
噢,可能我们俩的代码版本不同,我的freertos里没有这个函数的封装。取得信号量反应时间长建议查一下具体 ...

同事说反应时间有18微秒,不符合产品的要求,这个18微秒是否合理呢?
回复

使用道具 举报

14

主题

204

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2443
金钱
2443
注册时间
2017-9-13
在线时间
559 小时
发表于 2018-12-18 10:53:27 | 显示全部楼层
sheepsleepin414 发表于 2018-12-18 10:07
同事说反应时间有18微秒,不符合产品的要求,这个18微秒是否合理呢?

这个要看你们的工程有几个任务,怎么调度的,都会影响到响应时间
回复

使用道具 举报

15

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2018-10-30
在线时间
60 小时
 楼主| 发表于 2018-12-18 11:15:14 | 显示全部楼层
HCHDaLeiGe 发表于 2018-12-18 10:53
这个要看你们的工程有几个任务,怎么调度的,都会影响到响应时间

调试了一下发现不是这几个函数耗时
谢谢你的回答
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 07:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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