当 FreeRTOS 被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的 CPU 使用权,这样可保证系统满足实时性的要求;;当 FreeRTOS 被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放 CPU 的使用权后才能获得运行,这样可提高 CPU 的运行效率
变量类
#define portCHAR char
#define portFLOAT float
#define portDOUBLE double
#define portLONG long
#define portSHORT short
#define portSTACK_TYPE unsigned portLONG
#define portBASE_TYPE long型定义
任务删除函数
void vTaskDelete();
1. FreeRTOSConfig.h 中的 INCLUDE_vTaskDelete=1,这个函数才能用。从 RTOS 实时内核管理中移除任务。要删除的任务将从就绪,封锁,挂起,事件列表中移除。
2.闲任务负责释放内核分配给已删除任务的内存
使用提示 : 只有内核为任务分配的内存空间才会在任务被删除后由空闲任务自动回收。任务自
己占用的内存或资源需要由应用程序自己显式地释放
延时函数void vTaskDelay();
1. FreeRTOSConfig.h 中的 INCLUDE_vTaskDelay=1
2.定的是一个相对的时间
3.vTaskDelayUntil()定的是一个绝对的时间
4.多个vTaskDelay()会影响他延时
void vTaskDelayUntil (
pvortTickType *pxPreviousWakeTime, 指定一个变量来掌握任务最后开启的时间, 第一次使用时必须
使用当前时间来初始化, 在 vTaskDelayUntil 中,这个变量是自
动修改的
portTickType xTimeIncrement 循环周期时间
)
1. FreeRTOSConfig.h 中的 INCLUDE_vTaskDelayUntil=1,这个函数才能用。常量 2.portTICK_RATE_MS 用来计算时间片频率的实时时间- 按照一个时间片周期
void vTaskEndScheduler ( void );
vPortEndScheduler ()导致所有由内核分配的资源释放——但是不会释放由应用程序的任务分配的资源。
void vTaskSuspendAll ( void );
注意: API 中有可能影响影响上下文切换的函数(例如,vTaskDelayUntil(), xQueueSend()等等),一定不能在
调度器挂起时被调用。
portBASE_TYPE xQueueSendFromISR (
xQueueHandle pxQueue, 将项目传进的队列
const void *pvItemToQueue, 项目的指针【源数据】
portBASE_TYPE *pxHigherPriorityTaskWoken 因空间数据问题被挂起的任务是否解锁
);
如果接受到消息解锁的任务的优先级大于当前运行任务,xQueueSendFromISR 将设置 *pxHigherPriorityTaskWoken 到 pdTRUE。当 pxHigherPriorityTaskWoken
被设置为 pdTRUE 时,则在中断退出之前将请求任务切换。
返回: pdTRUE:数据成功传递进队列。否则为:errQUEUE_FULL。
xSemaphoreHandle xSemaphoreCreateMutex ( void )互斥锁
通过此宏创建的互斥锁可以使用 xSemaphoreTake()与 xSemaphoreGive()宏来访问。不能使用
xSemaphoreTakeRecursive()与 xSemaphoreGiveRecursive()宏
xSemaphoreHandle xSemaphoreCreateRecursiveMutex ( void )递归互斥锁
通过此宏创建的互斥锁可以使用 xSemaphoreTakeRecursive()与 xSemaphoreGiveRecursive()宏 来访问。不能使用 xSemaphoreTake()与 xSemaphoreGive()宏。如果一个任务获取其n次只有释放n次后其他任务才可以使用。
互斥类型的信号量不能在中断服务程序中使用。
返回: 已创建的信号量句柄,需要为 xSemaphoreHandle 类型。