关于中断和信号量的问题
我想在中断中发送信号量 在别的地方接受信号量 以保持同步通信, 但发现总是中断过了几十个毫秒才能收到信号量,请问大牛们,有什么办法能解决这个问题么? 或者信号量本来就是释放获取操作相对较慢?
[解决办法]
“中断过了几十个毫秒才能收到信号量”,是指中断发了信号量之后几十毫秒,“别的地方”才能接收到信号量?
系统是时间片轮流的,你的“别的地方”应该就是个线程,优先级不高的话,无法很快享受到该信号量的。
还有,你的中断中发完信号量之后,还做了什么?是立即结束了?还是又做了许多事?
[解决办法]
中断的优先级最高,相比其他的任务
所以确保你在进中断一开始就发信号,并且在中断里面尽量少地进行费时的操作
[解决办法]
根据你的描述应该是你接收的那个task的优先级比较低,
同时别的task优先级高,并且有事件满足,
比如
你有task1优先级150,在semTake(samA)等待你中断中的那个信号量samA
同时task2优先级140,在semTake(samB)等待另一个信号量samB
设这两个信号量都已经发出,
那么必然是要等到task2处理完samB,才会去处理task1的.
你去把你接收信号量的那个task1的优先级改成130,就可以了
至于定位是你的程序中哪个task是这里说的task2,你可以用shell看看,那个task在ready,
[解决办法]
在shell中查看比它优先级高的任务有哪些,是否会影响调度
[解决办法]
应该是优先级的问题
补充一点,你这个信号量创建的时候用的是什么参数啊,是FIFO的还是PRIORITY的?会不会还有别人也PEND在上面啊
[解决办法]
将你要同步的任务优先级提到最高,然后计算时间,这种情况下应该是最快的。