完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
UCOSIII内嵌信号量的程序死在了任务一的信号量的请求上,请大神指点
void task1_task(void *p_arg) { u8 key; OS_ERR err; while(1) { key = KEY_Scan(0); if(key==WKUP_PRES) { OSTaskSemPost(&Task2_TaskTCB,OS_OPT_POST_NONE,&err); //发送任务二信号量 } OSTaskSemPend(0,OS_OPT_PEND_BLOCKING,0,&err); printf("任务一执行rn"); OStimeDlyHMSM(0,0,0,10,OS_OPT_TIME_PERIODIC,&err); } } //task2任务函数 void task2_task(void *p_arg) { OS_ERR err; u8 num1=0,num2=0; while(1) { OSTaskSemPend(0,OS_OPT_PEND_BLOCKING,0,&err); //等待信号量 printf("任务次数:%drn",Task2_TaskTCB.SemCtr); //显示信号量值 printf("任务2执行rn"); num1++; printf("%drn",num1); if(num1 == num2+5) { num2 = num1; OSTaskSemPost(&Task1_TaskTCB,OS_OPT_POST_NONE,&err); } LED1=~LED1; OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s } } |
|
相关推荐
7个回答
|
|
|
|
task2进入程序就在等task1的按键按下,一直pend。
task1在key_scan结束(很短时间),你是没来得及按下WKUP键,就进入了,等待task2 post 然而task2在等按键按下,但是按键扫描程序只执行一次。 可以再task1中把延时函数删除,把pend函数加一个等待时间10ms试试。 |
|
|
|
不行,我怀疑那任务已的请求有问题, 按视频那样写没问题, 我就想了想,结果那样写就不对了
|
|
|
|
逻辑有问题,按任务2的写法,程序运行一段时间后,你感觉num1/num2会变成多少?
|
|
|
|
我没搞懂你要表达什么??你看看你两个任务的请求和发布的逻辑,如果第一次执行keyscan时没有按键按下,那就是只有空闲任务在执行了。
|
|
|
|
我认为是程序在下完之后你是几乎没有时间按下按键的 任务1直接就执行等待信号量然而他会一直等待直接将任务就挂起来根本不会再执行除非你有函数释放信号量,等切换到任务2和任务一的一样没有信号量也挂起来了,你两个任务同时都挂起来了怎么会有现象呢
|
|
|
|
两个任务互相把对方等死了, if(key==WKUP_PRES) 中key 只在首次运行获得值,后面就一直卡在pend了
|
|
|
|
只有小组成员才能发言,加入小组>>
691 浏览 1 评论
2118 浏览 5 评论
2433 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2198 浏览 6 评论
2165 浏览 7 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
317浏览 9评论
302浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
436浏览 6评论
301浏览 5评论
349浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-26 21:55 , Processed in 0.727049 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号