完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
[C] 纯文本查看 复制代码
[C] 纯文本查看 复制代码 void Task1(*p_arg){(void)p_arg;while(1){OSMutexPend(Fun_Mutex, 0, &err);// Task1 do somthing...// OSMutexPost(Fun_Mutex);OStimeDlyHMSM(0, 0, 0, 200);}}void Task2(*p_arg){(void)p_arg;while(1){// OSMutexPend(Fun_Mutex, 0, &err);// Task2 do somthing...OSTimeDlyHMSM(0, 0, 0, 500);OSMutexPost(Fun_Mutex);}} 请问下在 ucOS-II中使用互斥信号量的时候,在 Task1中请求的信号量必须要在 Task1中发送出去吗?如果 Task1只负责请求信号量而 Task2对该信号量进行释放(代码如上) Task1是否还能正常运行呢? 自己试了下,Task1只能执行一次,Task2的运行不受影响,但是 Task1便不再执行,,请问下这是这么回事? Task1执行第一次的原因是知道的,就是不明白为什么 Task2在发送互斥信号量以后 Task1还是不能执行,谢谢。 |
|
相关推荐
7个回答
|
|
首先:楼主的应用信号量是可以实现的,用信号量没有问题,但互斥信号量和信号量的机制还是差别很大的,不能混淆二者
其次:互斥信号量mutex根本都不能这么用,mutex是为了解决资源独占和优先级翻转问题而应用的,请求mutex和释放mutex必须在一个任务中成对出现,在OSMutexPost()函数中会判断释放mutex的任务是不是占用mutex的任务,如果释放mutex的任务没有占用mutex,会返回错误标志。 这一段的源码给你贴出来吧 [C] 纯文本查看 复制代码 INT8U OSMutexPost (OS_EVENT *pevent){ …… /* Get owner's original priority */ if (OSTCBCur != (OS_TCB *)pevent->OSEventPtr) { /* See if posting task owns the MUTEX */ OS_EXIT_CRITICAL(); return (OS_ERR_NOT_MUTEX_OWNER); } ……} |
|
|
|
|
|
|
|
你这个程序没什么问题,Task1可以周期性得到互斥信号量执行下去,Task1里面的这个OSTimeDlyHMSM(0, 0, 0, 200); 调用不调用都是一样,你确定就这2个任务?
|
|
|
|
|
|
|
|
我现在看的是任哲的,把互斥信号量改成信号量的时候是可以运行的
|
|
|
|
我之前用UCOS的互斥信号量,也有些问题,后来我自己写了几个互斥信号量函数,用一直没问题,它的为什么有问题,我没有去深究,但是你的这个任务安排是可以的,没有问题。你可以先跳过这个问题,弄多了,自然就顺手了。
|
|
|
|
标记,学习,回答非常不错
|
|
|
|
只有小组成员才能发言,加入小组>>
684 浏览 0 评论
1100 浏览 1 评论
2465 浏览 5 评论
2799 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2638 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
648浏览 9评论
642浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
775浏览 6评论
619浏览 5评论
661浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 14:52 , Processed in 1.212850 second(s), Total 91, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号