FreeRTOS之时间片的测试

"FreeRTOS之支持多优先级"和"FreeRTOS之任务延时列表的实现"都是为了实现时间片的功能。

1、 修改app_task.c文件

#include "app_task.h"
#include "task.h"



uint32_t flag1=0;
uint32_t flag2=0;
uint32_t flag3=0;

void delay (uint32_t count)
{
    for(; count!=0; count--);
}

void Task1_Entry( void *p_arg )
{
    for( ;; )
    {
        flag1 = 1;
        delay( 100 );
        flag1 = 0;
        delay( 100 );

    }
}
void Task2_Entry( void *p_arg )
{
    for( ;; )
    {
        flag2 = 1;
        delay( 100 );
        flag2 = 0;
        delay( 100 );
    }
}

void Task3_Entry( void *p_arg )
{
    for( ;; )
    {
        flag3 = 1;
        vTaskDelay(2);//delay( 100 );
        flag3 = 0;
        vTaskDelay(2);//delay( 100 );
    }
}

2、 修改main.c

#include "task_lists.h"
#include "task.h"
#include "app_task.h"
#include "port.h"
#include "idle_task.h"
#include "sys_tick.h"
#include "delay_lists.h"



#define TASK1_STACK_SIZE                    20
StackType_t Task1Stack[TASK1_STACK_SIZE];
TCB_t Task1TCB;


#define TASK2_STACK_SIZE                    20
StackType_t Task2Stack[TASK2_STACK_SIZE];
TCB_t Task2TCB;

#define TASK3_STACK_SIZE                    20
StackType_t Task3Stack[TASK3_STACK_SIZE];
TCB_t Task3TCB;


int main(void)
{
 	/* 就绪列表初始化*/
	prvInitialiseTaskLists();
	/* 初始化延迟列表*/
	prvInitialiseDelayLists();
	/* 创建任务1*/
	xTaskCreateStatic(Task1_Entry,"task1",TASK1_STACK_SIZE,0,1,Task1Stack,&Task1TCB);
	/* 创建任务2*/
	xTaskCreateStatic(Task2_Entry,"task2",TASK2_STACK_SIZE,0,1,Task2Stack,&Task2TCB);
	/* 创建任务3*/
	xTaskCreateStatic(Task3_Entry,"task3",TASK3_STACK_SIZE,0,2,Task3Stack,&Task3TCB);
	
	
	
	
	/* 创建空闲任务*/
	AppTaskCreateIdleTask();
	/* 初始化 SysTick*/
	vPortSetupTimerInterrupt();
	/*启动任务*/
	vTaskStartScheduler();
	
	//理论是不会到这里
	while(1){}
}

运行结果如下。
在这里插入图片描述
①任务3的优先级是最高的。
②任务1和任务2的时间片用完后,会切换到同一优先级的其他任务去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值