FreeRTOS应用开发常用函数汇总

本文详细介绍了FreeRTOS操作系统的关键功能,包括任务创建与调度、任务延时、中断处理、任务挂起与恢复、任务状态查询、队列操作、信号量机制、队列集、事件标志组、任务通知以及软件定时器的使用。此外,还提到了低功耗模式和内存管理的相关内容。

FreeRTOS学习笔记:

1.任务创建函数(动态):

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                            const char * const pcName, //任务名字
                            const configSTACK_DEPTH_TYPE usStackDepth,//为该任务分配的栈大小
                            void * const pvParameters,//任务函数的参数
                            UBaseType_t uxPriority,//任务优先级
                            TaskHandle_t * const pxCreatedTask )//任务句柄

2.开启任务调度器函数:

void vTaskStartScheduler( void );

3.相对延时函数:

void vTaskDelay( const TickType_t xTicksToDelay );//单位:系统时钟节拍周期

调用之后,任务会在调用处进入阻塞状态,经过指定系统时钟节拍之后,解除阻塞


4.绝对延时函数:

#define vTaskDelayUntil( pxPreviousWakeTime, xTimeIncrement )

5.创建任务(静态):

TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,//任务函数
                                    const char * const pcName, //任务名字
                                    const uint32_t ulStackDepth,//任务栈大小(对于stm32为32位)
                                    void * const pvParameters,//任务函数参数
                                    UBaseType_t uxPriority,//任务优先级
                                    StackType_t * const puxStackBuffer,//为该任务静态分配的内存指针(大小要和参数三匹配)
                                    StaticTask_t * const pxTaskBuffer )//任务句柄

此函数使能需要两个条件

  • 开启configSUPPORT_STATIC_ALLOCATION宏
  • 实现vApplicationGetIdleTaskMemory函数,实现如下:
#if configSUPPORT_STATIC_ALLOCATION==1
static StaticTask_t xIdleTaskTCBBuffer;
static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];
  
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
{
   
   
  *ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer;
  *ppxIdleTaskStackBuffer = &xIdleStack[0];
  *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
#endif

6.挂起任务:

void vTaskSuspend( TaskHandle_t xTaskToSuspend )

7.恢复任务:

void vTaskResume( TaskHandle_t xTaskToResume )

8.在中断函数中恢复任务:

BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume )

返回值:
pdTRUE:恢复后,需要进行任务切换(手动切换!)
pdFALSE:恢复后,不需要进行任务切换

当恢复后,正在执行的任务优先级小于被恢复的任务,被恢复的任务抢占正在执行的任务,发生任务切换

freertos规定:

如果要在中断服务函数里面调用freertos的API函数,必须保证中断优先级低于freertos所管理的最高优先级


9.关闭中断与打开中断:

portDISABLE_INTERRUPTS();//关闭中断
portENABLE_INTERRUPTS();//打开中断

注意:

这两个函数只能用于控制freertos控制范围之内的中断,即优先级在宏configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY与configLIBRARY_LOWEST_INTERRUPT_PRIORITY之间的中断


10.任务调度器的挂起与恢复:

注意:

挂起任务调度器不会关闭中断,只是禁止任务切换而已,而进入临界区会禁止中断和任务切换

函数原型:

void vTaskSuspendAll( void );//挂起任务调度器
BaseType_t xTaskResumeAll( void );//恢复任务调度器

使用示例:

vTaskSuspendAll();//挂起任务调度器
{
   
   
	......//内容
}
xAlreadyYielded = xTaskResumeAll();//恢复任务调度器

挂起任务调度器之后,执行内容部分,不会切换任务,但是会被中断打断
注意与临界区区分,临界区的代码既不会切换任务,也不会被中断打断


11.临界区:

(1)任务级临界区代码保护

taskENTER_CRITICAL();
{
   
   
	....../*临界区*/
}
taskEXIT_CRITICAL();

(2)中断级临界区代码保护

uint32_t  save_status;
save_status  = taskENTER_CRITICAL_FROM_ISR();//将中断状态保存在save_status变量中
{
   
   
	....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuiStar_李什么恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值