OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4750|回复: 2

在没有收到信号量之前,为什么任务会停止执行while(1)中 OSSemPend以上的程序

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-4-4
在线时间
11 小时
发表于 2019-4-4 22:27:44 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 YanHuang 于 2019-4-4 22:36 编辑

以下是程序  信号量初始为0
按道理来说任务1 执行完后,通过OSTimeDlyHMSM跳到任务2执行,然后会打印出printf("任务2运行中!\r\n"),接着由于信号量为0,OSSemPend函数会调回任务1,任务1执行完之后又调到任务二,可为什么printf("任务2运行中!\r\n")只执行了一次,往后就不执行了


//任务1
void task1_task(void *p_arg)
{
        u8 key;
        OS_ERR err;
        while(1)
        {
                key = KEY_Scan(0);  //扫描按键
                if(key==WKUP_PRES)        
                {
                        OSSemPost(&SYNC_SEM,OS_OPT_POST_1,&err);//发送信号量
                        LCD_ShowxNum(150,111,SYNC_SEM.Ctr,3,16,0);        
                }
                printf("任务1运行中!\r\n");
                OSTimeDlyHMSM(0,0,0,499,OS_OPT_TIME_PERIODIC,&err);   //延时
        }
}

//任务2
void task2_task(void *p_arg)
{
        u8 num;
        OS_ERR err;
        while(1)
        {
                printf("任务2运行中!\r\n");
                OSSemPend(&SYNC_SEM,0,OS_OPT_PEND_BLOCKING,0,&err); //请求信号量        
                num++;
                LCD_ShowxNum(150,111,SYNC_SEM.Ctr,3,16,0);        
                LCD_Fill(6,131,233,313,lcd_discolor[num%14]);        
                LED1 = ~LED1;
                OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);   //延时        
        }
}

图片1.png

最佳答案

查看完整内容[请看2#楼]

奥 我懂了..调试了下发现它原来一直在OSSemPend中进行判断,所以没有在任务2中往下走
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2019-4-4
在线时间
11 小时
 楼主| 发表于 2019-4-4 22:27:45 | 显示全部楼层
奥 我懂了..调试了下发现它原来一直在OSSemPend中进行判断,所以没有在任务2中往下走
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2016-9-24
在线时间
6 小时
发表于 2019-4-11 13:33:14 | 显示全部楼层
本帖最后由 hawkinchina 于 2019-4-11 13:51 编辑

OSSemPend请求信号量, 如果没有信号量资源,会阻塞在这里。。。为了阻塞在这里, 需要ucos把此任务从就绪队列中删除, 加入到挂起队列中。然后继续调度其他高优先级的任务。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 22:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表