FreeRTOS 学习记录

什么叫FreeRTOS

RTOS(Real Time Operating System)即为实时操作系统,Free 指的是免费的。 一开始遵从GPLv2 开源协议,2018年被亚马逊收购后,开源协议变为了MIT(与前者相比,为所欲为的开放)。

GPLv2开源协议

这里的开源指的是你可以免费或得FreeRTOS的源码,且当你的产品使用了FreeRTOS且没有修改FreeRTOS的源码的时候,你得产品的全部代码可以闭源。但是当你修改了FreeRTOS的源码时,就必须将修改的这部分开源,反馈给社区,其他的部分不用开源。著名的linux使用的就是GPL协议。

静态任务与动态任务

静态任务

1 需要预先定义好全局的静态的任务控制块空间, 和任务堆栈。
2 创建任务方式

    // 创建 APPTaskCreate任务
    xReturn = xTaskCreateStatic(
        (TaskFunction_t)AppTaskCreate,             // 任务函数1
        (const char*)"AppTaskCreate",              // 任务名称
        (uint16_t) 512,                            // 任务堆栈大小
        (void*) NULL,                              // 传递给任务函数的参数
        (UBaseType_t) 1,                           // 任务优先级, 空闲任务的优先级最低
        (StackType_t*)AppTaskCreate_Stack,         // 任务堆栈
        (StackType_t*)&AppTaskCreate_Handle);      // 任务控制块指针

3 宏定义配置

//支持静态内存, 静态创建任务时必须为1
#define configSUPPORT_STATIC_ALLOCATION					1

4 需要自己创建空闲任务和定时器任务,同时还要自己实现两个函数


// 空闲任务任务堆栈
static StackType_t Idle_Task_Stack[configMINIMAL_STACK_SIZE];
// 定时器任务堆栈
static StackType_t Timer_Task_Stack[configTIMER_TASK_STACK_DEPTH];

// 空闲任务控制块
static StaticTask_t Idle_Task_TCB;
// 定时器任务控制块
static StaticTask_t Timer_Task_TCB;

// 获取空闲任务的任务堆栈和任务控制块内存
void vApplicationGetIdleTaskMemory(StaticTask_t * * ppxIdleTaskTCBBuffer, 
                                   StackType_t * * ppxIdleTaskStackBuffer, 
                                   uint32_t * pulIdleTaskStackSize)
{
    *ppxIdleTaskTCBBuffer = &Idle_Task_TCB;   // 任务控制块内存
    *ppxIdleTaskStackBuffer = Idle_Task_Stack;   // 任务堆栈内存
    *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;  // 任务堆栈大小
}

// 获取定时器任务的任务堆栈和任务控制块内存
void vApplicationGetTimerTaskMemory(StaticTask_t * * ppxTimerTaskTCBBuffer, 
                                    StackType_t * * ppxTimerTaskStackBuffer, 
                                    uint32_t * pulTimerTaskStackSize)
{
    *ppxTimerTaskTCBBuffer = &Timer_Task_TCB;   // 任务控制块内存
    *ppxTimerTaskStackBuffer = Timer_Task_Stack;  // 任务堆栈内存
    *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;   // 任务堆栈大小
  
    
}

动态任务

1 不需要自己定义任务控制块和任务堆栈,动态内存按需分配
2 创建任务方式

  // 创建 APPTaskCreate任务
    xReturn = xTaskCreate(
        (TaskFunction_t)AppTaskCreate,             // 任务函数1
        (const char*)"AppTaskCreate",              // 任务名称
        (uint16_t) 512,                            // 任务堆栈大小
        (void*) NULL,                              // 传递给任务函数的参数
        (UBaseType_t) 1,                           // 任务优先级, 空闲任务的优先级最低
        (TaskHandle_t*)&AppTaskCreate_Handle);     // 任务控制块指针

3 宏定义配置(在FreeRTOSconfig.h中)

//支持动态内存申请
#define configSUPPORT_DYNAMIC_ALLOCATION                1    
//支持静态内存, 静态创建任务时必须为1
#define configSUPPORT_STATIC_ALLOCATION					0

configSUPPORT_STATIC_ALLOCATION为1时编译会有报错
4 动态分配我们不需要管空闲任务和定时器任务,系统都会帮我们实现好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值