当前位置:网站首页>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函数中,此时才能把staticModified 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.
边栏推荐
猜你喜欢
随机推荐
Intelligent Image Analysis-Intelligent Home Appliance Image Target Detection Statistical Counting Detection and Recognition-iCREDIT
Manual architecture, Mysql interview 126 questions
SQL中字符串拼接
数据湖(一):数据湖概念
力扣209-长度最小的字符串——滑动窗口法
SQL Server修改数据
软件成分分析:手握5大能力守护软件供应链安全
Hand rolled architecture, 41 Redis interview asked
Golang map数组按字段分类
darknet训练yolov4模型
WebUI自动化测试框架搭建从0到1(完整源码)更新完毕
#Summer Challenge#[FFH] OpenHarmony Device Development Foundation (3) Compilation Dependencies
js cool dashboard plugin
Likou 977-Squaring of ordered arrays - brute force method & double pointer method
观察者(observer)模式(二) —— 实现线程安全的监听器
openresty 性能优化
Chapter 14 Manually create a REST service (2)
The 7 most commonly used data analysis thinking, solve 95% of the analysis problems
Basic protocol explanation
Import and export data of SQL Server database







