版主: 51FPGA |
jianwenchang
最后登陆时间:2014-11-18 09:57:05 |
请问下,我在初始的时候开了一个线程并执行,然后在中断里对信号量赋初值为什么,为什么这个线程没执行呢
在初始的时候把信号量初始化为1就能执行,而在中断里所信号量初始化为1就不执行,请问是为什么呢
我在这里初始化了信号量的值为1,并开了两个线程
线程函数如下:
这个线程能正常执行。
【支书】上海-terry_yung
没进中断?
【村长】北京-jianwenchang
进中断了,我跟踪进去的,每次进入中断都会打印出一句话,就好像在中断中设置的信号量初始值不管用一样,
这是中断函数中我设置的信号量,难道不能在这里设置吗
【村长】北京-jianwenchang
这样还是不行,.是不是不能在中断中设置信号量呢
【村长】北京-某人
再试一种方法,在中断低半部设置信号量
【村长】北京-jianwenchang
把它初始化为1也不行,是不是因为我用这个函数的原因,初始化信号量sema_init(&sem,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 |