ESP8266 RTOS中的FreeRTOS相关函数

  1. 优先级
    数值越大优先级越高
    SDK低层优先级:pp task(13) ets timer线程(12)lwip task(10)freeRtos timer(2)idle(0)
    可供用户线程使用的优先级为1~9,请勿修改 freeRTOSconfig.h
  2. 状态:
  • 运行态
  • 就绪态
  • 阻塞态
  • 挂起态
  1. 任务创建
头文件:task.h
portBASE_TYPE xTaskCreate(pdTASK_CODE pvTaskCode,
const portCHAR * const pcName,
unsigned portSHORT usStackDepth,
void *pvParameters,
unsigned portBASE_TYPE uxPriority,
xTaskHandle *pvCreatedTask
);
/*
 pvTaskCode :指向任务的实现函数的指针,效果上仅仅是函数名。
 pcName : 具有描述性的任务名,FreeRTOS不会使用它。
 usStackDepth :指定任务堆栈的大小
 pvParameters :指针用于作为一个参数传向创建的任务(注意这里传的是指针,所以请不要用局部变量,请保证指针的有效性)
 uxPriority   :任务运行时的优先级
 pvCreatedTask:用于传递任务的句柄,可以引用从而对任务进行其它操作
*/
  1. 任务的延时
  • 相对延时
void vTaskDelay{portTickType xTicksToDelay}
  • 绝对延时(精准延时)
void vTaskDelayUntil( portTickType *pxPreviousWakeTime, portTickTypexTimeIncrement );
  1. 任务删除
void vTaskDelete( xTaskHandle pxTask )//传递NULL将删除自己
  1. 任务实现
ATaskFunction(void *pvParameters){
int iVariableExample =0;
for(;;)
{
}
vTaskDelete(NULL);
}
  1. 任务优先级
unsigned portBASE_TYPE uxTaskPriorityGet(xTaskHandle pxTask)
pxTask 需要处理的任务,当传递NULL时,将返回调用该任务的优先级
void vTaskPrioritySet(xTaskHandle pxTask,unsigned PortBASE_TYPE uxNewPriority)
pxTask 需要处理的任务,当传递NULL时,将设置调用该任务的优先级
uxNewPriority 任务需要设置的优先级
  1. 任务挂起
void vTaskSuspend(xTaskHandle pxTaskToSuspend)
pxTaskToSuspend 处理需要挂起的任务,传递NULL将挂起调用此函数的任务
void vTaskResume(xTaskHandle pxTaskToResume)
pxTaskToResume 就绪任务的句柄
  1. FreeRTOS内核规定的几个内存管理函数:
    void *pvPortMalloc(size_t xSize):内存申请函数
    void vPortFree(void *pv) :内存释放函数
    void vPortInitialiseBlocks(void) :初始化内存堆函数
    size_t xPortGetFreeHeapSize(void) :获取当前未分配的内存堆大小
    size_t xPortGetMinimumEverFreeHeapSize(void):获取未分配的内存堆历史最小值
posted @ 2020-04-27 10:58  天祈笨笨  阅读(517)  评论(0编辑  收藏  举报