power568 发表于 2016-3-7 13:56:26

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:35

在中断中处理不合适,可能是无法释放导致的。

power568 发表于 2016-3-7 16:06:30

安 发表于 2016-3-7 15:44
在中断中处理不合适,可能是无法释放导致的。

不是很明白,信号量不是可以在中断中Post吗?
求解~!!!

power568 发表于 2016-3-7 17:08:09

安 发表于 2016-3-7 15:44
在中断中处理不合适,可能是无法释放导致的。

虽然我把中断中的Post去电,改为任务中延时后确实是可以了...

但是原因想不明白???

发表于 2016-3-7 17:24:06

信号量释放的问题,中断一直在工作,比如OSSemPend刚执行就进入post,会导致这样的问题。

power568 发表于 2016-3-8 13:31:40

安 发表于 2016-3-7 17:24
信号量释放的问题,中断一直在工作,比如OSSemPend刚执行就进入post,会导致这样的问题。 ...

你的意思是OSSemPend还未执行完毕?

发表于 2016-3-8 16:42:28

操作的过程中,应该是信号使用冲突导致的。

power568 发表于 2016-3-9 15:14:17

安 发表于 2016-3-8 16:42
操作的过程中,应该是信号使用冲突导致的。

这么说的话,有可能,谢谢!!!

power568 发表于 2016-3-15 17:00:21

安 发表于 2016-3-8 16:42
操作的过程中,应该是信号使用冲突导致的。

后来想想,信号使用不可能会冲突,我在一个任务中Pend,在中断中Post,其余地方未使用。

之前以为是中断周期太短造成的,但是周期放长到100ms后仍然出现,只是出现时间迟点而已。
应该是其余的原因引起的。

power568 发表于 2016-3-15 17:39:20

问题解决了,原因是中断中忘记添加OSIntEnter 和 OSIntExit函数。
页: [1] 2
查看完整版本: OSSemPend有时不成功