• FreeRTOS学习笔记4FreeRTOS配置管理


    FreeRTOS配置管理:

    网上移植教程较多,也可以使用官方提供的各种Demo工程进行移植,不在详细介绍。本文主要介绍FreeRTOS移植成功后进行的配置方式。使其成为自己最匹配最精简,最适用的系统。

    FreeRTOSConfig.h几乎包含了所有需要的配置。下文讲述主要的几项配置:

    1. 包含INCLUDE_。。。的宏定义。所有这些宏都是条件编译所需的。可以根据自身需要进行定义。例如INCLUDE_xTaskAbortDelay是需要使用函数 xTaskAbortDelay()时定义为1。这样做的好处是使处理器不编译不需要的函数。减少代码量。函数的功能在函数名字中已体现出来。根据需要进行定义即可。
    2. config开始的宏: 

       2.1 configAPPLICATION_ALLOCATED_HEAP 该宏定义为1时用户可以自己家设置堆内存,堆内存的详细代码在heap_1.c到heap_5.c中。具体取决于用户选择哪种内存管理方式。网上都推荐使用4。

       2.2 configASSERT 断言,和assert()函数类似,调试时可以判断传入的参数是否合理。一般在调试结束后关闭。FreeRTOS内核中的关键点都会调用 configASSERT(x),configASSERT()需要在 需要在 FreeRTOSConfig.h文 件中定义, 如下实例: #define configASSERT((x)) if((x)==0) vAssertCalled(__FILE_,__LINE__);
    注意, vAssertCalled()函数需要用户自行去定义,可以是显示到 LCD上的 函数 ,也可以是 通过串口打印出来的 函数 ,原子的例程使用的定义:

    //断言 #define vAssertCalled(char,int) printf("Error:%s,%d\r\n",char,int) #define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__)
    当参数 x错误的 时候就通过串口打印出发生文件名和所在错误的 时候就通过串口打印出发生文件名和所在行。

       2.3  configCHECK_FOR_STACK_OVERFLOW 堆栈溢出检测。堆栈的大小是从任务创建时就已经定义完成的。如果定义了堆栈溢出检测,用户必须定义一个钩子函数(回调函数)当堆栈溢出时,就会调用该函数。函数原型:

        void vApplicationStackOverflowHook( TaskHandle_t xTask, char * pcTaskName );

    参数 xTask是任务句柄, pcTaskName是任务名字,要注意的堆栈溢出太严重话可能会 是任务名字,要注意的堆栈溢出太严重话可能会 是任务名字,要注意的堆栈溢出太严重话可能会 损毁这两个参数, 损毁这两个参数, 如果发生这种情况的话可以直接查看变量 如果发生这种情况的话可以直接查看变量 如果发生这种情况的话可以直接查看变量 如果发生这种情况的话可以直接查看变量 如果发生这种情况的话可以直接查看变量 pxCurrentTCB来确定哪个任务发 生了堆栈溢出,一般在调试结束时将该宏关闭,减少系统开销。该宏可以等于1或者2,方法1较快,方法2慢一点但是几乎可以检测出所有堆栈溢出的情况。

       2.4 configCPU_CLOCK_HZ 设置 CPU的频率。

       2.5 configSUPPORT_DYNAMIC_ALLOCATION 定义为 1的话在创建 FreeRTOS的内核对象时候 所需要的 RAM就会从 FreeRTOS的堆中 的堆中 动态的获取内存,定义为0的话需要用户自行提供。默认为1。

       2.6 configGENERATE_RUN_TIME_STATS 置为 1开启时间统计功能, 开启时间统计功能, 相应的 API函数会被编译, 为 0时关闭间统计功能。 时关闭间统计功能。 如果 宏 configGENERATE_RUN_TIME_STATS为 1的话还需要定义一个外设来作为时间系统的基准,还需要一个宏返回当前基准时钟的值。

       2.7 configIDLE_SHOULD_YIELD 一般关闭,空闲任务。没什么作用。

       2.8 configKERNEL_INTERRUPT_PRIORITY、
           onfigMAX_SYSCALL_INTERRUPT_PRIORITY、
           onfigMAX_API_CALL_INTERRUPT_PRIORITY
           三个宏和FreeRTOS 的中断配置有关。

       2.9 configMAX_CO_ROUTINE_PRIORITIES 系统的最大优先级数量

       2.10 configMAX_PRIORITIES 设置任务的优先级数量,设置好以后任务就可以使用从0 到configMAX_PRIORITIES-1 的优先级,其中0 是最低优先级,configMAX_PRIORITIES-1 是最高优先级。

        2.11 configMAX_TASK_NAME_LEN 设置任务名最大长度。

        2.12 configMINIMAL_STACK_SIZE 设置空闲任务的最小堆栈大,以字为单位,不是字节。

        2.13 configNUM_THREAD_LOCAL_STORAGE_POINTERS 每个任务的指针数组大小。

        2.14 configUSE_MUTEXES 为1时使用互斥信号量。

        2.15 configUSE_PORT_OPTIMISED_TASK_SELECTION FreeRTOS有两种方法来选择下一个 要运行的任务,是通用另外有两种方法来选择下一个 要运行的任务,是通用另外有两种方法来选择下一个 要运行的任务,是通用另外是特殊的 方法, 也就是硬件方法, 使用 MCU自带 的硬件指令来实现。(注:使用硬件方式时和使用的CPU有关,例如stm32有32个中断,因此,使用stm32时硬件方式最多使用32个任务。而通用方式无限制。)

        2.16 onfigUSE_PREEMPTION 为1时使用抢占式任务调度器。0为协程方式。(FreeRTOS已经不再更新协程方式的算法。我们也可以使用同一优先级多个任务的方式来进行相类似的效果。)

        2.17 configUSE_TICKLESS_IDLE 低功耗模式

          configUSE_TIMERS 软件定时器模式。并不精确。

        2.18 configUSE_TIME_SLICING 为1时使用抢占式调度器,这样会使调度器无限调用最高级优先级任务。为0时使用轮盘式任务调度模式。默认为1。

      这是这个头文件中我认为最常用也是最基本的几个宏,在今后使用中有需要再具体查看即可。

  • 相关阅读:
    基于spring mvc的图片验证码实现
    spring mvc controller间跳转 重定向 传参
    fedora23安装配置记录
    Qt移动开发大部分的场景基本上实现没问题,listview支持刷新3000~5000的实时数据没有任何压力(QML的几个大型应用)
    经过了这么多年的发展,软件开发行业已经完全渗入了整个社会
    Qt云服务/云计算平台QTC(Qt Cloud Services)入门(0)
    Windows下用VC与QT编译MPI程序入门
    VS2008下QT整合OGRE
    表现层及ASP.NET MVC介绍(二)
    DDD分层架构的进化
  • 原文地址:https://www.cnblogs.com/daidong805/p/7220053.html
Copyright © 2020-2023  润新知