当前位置:网站首页>FreeRTOS--优先级实验
FreeRTOS--优先级实验
2022-08-02 12:27:00 【山、】
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的默认的任务调度模式中,高优先级任务优先执行,同优先级任务交替执行。
边栏推荐
- 力扣151-颠倒字符串中的单词
- SQL Server如何建表
- 【MySQL系列】- LIKE查询 以%开头一定会让索引失效吗
- package.json与package-lock.json
- Metaverse "Drummer" Unity: Crazy expansion, suspense still exists
- Software component analysis: 5 major capabilities to protect software supply chain security
- 前男友买辣椒水威胁要抢女儿,女方能否申请人身安全保护令?
- The 7 most commonly used data analysis thinking, solve 95% of the analysis problems
- SQL Server 数据库之导入导出数据
- pgsql数据库实现导入导出
猜你喜欢
随机推荐
ASP.NET Core 6框架揭秘实例演示[31]:路由“高阶”用法
从幻核疑似裁撤看如何保证NFT的安全
看我如何用多线程,帮助运营小姐姐解决数据校对系统变慢!
免费的中英文翻译软件-自动批量中英文翻译软件推荐大全
太厉害了,终于有人能把TCP/IP 协议讲的明明白白了
Data Lake (3): Hudi Concept Terminology
liunx基础命令讲解
Object.entries()
According to the field classification Golang map array
技术分享| 融合调度系统中的电子围栏功能说明
Distributed current limiting, hand & redisson implementation
DTG-SSOD: The latest semi-supervised detection framework, Dense Teacher (with paper download)
第十四章 手动创建 REST 服务(二)
php字符串的截取方式
Golang map数组按字段分类
WPF 实现窗体抖动效果
After Effects 教程,如何在 After Effects 中对蒙版进行动画绘制?
Crack detection technology based on deep learning
力扣35-搜索插入位置——二分查找
数据湖(三):Hudi概念术语









