OSSemPend有时不成功
本帖最后由 power568 于 2016-3-15 17:04 编辑在学些uCOSIII,最近写了个简单测试程序,简单创建了个任务, 在任务中等待信号量:while(1)
{
OSSemPend(&TestSem, 0, OS_OPT_PEND_BLOCKING, NULL, &err);
TeseNum ++;
}
在中断中Post信号量:
OSSemPost(&TestSem, OS_OPT_POST_NO_SCHED, &err);
周期大约20ms左右,测试过程中,发现正常运行一段时间后,任务再也无法Pend成功。
哪位大侠遇见过这种情况,求指点迷津!!!
信号量创建为:
OSSemCreate(&UsartOneDmaRecDoneSem, "URT one dma rec done", 0, &err);
在中断中处理不合适,可能是无法释放导致的。 安 发表于 2016-3-7 15:44
在中断中处理不合适,可能是无法释放导致的。
不是很明白,信号量不是可以在中断中Post吗?
求解~!!! 安 发表于 2016-3-7 15:44
在中断中处理不合适,可能是无法释放导致的。
虽然我把中断中的Post去电,改为任务中延时后确实是可以了...
但是原因想不明白??? 信号量释放的问题,中断一直在工作,比如OSSemPend刚执行就进入post,会导致这样的问题。 安 发表于 2016-3-7 17:24
信号量释放的问题,中断一直在工作,比如OSSemPend刚执行就进入post,会导致这样的问题。 ...
你的意思是OSSemPend还未执行完毕? 操作的过程中,应该是信号使用冲突导致的。 安 发表于 2016-3-8 16:42
操作的过程中,应该是信号使用冲突导致的。
这么说的话,有可能,谢谢!!! 安 发表于 2016-3-8 16:42
操作的过程中,应该是信号使用冲突导致的。
后来想想,信号使用不可能会冲突,我在一个任务中Pend,在中断中Post,其余地方未使用。
之前以为是中断周期太短造成的,但是周期放长到100ms后仍然出现,只是出现时间迟点而已。
应该是其余的原因引起的。 问题解决了,原因是中断中忘记添加OSIntEnter 和 OSIntExit函数。
页:
[1]
2