OpenEdv-开源电子网

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

软件定时器的回调函数里面调用其他API函数的问题咨询

[复制链接]

92

主题

171

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2015-9-22
在线时间
102 小时
发表于 2018-3-9 18:09:46 | 显示全部楼层 |阅读模式
1金钱
    freertos的软件定时器的回调函数里面能否调用其他API函数?
比如在回调函数里添加xSemaphoreGive(BinarySemaphore);  

/* 处理定时器1任务 */
        if(ulTimerID == 1)
        {
                bsp_LedToggle(2);
                xSemaphoreGive(BinarySemaphore);  //这里添加时间到的通知信号量
        }


实验后发现使用:xSemaphoreGiveFromISR(BinarySemaphore,&xHigherPriorityTaskWoken)这个也能工作,这是为什么?

最佳答案

查看完整内容[请看2#楼]

xSemaphoreGiveFromISR实际上是一个宏,真正执行的是xQueueGiveFromISR,它同样的可以发信号量啊, 只不过进去的时候多了一个中断屏蔽,出来的时候恢复一下。另外xSemaphoreGiveFromISR和xSemaphoreGive相比,前者不能在中断里面释放互斥信号量,因为涉及到优先级继承,而中断不属于任务。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2305
金钱
2305
注册时间
2017-7-6
在线时间
280 小时
发表于 2018-3-9 18:09:47 | 显示全部楼层
xSemaphoreGiveFromISR实际上是一个宏,真正执行的是xQueueGiveFromISR,它同样的可以发信号量啊, 只不过进去的时候多了一个中断屏蔽,出来的时候恢复一下。另外xSemaphoreGiveFromISR和xSemaphoreGive相比,前者不能在中断里面释放互斥信号量,因为涉及到优先级继承,而中断不属于任务。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165369
金钱
165369
注册时间
2010-12-1
在线时间
2110 小时
发表于 2018-3-10 01:07:29 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-1-31 21:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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