zoukankan      html  css  js  c++  java
  • FreeRTOS学习笔记5静态方式创建任务函数

    配置完成后的进行任务创建,使用静态方式创建任务时需要使将宏 configSUPPORT_STATIC_ALLOCATION设置为 1,即使用静态内存。还需要将函数

    vApplicationGetIdleTaskMemory()和 ApplicationGetTimerTaskMemory()进行实现。通过这两个函数来给空闲任务 和定时器服的任务堆 栈和任务控制块分配内存。在maiinc.c中进行定义。定义静态的任务堆栈和任务控制块内存,然后将这些内存传递给函数参数。最后创建空闲任务和定时器任务的API函数会调用这两个函数。

    这两个函数我们在mainc.c中定义:

    //空闲任务任务堆栈

    static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];

    //空闲任务控制块 static StaticTask_t IdleTaskTCB; 

    //定时器服务任务堆栈

    static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];

    //定时器服务任务控制块

    static StaticTask_t TimerTaskTCB;

    //获取空闲任务地堆栈和控制块内存,因为本例程使用的 

    //静态内存,因此空闲任务的堆栈和控制块就应该 静态内存,因此空闲任务的堆栈和控制块就应该

    //有用户来提供, 有用户来提供, FreeRTOS提供了接口函数 vApplicationGetIdleTaskMemory()

    //实现此函数即可。 实现此函数即可。

    //ppxIdleTaskTCBBuffer:任务控制块内存

    //ppxIdleTaskStackBuffer:任务堆栈内存

    //pulIdleTaskStackSize:任务堆栈大小

    void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,

                      StackType_t **ppxIdleTaskStackBuffer,

                       uint32_t *pulIdleTaskStackSize)

    {

    *ppxIdleTaskTCBBuffer=&IdleTaskTCB;

    *ppxIdleTaskStackBuffer=IdleTaskStack;

    *pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;

    }

    //获取定时器服务任的堆栈和控制块内存

    //ppxTimerTaskTCBBuffer:任务控制块内存 //ppxTimerTaskStackBuffer:任务堆栈内存

    //pulTimerTaskStackSize:任务堆栈大小 任务堆栈大小

    void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,

                       StackType_t **ppxTimerTaskStackBuffer,

                        uint32_t *pulTimerTaskStackSize)

    {

      *ppxTimerTaskTCBBuffer=&TimerTaskTCB;

      *ppxTimerTaskStackBuffer=TimerTaskStack;               

      *pulTimerTaskStackSize=configTIMER_TASK_STACK_DEPTH;

    }

    注:定义任务控制块时,类型要用StaticTask_t,而不是TCB_t或tskTCB

    xTaskCreateStatic()和 xTaskCreate()没有太大的区别。大部分是相同的。创建任务的过程中。还是使用动态的方式更为简单。静态的方式了解一下即可。需要使用时再深入研究。

  • 相关阅读:
    【Python】ModuleNotFoundError: No module named 'matplotlib.pyplot'
    【DB2】DB2使用IMPORT命令导入含有自增长列的表报错处理
    ~~
    汉字的unicode码范围是多少?
    字符编码(ASCII,Unicode和UTF-8) 和 大小端(zz)
    是否 whether ,if
    定语从句:
    by,with
    C++中extern “C”含义深层探索
    安装Office2007时出现1706错误的解决方案
  • 原文地址:https://www.cnblogs.com/daidong805/p/7242553.html
Copyright © 2011-2022 走看看