这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Xilinx » 在初始的时候开了一个线程并执行,在中断里对信号量赋初值,为什么这个线程没执行呢

共1条 1/1 1 跳转至

在初始的时候开了一个线程并执行,在中断里对信号量赋初值,为什么这个线程没执行呢

菜鸟
2014-10-30 13:23:03     打赏

请问下,我在初始的时候开了一个线程并执行,然后在中断里对信号量赋初值为什么,为什么这个线程没执行呢

在初始的时候把信号量初始化为1就能执行,而在中断里所信号量初始化为1就不执行,请问是为什么呢


这是中断函数

我在这里初始化了信号量的值为1,并开了两个线程

线程函数如下:

这个线程能正常执行。
但是,如果我不在这里初始化信号为1,而把它初始化为0,我在中断到来后再初始化为1,为什么这个线程就得不到执行了呢

【支书】上海-terry_yung
没进中断?


【村长】北京-jianwenchang
进中断了,我跟踪进去的,每次进入中断都会打印出一句话,就好像在中断中设置的信号量初始值不管用一样, 这是中断函数中我设置的信号量,难道不能在这里设置吗


【村长】北京-jianwenchang
这样还是不行,.是不是不能在中断中设置信号量呢

【村长】北京-某人
再试一种方法,在中断低半部设置信号量


【村长】北京-jianwenchang
也不行,是不是因为我用这个函数的原因,初始化信号量sema_init(&sem,1);
把它初始化为1
在中断里初始化不生效,而在别probe里初始化的就生效


【村长】北京-某人
你是不是想要在中断函数中唤醒某些等待的内核线程


【村长】北京-jianwenchang
我当初是想这样做,这是个一等待的线程,但在中断中没有唤醒


【村长】北京-某人
那你用什么信号量啊,直接用等待队列岂不是更简单?


【村长】北京-jianwenchang

我在中断中是这样唤醒的


把信号量取消也唤不醒啊,这里用它只是想保护临界资源


【村长】北京-某人
如何没有临界资源需要保护的话,就用等待队列就行,但是如果有临界资源的话就另当别论了

【村长】北京-jianwenchang

嗯,这里信号量不是必须的,主要目的是执行这个函数

也就是说中断发生时候就执行这个函数,因为这个函数中有等待,所以放线程里做, 但结果,达不到预期目的
是这个函数写得有问题吗还是由于搞了个信号量的原因呢
我把信号量去掉试试

【村长】北京-某人
函数中有等待没必要放线程里做,浪费资源,放在中断底半部即可


【村长】北京-jianwenchang

是在这个线程中去执行这个fsl_dma_self_test()这个函数

这个函数就是中断下半部分中的


【村长】北京-jianwenchang
刚才我的描述有问题,我原本是想执行的这个函数,fsl_dma_self_test(),因为有等待不能放中断中,所以才放线程里的


【村长】北京-某人
fsl_dma_self_test()有等待可以放在中断底半部,没必要单起一个线程


【村长】北京-jianwenchang
这个是中断函数,原来是放下面的那一句,这样会异常


这个函数是中断下半部分了吧


【村长】北京-某人
唉,你先学习一下什么是中断底半部是什么意思吧

又叫下半部


【村长】北京-jianwenchang
在驱动中不明白它的界线
刚才看了看,底半部原来要用别的机制来实现,比如工作队列和软中断,TASKLET等,我之前一直理解错了,谢谢某人

 



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]