当前位置:网站首页>FreeRTOS--Priority Experiment
FreeRTOS--Priority Experiment
2022-08-02 12:31:00 【Mountain,】
FreeRTOS创建任务时,可以设置任务的优先级.在FreeRTOSThe value of medium priority is smaller,优先级越低,其他的RTOSare the smaller the priority value,优先级越高,这点需要注意.
Task prioritization experiment:
Create three flags first,Only when the task is running,The corresponding task flag is 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;
}
First set the priority of the three tasks to the same priority.
点击Debug进入仿真,Then add the three flag bits to the logic analyzer,Then set the variable to bit状态.
注意:用staticModified variables cannot be added to the logic analyzer initially,所以要去掉static修饰.如果要用static修饰,需要在main函数中打断点,wait for the program to runmain
函数中,此时才能把static
Modified variables are added to the logic analyzer.
点击全速运行,Observe the logic analyzer status.
可以看到,Only one task is running at a time,And the three tasks are executed interleaved with each other,Describe same-priority tasks,先后执行.
修改任务优先级,把任务1The priority is set to high priority,任务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都得不到执行.Indicates that high-priority tasks are executed first,If the high priority task does not give up execution,Then the low priority task will never get executed.
Next set up two high priority tasks,看看实验结果:
xTaskCreate(Task1,"Task1",100,NULL,2,&xHandleTask1);
xTaskCreate(Task2,"Task2",100,NULL,2,&xHandleTask2);
xTaskCreateStatic(Task3,"Task3",100,NULL,1,xTask3Stack,&xTask3Tcb);
可以看到,Two high-priority tasks are executed alternately,Low priority tasks are not executed.
The above experiments are described inFreeRTOSin the default task scheduling mode,高优先级任务优先执行,Alternate execution of tasks with the same priority.
边栏推荐
- svg气球升起爆炸js特效
- 商业流程服务BPass你真的了解吗?
- darknet训练yolov4模型
- Likou 58 - Left Rotation String
- 解决导出excel文件名中文乱码的问题
- 手撸架构,网络 面试36问
- Taurus.MVC V3.0.3 Microservice Open Source Framework Released: Make the evolution of .NET architecture easier in large concurrency.
- To eliminate air bubbles to save the mushroom h5 small game source code
- 用位运算为你的程序加速
- kvm部署
猜你喜欢
随机推荐
免费文档翻译-免费批量文档翻译软件推荐
np.nan, np.isnan, None, pd.isnull, pd.isna finishing and summary
MD5 detailed explanation (check file integrity)
svg气球升起爆炸js特效
Likou 977-Squaring of ordered arrays - brute force method & double pointer method
According to the field classification Golang map array
用位运算为你的程序加速
openGauss数据库基本操作(超详细)
PHP+MYSQL【学生信息管理系统】(极简版)
1.3 Rapid Spanning Tree Protocol RSTP
js源码跳转的几种方式,在当前页面跳转,在空白页跳转
Transfer files between servers
pgsql数据库实现导入导出
翻译英语的软件-免费翻译软件-各种语言互相翻译
手撸架构,MongDB 面试50问
Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
kvm部署
力扣704-二分查找
js炫酷仪表盘插件
#Summer Challenge#[FFH] OpenHarmony Device Development Foundation (3) Compilation Dependencies