当前位置:网站首页>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.
边栏推荐
猜你喜欢

How to better assess credit risk?Just watch this scorecard model live

QAbstractScrollArea、QScrollArea

Swiper系列之轮播图

三种实现分布式锁的方式

The 7 most commonly used data analysis thinking, solve 95% of the analysis problems

Do you really understand the business process service BPass?

主流跨端技术一览

Technology sharing | Description of the electronic fence function in the integrated dispatching system

Process finished with exit code 1

免费文档翻译-免费批量文档翻译软件推荐
随机推荐
Pod调度策略:亲和性、污点与污点容忍
Process finished with exit code 1
力扣704-二分查找
np.nan, np.isnan, None, pd.isnull, pd.isna 整理与小结
FreeRTOS实验--删除任务
Golang map数组按字段分类
PHP伪协议详解
FreeRTOS experiment--one function creates multiple tasks
How to better assess credit risk?Just watch this scorecard model live
QAbstractScrollArea、QScrollArea
Intelligent Image Analysis-Intelligent Home Appliance Image Target Detection Statistical Counting Detection and Recognition-iCREDIT
Basic protocol explanation
Likou 977-Squaring of ordered arrays - brute force method & double pointer method
Object.entries()
干测试这些年,去过阿里也去过小公司,给年轻测试员们一个忠告...
Swiper系列之轮播图
pytorch模型转tensorflow模型
服务器间传输文件
Pytorch 占用cpu资源过多
SQL Server如何建表