Iron_Man 发表于 2011-7-19 10:54:15

UCOS OSSemPend OSSemAccept的区别?

最近使用UCOS信号量作资源竞争处理,发现使用OSSemPend会有一些莫名的逻辑错误,推测是由于使用OSSemPend时会进行任务切换,从而对任务堆栈有影响。
改用       
while(OSSemAccept(Sem) == 0);
没有出现问题了。。。

fengyuganyu 发表于 2011-7-19 11:28:04

OSSemPend ,如果多个任务等待一个资源,那么系统会给优先级高的的任务,而优先级低的任务就无法获得

Iron_Man 发表于 2011-7-19 17:27:49

回复【1楼】fengyuganyu
-----------------------------------------------------------------------

这个我知道,这次在任务循环调用一个函数,函数内有一个数组,动态方式里面的数据打印出来全错了,静态的就没有问题,纠结啊,因该不是逻辑问题,感觉编译器有问题。

Iron_Man 发表于 2011-7-21 10:09:44

问题解决了。。还是本人逻辑错误;
1)没注意在中断调用了使用信号量的等待的函数,结果无论在任务还是在中断,发送都不会等待而直接超时。
2)使用DMA发送,在使用函数内局部变量时,由于是动态获取的,所以必须在发送完成后才能退出函数。

l09046162 发表于 2011-10-7 14:20:19

mark!!!!

xueer1986281 发表于 2011-10-11 16:44:12

mark!!!

Hz01800475 发表于 2012-12-17 18:31:18

OK{:smile:}{:smile:}

jzhang123 发表于 2013-12-13 16:01:16

路过。。。。。
页: [1]
查看完整版本: UCOS OSSemPend OSSemAccept的区别?