完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
请教一下,用ucos实现这样的功能,按键按下,运行A任务,再按一下运行B任务,再按一下,又运行A任务,如此反复, 同时在A任务运行的过程中,按下按键,A任务停止运行,直接运行b任务,
我建了3个任务,按键任务,A,B任务,请问一个信号量,怎么给两个任务用了,代码如下 [AppleScript] 纯文本查看 复制代码 //任务1的任务函数void task1_task(void *p_arg) // 按键任务 有限级4{u8 key;//u8 num;OS_ERR err;while(1){ key=KEY_Scan(0); //得到键值 if(key){ switch(key) { case KEY1_PRES://控制LED1翻转 // OSTaskSemPost(&Task2_TaskTCB,OS_OPT_POST_NONE,&err);//使用系统内建信号量向任务task2发送信号量 OSSemPost (&MY_SEM,OS_OPT_POST_ALL,&err);//发送全局信号量 all所有任务都发送 1 最高任务// LED0=1;// LED1=1;// break;// case KEY2_PRES://控制LED1翻转 // LED1=0;// OStimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒// LED2=0;// OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒// LED3=0;// OSTimeDlyHMSM(0,0,3,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒 // break; default: break; } }OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_PERIODIC,&err); //延时10ms}}//任务2的任务函数void task2_task(void *p_arg) //点亮小灯任务 优先级6{//static u8 num;OS_ERR err;while(1){ //OSTaskSemPend(0,OS_OPT_PEND_BLOCKING,0,&err);//请求任务内建的信号量 请求信号量OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量 timeout为0一直等待下去,直到信号量出现num1++;//{LED1 = 0;OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒LED0 = 0;OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒LED2 = 0;OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒LED3 = 0;}//else//{//// LED0 = 1;// LED1 = 1;// LED2 = 1;// LED3 = 1;//} OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒}}void task0_task(void *p_arg) //关闭小灯任务 优先级5{//static u8 num;OS_ERR err;while(1){ OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量 timeout为0一直等待下去,直到信号量出现num2++; // MY_SEM.Ctr { LED0 = 1; LED1 = 1; LED2 = 1; LED3 = 1;}OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s 时,分,秒,毫秒}} |
|
相关推荐
4个回答
|
|
你这个明显的是信号量来做任务同步的,肯定需要两个信号量
|
|
|
|
没看懂你为什么要用信号量.
A、B如果不是很占时间的话, 你A和Bwhile(1)里面先放个几百小时延时,在按键时分别调用OSTimeDlyResume(A/B)。 按一下使A就绪,再按一下使B就绪。 刚看到你写的要打断一个的运行,马上运行另一个 。 那是不是可以按键时改变任务优先级,使每次就绪的任务优先级变成高优先级。那如果优先级高并且就绪了,那应该能达到你的目的吧? |
|
|
|
信号量应该是用来在哪请求在哪的后面释放。然后别的地方就可以用了。
就好比上厕所蹲坑,坑是共享资源。你进去把门一锁。用完了一开别人就可以用了,然后他进去一锁,其他人就等着门开。 你上面写的感觉不是信号量存在的意义。 |
|
|
|
左工威武
|
|
|
|
只有小组成员才能发言,加入小组>>
818 浏览 0 评论
1162 浏览 1 评论
2536 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2720 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1113浏览 3评论
198浏览 2评论
465浏览 2评论
382浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
462浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 18:36 , Processed in 1.066674 second(s), Total 83, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号