OpenEdv-开源电子网

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

关于放弃时间片轮转调度和调度器上锁相关疑问求教

[复制链接]

47

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2016-1-2
在线时间
80 小时
发表于 2016-3-11 22:00:23 | 显示全部楼层 |阅读模式
10金钱
请看程序注释
疑问1: 调度器上锁
程序如下,其余程序和原子哥的教程4-1一样。


void LED0_task(void *p_arg)
{
        u8 LED0_num=0;
        OS_ERR err;
        while(1)
        {
                LED0_num++;
                LED0=~LED0;
                printf("LED0任务ZHIX%d\r\n",LED0_num);//上锁后,LED灯状态不变,但是此输出语句以非常快速快速输出。 按道理来说任务都已经上锁了,但是为啥此语句还能输出?
               
                if(LED0_num==150)
                {
  OSSchedLock(&err);
  printf("LED0任务上锁:%d\r\n",LED0_num);/
                }
                OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err);
        }
}

疑问2:时间片轮转调度
修改部分如注释那句,其他程序和原子哥的实验历程  6-3
void task2_task(void *p_arg)
{
   u8 i,task2_num=0;
   OS_ERR err;
   p_arg = p_arg;
       
  POINT_COLOR = RED;
  LCD_ShowString(30,150,110,16,16,"Task2 Run:000");
  POINT_COLOR = BLUE;
        while(1)
        {
   task2_num++;
  LCD_ShowxNum(110,150,task2_num,3,16,0x80);
  for(i=0;i<5;i++) printf("Task2:56789\r\n");
   LED1 = ~LED1;
  OSSchedRoundRobinYield(&err);//按道理来说,由此语句后,本任务的LED状态将不变化。可实际上,加不加本语句,状态都是一样的,这是为什么??
   OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
        }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 18:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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