FreeRTOS优先级翻转
2018-02-28 11:53
197 查看
举例
实验现象
//高优先级任务的任务函数 void high_task(void *pvParameters) { while(1) { vTaskDelay(500); //延时500ms,也就是500个时钟节拍 printf("high task Pend Sem\r\n"); xSemaphoreTake(BinarySemaphore,portMAX_DELAY); //获取二值信号量 printf("high task Running!\r\n"); xSemaphoreGive(BinarySemaphore); //释放信号量 vTaskDelay(500); //延时500ms,也就是500个时钟节拍 } } //中等优先级任务的任务函数 void middle_task(void *pvParameters) { while(1) { printf("middle task Running!\r\n"); vTaskDelay(1000); //延时1s,也就是1000个时钟节拍 } } //低优先级任务的任务函数 void low_task(void *pvParameters) { static u32 times; while(1) { xSemaphoreTake(BinarySemaphore,portMAX_DELAY); //获取二值信号量 printf("low task Running!\r\n"); for(times=0;times<5000000;times++) //模拟低优先级任务占用二值信号量 { taskYIELD(); //发起任务调度 } xSemaphoreGive(BinarySemaphore); //释放二值信号量 vTaskDelay(1000); //延时1s,也就是1000个时钟节拍 } }
实验现象
解决办法:http://blog.csdn.net/zhangxuechao_/article/details/79399785
相关文章推荐
- RTOS基本原理:多任务和调度-FreeRTOS是如何工作的
- 优先级翻转
- FreeRTOS 源码注释(vTaskDelay)
- FreeRTOS 源代码结构
- 【转】FreeRTOS 内核中的链表
- FreeRTOS
- FreeRTOS
- FreeRTOS分析
- FreeRTOS 的互斥信号量与二进制信号量
- FreeRTOS代码剖析之4:内存管理Heap_4.c
- FreeRTOS代码剖析之5:链表管理list.c
- FreeRTOS源码解析 -> vTaskSuspend
- FreeRTOS 内存动态分配函数
- FreeRTOS 操作系统介绍
- FreeRTOS 中断优先级嵌套错误引发HardFault异常解决(转)
- FreeRTOS系列第3篇---FreeRTOS移植指南
- FreeRTOS系列第14篇---FreeRTOS任务通知
- FreeRTOS 查询任务 剩余的栈空间的 方法
- FreeRTOS内核详解----LIST
- STM32使用freertos时在中断中调用系统函数的注意点