kokoromi 发表于 2019-6-6 08:51:15

带 FromISR后缀的函数有什么用?

本帖最后由 kokoromi 于 2019-6-6 09:25 编辑

感觉FreeRTOS这一点不太好,为什么要分 带FromISR后缀和不带后缀两个版本,感觉这样很繁琐,有些时候,用户使用了第三方库,并不清楚调用的库函数是不是在中断里,这怎么办?
还有像xxxTakeFromISR这种函数,本来就是阻塞用的,放在中断里是有什么特殊用途吗(或者说,在ISR中调用xxxTakeFromISR这种函数的意义是什么)?

之前用uC,刚开始用这个,不太理解FreeRTOS为啥这么做?

eric2013 发表于 2019-6-6 09:37:38

1、不同的处理策略而已,FreeRTOS和RTX都是区分开的的,而uCOS是没有区分的,没区分怎么办,那也得想办法区分开,uCOS的解决办法就是进出中断的时候
调用函数OSIntEnter(); 和 OSIntExit(),异曲同工。

2、区分函数在中断里面还是任务里面即可,调用函数__get_IPSR()

kokoromi 发表于 2019-6-6 11:36:43

eric2013 发表于 2019-6-6 09:37
1、不同的处理策略而已,FreeRTOS和RTX都是区分开的的,而uCOS是没有区分的,没区分怎么办,那也得想办法区 ...

但是xxxTakeFromISR这种函数,在中断里调用有什么用呢? 中断里不都是调用xxxGiveFromISR吗?不太理解这类函数...

eric2013 发表于 2019-6-6 11:44:39

kokoromi 发表于 2019-6-6 11:36
但是xxxTakeFromISR这种函数,在中断里调用有什么用呢? 中断里不都是调用xxxGiveFromISR吗?不太理解这 ...

由于我们习惯了任务里面take,后面可以尝试在中断里面take,特别是有这种需求的事情。

kokoromi 发表于 2019-6-6 12:42:09

eric2013 发表于 2019-6-6 11:44
由于我们习惯了任务里面take,后面可以尝试在中断里面take,特别是有这种需求的事情。

谢谢。
不过实在想不出什么情况下会在中断里用take,毕竟中断不能被阻塞,调用了take也是大概率得不到信号量..

eric2013 发表于 2019-6-6 12:52:56

kokoromi 发表于 2019-6-6 12:42
谢谢。
不过实在想不出什么情况下会在中断里用take,毕竟中断不能被阻塞,调用了take也是大概率得不到信 ...

中断里面的这个不是阻塞式的。
页: [1]
查看完整版本: 带 FromISR后缀的函数有什么用?