FreeRTOS初级篇----优先级实验

FreeRTOS创建任务时,可以设置任务的优先级。在FreeRTOS中优先级的值越小,优先级越低,其他的RTOS都是优先级值越小,优先级越高,这点需要注意。
任务优先级实验:
先创建三个标志位,只有在该任务运行时,对应的任务标志位为1。防止编译器优化掉,用volatile 修饰。

static volatile int Task1RunningFlag = 0;
static volatile int Task2RunningFlag = 0;
static volatile int Task3RunningFlag = 0;
void Task1(void * param)
{
	while(1)
	{
		Task1RunningFlag = 1;
		Task2RunningFlag = 0;
		Task3RunningFlag = 0;
		printf("A");
	}	
}
TaskHandle_t xHandleTask2;
void Task2(void * param)
{
	while(1)
	{
		Task1RunningFlag = 0;
		Task2RunningFlag = 1;
		Task3RunningFlag = 0;
		printf("a");
	}	
}
StackType_t xTask3Stack[100];
StaticTask_t xTask3Tcb;
void Task3(void * param)
{
	while(1)
	{
		Task1RunningFlag = 0;
		Task2RunningFlag = 0;
		Task3RunningFlag = 1;
		printf("1");
	}	
}
int main( void )
{
	prvSetupHardware();
	printf("Hello World!\r\n");

	xTaskCreate(Task1,"Task1",100,NULL,1,&xHandleTask1);
	xTaskCreate(Task2,"Task2",100,NULL,1,&xHandleTask2);
	xTaskCreateStatic(Task3,"Task3",100,NULL,1,xTask3Stack,&xTask3Tcb);

	vTaskStartScheduler();
	return 0;
}

先把三个任务的优先级设置为同一优先级。
点击Debug进入仿真,然后把三个标志位添加到逻辑分析仪,然后把变量设置为bit状态。
在这里插入图片描述
在这里插入图片描述
注意:用static修饰的变量一开始无法添加到逻辑分析仪,所以要去掉static修饰。如果要用static修饰,需要在main函数中打断点,等程序运行到main函数中,此时才能把static修饰的变量添加到逻辑分析仪。
点击全速运行,观察逻辑分析仪状态。
在这里插入图片描述
可以看到,在同一时刻只有一个任务在运行,而且三个任务彼此交叉执行,说明同一优先级任务,先后执行。
修改任务优先级,把任务1的优先级设置为高优先级,任务2、3优先级不变,然后看实验现象。

	xTaskCreate(Task1,"Task1",100,NULL,2,&xHandleTask1);
	xTaskCreate(Task2,"Task2",100,NULL,1,&xHandleTask2);
	xTaskCreateStatic(Task3,"Task3",100,NULL,1,xTask3Stack,&xTask3Tcb);

输出结果:
在这里插入图片描述
可以看到,只有任务1在执行,任务2、3都得不到执行。说明高优先级任务优先执行,若高优先级任务不放弃执行,那么低优先级任务永远也得不到执行。
接下来设置两个高优先级任务,看看实验结果:

	xTaskCreate(Task1,"Task1",100,NULL,2,&xHandleTask1);
	xTaskCreate(Task2,"Task2",100,NULL,2,&xHandleTask2);
	xTaskCreateStatic(Task3,"Task3",100,NULL,1,xTask3Stack,&xTask3Tcb);

在这里插入图片描述
可以看到,两个高优先级的任务交替执行,低优先级的任务不被执行。
以上实验说明在FreeRTOS的默认的任务调度模式中,高优先级任务优先执行,同优先级任务交替执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值