IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> FreeRTOS创建静态和动态任务(超详细教程简单好学看了秒懂) -> 正文阅读

[嵌入式]FreeRTOS创建静态和动态任务(超详细教程简单好学看了秒懂)

基本需要的头文件:

/* FREERTOS头文件 */

#include "FreeRTOS.h"

#include "task.h"

FreeRTOSConfig.h静态任务宏定义:

#define ?configSUPPORT_STATIC_ALLOCATION ?????????????????????????1

FreeRTOSConfig.h动态任务宏定义:

#define configSUPPORT_DYNAMIC_ALLOCATION?? 1

没有定义必要函数出现的错误:

.\Objects\BASE.axf: Error: L6218E: Undefined symbol vApplicationGetIdleTaskMemory (referred from tasks.o).

.\Objects\BASE.axf: Error: L6218E: Undefined symbol vApplicationGetTimerTaskMemory (referred from timers.o).

必须实现两个钩子函数:
?

static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
static StaticTask_t IdleTaskTCB;
void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
                                   StackType_t **ppxIdleTaskStackBuffer,
                                   uint32_t *pulIdleTaskStackSize)
{
    *ppxIdleTaskTCBBuffer=&IdleTaskTCB;
    *ppxIdleTaskStackBuffer=IdleTaskStack;
    *pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;

     return;
}


static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];
static StaticTask_t TimerTaskTCB;
void vApplicationGetTimerTaskMemory( StaticTask_t ** ppxTimerTaskTCBBuffer,
                                     StackType_t ** ppxTimerTaskStackBuffer,
                                     uint32_t * pulTimerTaskStackSize )

{
    *ppxTimerTaskTCBBuffer=&TimerTaskTCB;
    *ppxTimerTaskStackBuffer=TimerTaskStack;
    *pulTimerTaskStackSize=configTIMER_TASK_STACK_DEPTH;

     return;
}

静态创建任务:

/* 函数参数原型
typedef struct xTASK_PARAMETERS

    {

        TaskFunction_t pvTaskCode;    //typedef void (* TaskFunction_t)( void * );

        const char * pcName;    

        configSTACK_DEPTH_TYPE usStackDepth;

        void * pvParameters;

        UBaseType_t uxPriority;

        StackType_t * puxStackBuffer;

        MemoryRegion_t xRegions[ portNUM_CONFIGURABLE_REGIONS ];

        #if ( ( portUSING_MPU_WRAPPERS == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )

            StaticTask_t * const pxTaskBuffer;

        #endif

} TaskParameters_t;
*/


#define        START_TASK_STACK_SIZE 256
StaticTask_t   StartTaskBuffer;
StackType_t    StartTaskStack[ START_TASK_STACK_SIZE ];
#define        START_TASK_PRIO    ( tskIDLE_PRIORITY + 1 )
xTaskCreateStatic(

                (TaskFunction_t   ) Task_Init, //任务函数

                (const char*      ) "start_task", //任务名字

                (uint32_t         ) START_TASK_STACK_SIZE, //任务堆栈

                (void*            ) 1,   //传入任务参数

                (UBaseType_t      ) START_TASK_PRIO, //任务优先级

                (StackType_t*     ) StartTaskStack, //任务堆栈

                (StaticTask_t*    ) &StartTaskBuffer

);

动态创建任务:

/* 函数原型:
    BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                            const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
                            const configSTACK_DEPTH_TYPE usStackDepth,
                            void * const pvParameters,
                            UBaseType_t uxPriority,
                            TaskHandle_t * const pxCreatedTask )
*/


#define 	             START_TASK_STACK_SIZE 256
#define                            START_TASK_PRIO    ( tskIDLE_PRIORITY + 1 )
TaskHandle_t                 Task_Handler;         //任务句柄
xTaskCreate( Task_Init, 
            "start_task", 
            START_TASK_STACK_SIZE, 
            NULL, 
            START_TASK_PRIO, 
            &Task_Handler );


??

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:46:35  更:2022-03-22 20:47:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:55:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码