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