FreeRTOS的常用函数和剪切

FreeRTOS官网

函数

复制代码
动态任务创建:xTaskCreate()
静态任务创建:xTaskCreateStatic()
删除任务:vTaskDelete()

启动调度器:vTaskStartScheduler ()

任务挂起:vTaskSuspend()
挂起任务调度器:vTaskSuspendAll()    
任务恢复:vTaskResume()
恢复任务调度器:xTaskResumeAll()         
在中断中恢复被挂起的任务:xTaskResumeFromISR()
                        
创建临界区,不让中断打断此时的任务:taskENTER_CRITICAL ()
退出临界区:taskEXIT_CRITICAL ()

开中断:portENABLE_INTERRUPTS ();
关中段:portDISABLE_INTERRUPTS ();

获取任务优先级:uxTaskPriorityGet()
设置任务优先级:vTaskPrioritySet()
获取系统中任务的数量:uxTaskGetNumberOfTasks()
获取所有任务状态信息:uxTaskGetSystemState()
获取指定单个的任务信息:vTaskGetInfo()
获取当前任务的任务句柄:xTaskGetCurrentTaskHandle()
根据任务名获取该任务的任务句柄:xTaskGetHandle()
获取任务的任务栈历史剩余最小值:uxTaskGetStackHigh WaterMark()
获取任务状态:eTaskGetState()
以"表格"形式获取所有任务的信息:vTaskList()
获取任务的运行时间:vTaskGetRunTimeStats()

相对延时函数:vTaskDelay()
绝对延时函数:vTaskDelayUntil ()


动态创建队列:xQueueCreate()
静态创建队列:xQueueCreateStatic()
往队列尾部写入消息:xQueueSend()/xQueusendToBack()
往队列头部写入消息:xQueueSendToFront()
覆盖队列消息:xQueueOverwrite()
从队列头步读取消息并删除消息:xQueueReceive()
从队列头部读取消息:xQueuePeek()


使用动态方式创建二值信号量:xSemaphoreCreateBinary()
使用静态方式创建二值信号量:xSemaphoreCreateBinaryStatic()
释放信号量:xSemaphoreGive()
在中断中释放信号量:xSemaphoreGiveFromISR()
获取信号量:xSemaphoreTake() 
在中断中获取信号量:xSemaphoreTakeFromISR() 
使用动态方法创建计数型信号量:xSemaphoreCreateCounting() 
使用静态方法创建计数型信号量:xSemaphoreCreateCountingStatic()
获取信号量的计数值:uxSemaphoreGetCount()
使用动态方法创建互斥信号量:xSemaphoreCreateMutex()
使用静态方法创建互斥信号量:xSemaphoreCreateMutexStatic()



创建队列集:xQueueCreateSet()
队列添加到队列集中:xQueueAddToSet()
从队列集中移除队列:xQueueRemoveFromSet()
获取队列集中有有效消息的队列:xQueueSelectFromSet()
在中断中获取队列集中有有效消息的队列:xQueueSelectFromSetFromISR()


如果要在ISR中调用FreeRTOS的函数,要调用的函数的名字必须有FromlISR这个后缀

剪切

复制代码
//必须要的三个宏 

                #define xPortPendSVHandler     PendSV_Handler
                #define vPortSVCHandler          SVC_Handler
                #define INCLUDE_xTaskGetSchedulerState     1




// 静态创建任务的宏:                       

               #define configSUPPORT_STATIC_ALLOCATION 1
//软件定时器相关定义:
               #define configUSE_TIMERS                1
               #define configTIMER_TASK_PRIORITY  ( configMAX_PRIORITIES - 1 )
               #define configTIMER_QUEUE_LENGTH        5
               #define configTIMER_TASK_STACK_DEPTH      (configMINIMAL_STACK_SIZE* 2)




//开启任务挂起与恢复的函数
               #define INCLUDE_vTaskSuspend                                1
               #define INCLUDE_xResumeFromISR                            1
//开启跟踪task信息
               #define configUSE_TRACE_FACILITY                                 1
               #define configUSE_STATS_FORMATTING_FUNCTIONS         1




                      //设置中断管理
//这里相当于把滴答定时器和PendSV的中断设置成15
                #define configKERNEL_INTERRUPT_PRIORITY         (15 << 4)
//这里就是设置BASEPRI这个寄存器的值设置成5
                #define configMAX_SYSCALL_INTERRUPT_PRIORITY     (5 << 4)
//同上仅用于新版移植,两者等效
   #define configMAX_API_CALL_INTERRUPT_PRIORITY     configMAX_SYSCALL_INTERRUPT_PRIORITY 





//						时间片调度
//开起时间片调度,默认开启
#define configUSE_TIME_SLICING						1
//是否启用抢占式调度
#define configUSE_PREEMPTION							1
//设置时间片的频率,默认为1000,每1ms进行一次函数调换
#define configTICK_RATE_HZ				( ( TickType_t ) 1000)



开启计数型信号量:#define configUSE_COUNTING_SEMAPHORES 1
开启互斥信号量:#define configUSE_MUTEXES     1

开启队列集:#define configUSE_QUEUE_SETS 1
相关推荐
振南的单片机世界9 小时前
硬核菊花链:3个GPIO+无限74HC595=端口扩展“无限套娃”
arm开发·stm32·单片机·嵌入式硬件
zlinear数据采集卡9 小时前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
Dr.kangder9 小时前
嵌入式面试总结(十)——流水线
单片机·嵌入式硬件·面试·职场和发展·系统架构·嵌入式
沐-风_10 小时前
双通道LVDS(Dual‑Link)Link0 / Link1:硬件、软件、标准
嵌入式硬件·学习
LCG元12 小时前
STM32软件模拟I2C驱动多从机实战:AHT20温湿度 + BH1750光照 + 0.96寸OLED实时显示
stm32·单片机·嵌入式硬件
Groundwork Explorer14 小时前
WSL2 Ubuntu 22.04 LTS ESP-IDF 5.5 Micropython 1.28 固件编译指南
运维·python·单片机·ubuntu
天天爱吃肉821814 小时前
【工程师硬件学习笔记:串口‑总线体系与三电试验室异构系统集成深度实战】
大数据·笔记·python·嵌入式硬件·学习·汽车
zcmodeltech15 小时前
工业生产线沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的自动化产线-智能车间-流水线全场景联动方案
数据库·stm32·嵌入式硬件·自动化·制造
hsjiasb1 天前
FreeRTOS学习(二十三)——消息缓冲区(Message Buffer)
stm32·单片机·嵌入式硬件·学习·freertos
我是海飞1 天前
杰理JL703N SSD1306 OLED(128x64) 点阵屏移植说明
单片机·算法·嵌入式·音频·杰理