| 
 
新手上路 
 
	积分29金钱29 注册时间2021-2-21在线时间4 小时 | 
 
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,        ,无论我调到多少时间片长度都是这样,请问是什么原因,与串口发送数据长度有关系吗?
 
 
 | 
 |