您的位置:首页 > 其它

freeRTOS API简记

2017-10-25 09:34 78 查看

注意

利用信号量或任务 必须要确保任务或者信号量建立 习惯性进入和退出临界区

API

TaskHandle_t创建任务句柄

任务栈大小 从FreeRTOSConfig.h中定义的heap空间中申请 单位word 4字节

xTaskCreate创建任务

要先定义任务优先级、任务堆栈大小、任务句柄、任务函数

vTaskStartScheduler开启任务调度 启动FreeRTOS

start_task

taskENTER_CRITICAL任务级的临界代码保护

临界区代码要精简 因为此时会关闭中断

创建其他任务

vTaskDelete(StartTask_Handler)删除开始任务

taskEXIT_CRITICAL退出临界区

vTaskDelete清除任务句柄

后最好加一句任务句柄清零

IRQ 中断请求

vTaskSuspend 挂起任务

vTaskResume 恢复任务

vTaskResumeFromISR 中断服务函数中恢复一个任务的运行 若返回pdTrue 说明当前任务优先级高于或等于当前运行任务 退出中断时进行上下文切换portYIELD_FROM_ISR

中断发生的时候释放信号量

SemaphoreHandle_t二值信号量句柄

vSemaphoreCreateBinary创建二值信号量(在开始任务里创建

返回NULL 创建失败 FreeRTOS堆栈不足;返回其他值 信号量创建成功 返回值存储信号量句柄

portBASE_TYPE xSemaphoreTake( xSemaphoreHandle xSemaphore, portTickType xTicksToWait ); 当句柄!=NULL时,获取信号量(除了互斥信号量) 。xTicksToWait为阻塞超时时间

xSemaphoreGiveFromISR在中断中释放二值信号量

xHigherPriorityTaskWoken

BaseType_t xHigherPriorityTaskWoken;

xSemaphoreGiveFromISR(BinarySemaphore,&xHigherPriorityTaskWoken);//释放二值信号量

portYIELD_FROM_ISR(xHigherPriorityTaskWoken);//如果需要的话进行一次任务切换

xSemaphoreCreateCounting(UBaseType_t uxMaxCount,UBaseType_t uxInitialCount)

创建计数信号量

用于事件计数或资源管理

xSemaphoreCreateMutex创建互斥信号量

相对延时vTaskDelay 相对于这一时刻开始延时

绝对延时vTaskDelayUntil 每隔指定的时间 执行一次调用vTaskDelayUntil函数的任务 即:任务以固定的频率执行

portTICK_RATE_MS 用于将以心跳为单位的时间值转化为以ms为单位的时间值 eg:vTaskDelay(200/portTICK_RATE_MS) 即延时200ms

xTaskGetTickCount初始化portTickType类型的变量为当前心跳计数值

portDISABLE_INTERRUPTS关闭中断

portENABLE_INTERRUPTS打开中断

栈溢出检测机制:两种

优先级

中断优先级编号小 优先级高

任务优先级编号小 优先级低

中断优先级一定高于任务优先级

复位、NMI、HardFault优先级固定为负数

关闭中断时优先级高于等于4的不会被屏蔽 低于4的会被屏蔽

数据类型

TickType_t系统节拍计数器变量数据类型 32位无符号

BaseType_t 32位有符号

StackType_t uint32_t

空闲任务钩子函数

被用于执行低优先级,后台或需要不停处理的功能代码

测试出系统处理裕量

将处理器配置到低功耗模式

void vApplicationIdleHook( void );

configUSE_IDLE_HOOK 必须定义为 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  freeRTOS