UCos 信号量的使用~~Post操作疑问
信号量的唤醒,Post操作放在任务里没有问题,放在中断里就不好使了。可是在AvrStudio仿真看起来是正确的。 哪位能给点拨一下~~是否俺没描述清楚~? 你再看看Post函数。。。
我过了几天都忘了,不行的话看代码吧。 我把post放在中断里也好用啊
可能是你设置处理中断的方式不对吧 对UCOS不熟。
楼主在中断中POST信号量注意:
1.中断中是否能使用这个函数。
2.中断开始和结束应该是有固定的写法,通知操作系统在中断程序中。 * (标志信号量的旗帜,标志某事件发生)
* |
* |
* OSSemCreate() | OSSemAccept()
* OSSemDel() | OSSemPend()
* |----------| OSSemPost() V OSSemquery() |--------|
* | TASK |--------------| |-------------->|TASK|
* |----------| | (0) |--| | |--------|
* | | || |
* |--------> |- 或 |--| ----->|
* | |- | |
* |----------|OSSemPost() | | OSSemAccept() |--------|
* | ISR |--------------| ^ |-------------->| ISR|
* |----------| | |--------|
* (互斥条件的钥匙) 应该没问题。。。我就在中断里面发的。。。。也很好用 单步跟踪一下,看看是不是真的post进去了 我也是,在中断里发送信号量,编译时提示(中断服务程序里)这个信号量没有声明,不知道是什么原因 信号量的释放如果发生在中断服务程序中,不会马上触发任务的调度,在中断处理程序的最后肯定要有中断退出函数OSIntExit,由该函数去处理被量激活的任务。至于为什么不会马上触发任务调度是因为在中断中进行任务调度基本就乱了。关键请看对IntNesting的操作与判断。 回复【9楼】xuxi2009
-----------------------------------------------------------------------
9楼说的有理。退出中断之后才会进行任务切换。 mark ISR中在OSIntExit之前就切换任务的话,拿什么返回到中断任务,中断处理函数是没有stack的。
页:
[1]