• 已解决 40886 个问题
  • 已帮助 5879 位优秀工程师

中断上下文不能做的事情

_行者_ 2019-01-19 浏览量:422
在嵌入式系统中,中断里为什么不能用信号量呢?还有哪些不能做?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1、中断中为何不能使用信号量?

    答: 信号量会导致睡眠。


    这里有比较细的说明

    https://blog.csdn.net/clarkchenhot/article/details/56014731?utm_source=blogxgwz5

    • 发布于 2019-02-18
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 信号量是一种睡眠锁。如果有一个任务试图获得一个已经被占用的信号量时,信号量会将其推进一个等待队列,然后让其睡眠。

    对于上面的意思,比如一个进程用信号量加锁了一个数据,然后ISR去读,拿不到信号量,会导致ISR睡眠,那也就是说这个进程不能用信号量了。

    ISR要求尽快的返回,如果碰到信号量,导致睡眠,就会引起其他方面的问题,故不要使用它,可以使用spin lock。​

    • 发布于2019-01-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 信号量的操作是原子操作并且是互斥的,而中断是在临界区之外的,如果在中断里面操作信号量,那样很有可能会影响信号量的发送方和接收方。
    • 发布于2019-01-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断里面所有的功能都是可用的,不过freertos中断里面的API和非中断里面的不一样,要加上fromISR
    • 发布于2019-02-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 中断都是一样的,是可以在你的中断里面直接对信号量进行处理的
    • 发布于2019-02-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以用的,只不过需要开启临界模式,用完了关闭就可以了

中断上下文不能做的事情