当前位置:网站首页>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.
边栏推荐
- 从幻核疑似裁撤看如何保证NFT的安全
- 1.3快速生成树协议RSTP
- Technology sharing | Description of the electronic fence function in the integrated dispatching system
- 0801~ Interview questions
- ssm访问数据库数据报错
- 内存存储结构
- unique in numpy & pandas
- DTG-SSOD: The latest semi-supervised detection framework, Dense Teacher (with paper download)
- MyCat2的介绍与安装以及基本使用
- Import and export data of SQL Server database
猜你喜欢
随机推荐
Software component analysis: 5 major capabilities to protect software supply chain security
Likou 35 - search for insertion position - binary search
FreeRTOS实验--删除任务
MyCat2的介绍与安装以及基本使用
以Boost为例的type3电压环补偿器实例
photo-sphere-viewer中文文档
js炫酷仪表盘插件
手撸架构,Mysql 面试126问
SQL function TRIM
0801~面试题梳理
SQL Server 2019安装错误0x80004005 服务没有及时响应启动或控制请求详细解决方法
测试开发之路,我在大厂做测试这四年的感悟
JVM学习----垃圾回收调优
DTG-SSOD:最新半监督检测框架,Dense Teacher(附论文下载)
免费文档翻译-免费批量文档翻译软件推荐
The 7 most commonly used data analysis thinking, solve 95% of the analysis problems
Drools(8):WorkBench使用
消除气泡解救蘑菇h5小游戏源码
手撸架构,网络 面试36问
js半圆环加载进度动画js特效