OpenEdv-开源电子网

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

ucosIII这个程序在哪里进行任务调度的啊???

[复制链接]

119

主题

439

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1185
金钱
1185
注册时间
2015-9-18
在线时间
422 小时
发表于 2016-6-8 15:47:11 | 显示全部楼层 |阅读模式
3金钱
本帖最后由 liuchang 于 2016-6-8 15:50 编辑

程序如下,在main()中就是创建了一个start_task任务,在start_task任务中创建了如下task1_task和task2_task任务.程序现象:同时按下key0和key1,会在串口打印出来~~~
问题在程序注释部分,恳请大神指教~~~
[mw_shl_code=c,true]void task1_task(void *p_arg)
{
        u8 key = 0;
        OS_FLAGS flag1, flag2;
        OS_ERR err;
        p_arg = p_arg;
        
        while(1)
        {
                key = KEY_Scan(0);
                if(key == KEY0_PRES)
                {
                        flag1 = OSFlagPost((OS_FLAG_GRP *)&EventFlags,
                                          (OS_FLAGS     )KEY0_FLAG,
                                          (OS_OPT       )OS_OPT_POST_FLAG_SET,
                                          (OS_ERR      *)&err);
                        printf("key0's value = %d\r\n", flag1);
                }
                if(key == KEY1_PRES)
                {
                        flag2 = OSFlagPost((OS_FLAG_GRP *)&EventFlags,
                                          (OS_FLAGS     )KEY1_FLAG,
                                          (OS_OPT       )OS_OPT_POST_FLAG_SET,
                                          (OS_ERR      *)&err);
                        printf("key1's value = %d\r\n", flag2);
                }
                //OSTimeDlyHMSM(0, 0, 0, 10, (OS_OPT)OS_OPT_TIME_PERIODIC, &err); //我知道,在OSTimeDlyHMSM()中会进行任务调度,                                                                                                      //可是我把这2句都注释掉,程序仍然OK,
                                        //我不知道程序在哪里进行任务调度的,恳请指教
        }
}

void task2_task(void *p_arg)
{
        OS_ERR err;
        OS_FLAGS flag;
        p_arg = p_arg;
        
        while(1)
        {
                flag = OSFlagPend((OS_FLAG_GRP *)&EventFlags,
                                  (OS_FLAGS     )KEY0_FLAG+KEY1_FLAG,
                                  (OS_TICK      )0,
                                  (OS_OPT       )OS_OPT_PEND_FLAG_SET_ALL +OS_OPT_PEND_FLAG_CONSUME,
                                  (CPU_TS      *)0,
                                  (OS_ERR      *)&err);
                printf("task2_pending = %d\r\n", flag);
                //OSTimeDlyHMSM(0, 0, 0, 10, (OS_OPT)OS_OPT_TIME_PERIODIC, &err); //这里也被注释掉了
        }
}[/mw_shl_code]


最佳答案

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

systic中断里面,会任务调度啊。另外,你的pend也会。
电子爱好者
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2016-6-8 15:47:12 | 显示全部楼层
systic中断里面,会任务调度啊。另外,你的pend也会。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 05:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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