OpenEdv-开源电子网

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

UCOSIII时间片轮转调度实验,串口发送出现问题,求解释

[复制链接]

0

主题

4

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2021-2-21
在线时间
4 小时
发表于 2021-5-2 12:02:24 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 q1u1 于 2021-5-2 12:04 编辑

STM32f103C8T6运行时,无论给任务一,任务二分得多少的时间片长度,在运行一段时间后总会出现任务二打断任务一的情况
设定的时间分配如下(部分代码)

OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  

        //创建TASK1任务
        OSTaskCreate((OS_TCB         * )&Task1_TaskTCB,               
                                 (CPU_CHAR        * )"Task1 task",                
                 (OS_TASK_PTR )task1_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )TASK1_TASK_PRIO,     
                 (CPU_STK   * )&TASK1_TASK_STK[0],       
                 (CPU_STK_SIZE)TASK1_STK_SIZE/10,       
                 (CPU_STK_SIZE)TASK1_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )10,                                       
                 (void           * )0,                                       
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);

        //创建TASK2任务
        OSTaskCreate((OS_TCB         * )&Task2_TaskTCB,               
                                 (CPU_CHAR        * )"task2 task",                
                 (OS_TASK_PTR )task2_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )TASK2_TASK_PRIO,            
                 (CPU_STK   * )&TASK2_TASK_STK[0],       
                 (CPU_STK_SIZE)TASK2_STK_SIZE/10,       
                 (CPU_STK_SIZE)TASK2_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )10,                                       
                 (void           * )0,                               
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);       
       
        OS_CRITICAL_EXIT();        //退出临界区
        OSTaskDel((OS_TCB*)0,&err);        //删除start_task任务自身
                                 
}

void task1_task(void *p_arg)
{
        u8 task1_num=0;
        u8 i = 0;
        OS_ERR err;
        CPU_SR_ALLOC();
        p_arg = p_arg;
       
        OS_CRITICAL_ENTER();
        OS_CRITICAL_EXIT();
       
        while(1)
        {
                task1_num++;        //任务执1行次数加1 注意task1_num1加到255的时候会清零!!
                LED0= ~LED0;
                //printf("任务1已经执行: %04d次\r\n",task1_num);
                for(i=0;i<5;i++)
                        printf("Task1:01234\r\n");
                //printf("Run_Num1:%d\r\n",task1_num);
                OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s
               
        }
}

void task2_task(void *p_arg)
{
        u8 task2_num=0;
        u8 i = 0;
        OS_ERR err;
        CPU_SR_ALLOC();
        p_arg = p_arg;
       
        OS_CRITICAL_ENTER();
        OS_CRITICAL_EXIT();
       
        while(1)
        {
                task2_num++;        //任务2执行次数加1 注意task1_num2加到255的时候会清零!!
                LED2=~LED2;
                //printf("任务2已经执行:%04d次\r\n",task2_num);
                for(i=0;i<5;i++)
                        printf("Task2:56789\r\n");
                //printf("Run_Num2:%d\r\n",task2_num);
                OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s
        }
}


出现的状态如下所示

现在两个任务的分配时间已经是50ms,    即(OS_TICK          )10,        ,无论我调到多少时间片长度都是这样,请问是什么原因,与串口发送数据长度有关系吗?      

例6-1 UCOSIII时间片轮询.zip

4.87 MB, 下载次数: 4

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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