FreeRTOSConfig.h系统配置文件中可以自定义,FreeRTOS.h中定义默认值

configAPPLICATION_ALLOCATED_HEAP

默认情况下FreeRTOS的堆内存是由编译器来分配的,将宏configAPPLICATION_ALLOCATED_HEAP定义为1的话堆内存可以由用户自行设置(heap_1.c、heap_2.c、heap_3.c、heap_4.c和heap_5.c)

/* Allocate the memory for the heap. */
#if( configAPPLICATION_ALLOCATED_HEAP == 1 )
/* The application writer has already defined the array used for the RTOS
heap - probably so it can be placed in a special segment or address. */
extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#else
static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#endif /* configAPPLICATION_ALLOCATED_HEAP */

configASSERT

断言,类似 C 标准库中的 assert()函数,调试代码的时候可以检查传入的参数是否合理(调试阶段使用)

#ifndef configASSERT
#define configASSERT( x )
#define configASSERT_DEFINED 0
#else
#define configASSERT_DEFINED 1
#endif

configCHECK_FOR_STACK_OVERFLOW

设置堆栈溢出检测,每个任务都有一个任务堆栈。如果使用函数xTaskCreate()创建一个任务的话那么这个任务的堆栈是自动从FreeRTOS的堆(ucHeap)中分配的。如果使用函数xTaskCreateStatic()创建任务的话任务堆栈是由用户设置的,参数pxStackBuffer为任务堆栈,一般是一个数组

使能堆栈检测功能(configCHECK_FOR_STACK_OVERFLOW大于0),而且用户必须提供一个钩子函数(回调函数)。当内核检测到堆栈溢出以后就会调用这个钩子函数

/* Callback function prototypes. --------------------------*/
#if( configCHECK_FOR_STACK_OVERFLOW > 0 )
extern void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName );
#endif

configCHECK_FOR_STACK_OVERFLOW==1:堆栈溢出检测方法 1。优点就是快

configCHECK_FOR_STACK_OVERFLOW==2:堆栈溢出检测方法 2。能检测到几乎所有的堆栈溢出

configCPU_CLOCK_HZ

CPU的频率

#define configCPU_CLOCK_HZ          ( ( unsigned long ) 72000000 )  

configSUPPORT_DYNAMIC_ALLOCATION

1(默认):在创建FreeRTOS的内核对象的时候所需要的RAM从FreeRTOS的堆中动态获取内存

0:所需的RAM需要用户自行提供

#ifndef configSUPPORT_DYNAMIC_ALLOCATION
/* Defaults to 1 for backward compatibility. */
#define configSUPPORT_DYNAMIC_ALLOCATION 1
#endif

configENABLE_BACKWARD_COMPATIBILITY

#ifndef configENABLE_BACKWARD_COMPATIBILITY
#define configENABLE_BACKWARD_COMPATIBILITY 1
#endif
#if configENABLE_BACKWARD_COMPATIBILITY == 1
#define eTaskStateGet eTaskGetState
#define portTickType TickType_t
#define xTaskHandle TaskHandle_t
#define xQueueHandle QueueHandle_t
#define xSemaphoreHandle SemaphoreHandle_t
#define xQueueSetHandle QueueSetHandle_t
#define xQueueSetMemberHandle QueueSetMemberHandle_t
#define xTimeOutType TimeOut_t
#define xMemoryRegion MemoryRegion_t
#define xTaskParameters TaskParameters_t
#define xTaskStatusType TaskStatus_t
#define xTimerHandle TimerHandle_t
#define xCoRoutineHandle CoRoutineHandle_t
#define pdTASK_HOOK_CODE TaskHookFunction_t
#define portTICK_RATE_MS portTICK_PERIOD_MS
#define pcTaskGetTaskName pcTaskGetName
#define pcTimerGetTimerName pcTimerGetName
#define pcQueueGetQueueName pcQueueGetName
#define vTaskGetTaskInfo vTaskGetInfo /* Backward compatibility within the scheduler code only - these definitions
are not really required but are included for completeness. */
#define tmrTIMER_CALLBACK TimerCallbackFunction_t
#define pdTASK_CODE TaskFunction_t
#define xListItem ListItem_t
#define xList List_t
#endif /* configENABLE_BACKWARD_COMPATIBILITY */

V8.0.0之前的FreeRTOS中会使用到这些数据类型

configGENERATE_RUN_TIME_STATS

1:开启时间统计功能

0:关闭时间统计功能

#if ( configGENERATE_RUN_TIME_STATS == 1 )

    #ifndef portCONFIGURE_TIMER_FOR_RUN_TIME_STATS /* 初始化一个外设来作为时间统计的基准时钟 */
#error If configGENERATE_RUN_TIME_STATS is defined then portCONFIGURE_TIMER_FOR_RUN_TIME_STATS must also be defined. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS should call a port layer function to setup a peripheral timer/counter that can then be used as the run time counter time base.
#endif /* portCONFIGURE_TIMER_FOR_RUN_TIME_STATS */ #ifndef portGET_RUN_TIME_COUNTER_VALUE /* 返回当前基准时钟的时钟
值 */
#ifndef portALT_GET_RUN_TIME_COUNTER_VALUE
#error If configGENERATE_RUN_TIME_STATS is defined then either portGET_RUN_TIME_COUNTER_VALUE or portALT_GET_RUN_TIME_COUNTER_VALUE must also be defined. See the examples provided and the FreeRTOS web site for more information.
#endif /* portALT_GET_RUN_TIME_COUNTER_VALUE */
#endif /* portGET_RUN_TIME_COUNTER_VALUE */ #endif /* configGENERATE_RUN_TIME_STATS */

configIDLE_SHOULD_YIELD

1:空闲任务会为处于同等优先级的用户任务让出CPU使用权

0:空闲任务不会为其他处于同优先级的任务让出CPU使用权

建议关闭这个功能,因为空闲任务用不了多少时间

#define configIDLE_SHOULD_YIELD     1

configMAX_CO_ROUTINE_PRIORITIES

设置可以分配给协程的最大优先级。协程的优先级可以从0到configMAX_CO_ROUTINE_PRIORITIES-1 ,其中0是最低的优先级

#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

configMAX_PRIORITIES

设置任务的优先级数量。同上

#define configMAX_PRIORITIES        ( 5 )

configMAX_TASK_NAME_LEN

设置任务名最大长度

#define configMAX_TASK_NAME_LEN     ( 16 )

configMINIMAL_STACK_SIZE

设置空闲任务的最小任务堆栈大小。以字为单位。比如在STM32上设置为100的话,那么真正的堆栈大小就是100*4=400字节

#define configMINIMAL_STACK_SIZE    ( ( unsigned short ) 128 )

configNUM_THREAD_LOCAL_STORAGE_POINTERS

设置每个任务的本地存储指针数组大小

#ifndef configNUM_THREAD_LOCAL_STORAGE_POINTERS
#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 0
#endif

configQUEUE_REGISTRY_SIZE

设置可以注册的队列和信号量的最大数量。在使用内核调试器查看信号量和队列的时候需

要设置此宏

#ifndef configQUEUE_REGISTRY_SIZE
#define configQUEUE_REGISTRY_SIZE 0U
#endif

configSUPPORT_STATIC_ALLOCATION

1:在创建一些内核对象的时候需要用户指定RAM

0:使用heap.c中的动态内存管理函数来自动的申请RAM

#ifndef configSUPPORT_STATIC_ALLOCATION
/* Defaults to 0 for backward compatibility. */
#define configSUPPORT_STATIC_ALLOCATION 0
#endif

configTICK_RATE_HZ

设置FreeRTOS的系统时钟节拍频率,单位为HZ

#define configTICK_RATE_HZ          ( ( TickType_t ) 1000 )

configTIMER_QUEUE_LENGTH

配置FreeRTOS软件定时器。FreeRTOS的软件定时器API函数会通过命令队列向软件定时器任务发送消息,此宏用来设置这个软件定时器的命令队列长度

configTIMER_TASK_PRIORITY

设置软件定时器任务的任务优先级

configTIMER_TASK_STACK_DEPTH

设置定时器服务任务的任务堆栈大小

configTOTAL_HEAP_SIZE

设置堆大小。如果使用了动态内存管理的话

/* Allocate the memory for the heap. */
#if( configAPPLICATION_ALLOCATED_HEAP == 1 )
/* The application writer has already defined the array used for the RTOS
heap - probably so it can be placed in a special segment or address. */
extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#else
static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#endif /* configAPPLICATION_ALLOCATED_HEAP */

configUSE_16_BIT_TICKS

设置系统节拍计数器变量数据类型

1:TickType_t是16位的

0:TickType_t是32位的

#define configUSE_16_BIT_TICKS      0

configUSE_CO_ROUTINES

1:启用协程,协程可以节省开销

0:关闭。建议关闭

#define configUSE_CO_ROUTINES       0

configUSE_COUNTING_SEMAPHORES

1:启用计数型信号量

#ifndef configUSE_COUNTING_SEMAPHORES
#define configUSE_COUNTING_SEMAPHORES 0
#endif

configUSE_IDLE_HOOK

1:使用空闲任务钩子函数。用户需要实现空闲任务钩子函数

#define configUSE_IDLE_HOOK         0

configUSE_MALLOC_FAILED_HOOK

1:使用内存分配失败钩子函数。用户需要实现内存分配失败钩子函数

#ifndef configUSE_MALLOC_FAILED_HOOK
#define configUSE_MALLOC_FAILED_HOOK 0
#endif

configUSE_MUTEXES

1:使用互斥信号量

#ifndef configUSE_MUTEXES
#define configUSE_MUTEXES 0
#endif

configUSE_PORT_OPTIMISED_TASK_SELECTION

选择下一个要运行的任务

1:硬件的特殊指令

0:C语言来实现

#ifndef configUSE_PORT_OPTIMISED_TASK_SELECTION
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
#endif

configUSE_PREEMPTION

1:使用抢占式调度器。每个时钟节拍中断中进行任务切换

0:使用协程。任务切换:

一个任务调用了函数 taskYIELD()

一个任务调用了可以使任务进入阻塞态的 API 函数

应用程序明确定义了在中断中执行上下文切换

#define configUSE_PREEMPTION        1

configUSE_QUEUE_SETS

1:启用队列集功能

#ifndef configUSE_QUEUE_SETS
#define configUSE_QUEUE_SETS 0
#endif

configUSE_RECURSIVE_MUTEXES

1:使用递归互斥信号量

#ifndef configUSE_RECURSIVE_MUTEXES
#define configUSE_RECURSIVE_MUTEXES 0
#endif

configUSE_TASK_NOTIFICATIONS

1:使用任务通知功能

#ifndef configUSE_TASK_NOTIFICATIONS
#define configUSE_TASK_NOTIFICATIONS 1
#endif

configUSE_TICK_HOOK

1:使能时间片钩子函数。用户需要实现时间片钩子函数

#define configUSE_TICK_HOOK         0

configUSE_TICKLESS_IDLE

1:使能低功耗tickless模式

#ifndef configUSE_TICKLESS_IDLE
#define configUSE_TICKLESS_IDLE 0
#endif

configUSE_TIMERS

1:使用软件定时器

#ifndef configUSE_TIMERS
#define configUSE_TIMERS 0
#endif

configUSE_TIME_SLICING

0:不在时钟节拍中断中执行相同优先级任务的任务切换

#ifndef configUSE_TIME_SLICING
#define configUSE_TIME_SLICING 1
#endif

configUSE_TRACE_FACILITY

1:启用可视化跟踪调试

#define configUSE_TRACE_FACILITY    0

FreeRTOS config开始的宏的更多相关文章

  1. nRF52832 SDK15.3.0 基于ble_app_uart demo FreeRTOS移植

    参考资料:https://blog.csdn.net/u010860832/article/details/86235993 这里把移植经验记录下来,供有需要的同学参考,有不对的地方也请大家批评指正. ...

  2. u-boot 2016.05 添加自己的board 以及config.h

    拿到一个uboot 后,我都想添加一个属于自己的board文件以及include/configs/*.h 文件. 如何添加这个些文件,今天来记录一下. 复制一份你所参考的板级文件,比如说board/v ...

  3. automake使用

    antuomake 流程图: http://blog.csdn.net/houwei544/article/details/8185916 这个教程不错 https://www.ibm.com/dev ...

  4. 大型项目使用Automake/Autoconf完成编译配置

    http://www.cnblogs.com/xf-linux-arm-java-android/p/3590770.htmlhttp://blog.csdn.net/zengraoli/articl ...

  5. 编译kernel:编译

    韦东山Linux视频第1期_裸板_UBoot_文件系统_驱动初步第10课第3节 内核启动流程分析之Makefile.WMV  1. 编译内核分三步: make xxx_defconfig [linux ...

  6. 编译kernel:配置

    韦东山Linux视频第1期_裸板_UBoot_文件系统_驱动初步\第10课第2节 内核启动流程分析之配置.WMV 下面以DM9000的配置为例: 在一个编译好的内核代码里,寻找CONFIG_DM900 ...

  7. Mpg123源代码详解

    Mpg123与libmad一样,支持mpeg1,2,2.5音频解码.目前来看mpg123比libmad支持了网络播放功能.而且libmad基本上开源社区在2005年左右,基本停止更新,mpg123至今 ...

  8. Zephyr学习(三)启动过程

    一.写在前面 最近对zephyr这个系统很感兴趣,因此业余有时间的时候都在研究它的源码,而光看代码不去动手这不是我的风格,于是乎在网上淘了一块STM32F103C8T6的核心板和一块NRF52832的 ...

  9. 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境【转】

    转自:http://www.cnblogs.com/pengdonglin137/p/5023342.html#_label2 阅读目录(Content) 环境介绍: 下载Linux内核 安装arm的 ...

随机推荐

  1. python-learning-第二季-数据处理numpy

    https://www.bjsxt.com/down/8468.html numpy-科学计算基础库 例子: import numpy as np #创建数组 a = np.arange() prin ...

  2. Oracle的存储过程基本写法

    转: Oracle的存储过程基本写法 目录 1.1,Oracle存储过程简介: 1.2,创建存储过程的语法: 2.0,游标的使用.看到的一段解释很好的概念,如下: 回到顶部 1.1,Oracle存储过 ...

  3. ES6深入浅出-13 Proxy 与 Reflect-2.Proxy 代理

    阮一峰http://es6.ruanyifeng.com/#docs/proxy MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript ...

  4. Spring Cloud Ribbon 客户端负载均衡 4.3

      在分布式架构中,服务器端负载均衡通常是由Nginx实现分发请求的,而客户端的同一个实例部署在多个应用上时,也需要实现负载均衡.那么Spring Cloud中是否提供了这种负载均衡的功能呢?答案是肯 ...

  5. vmware安装gho系统(win10上安装虚拟机然后在vmware上安装win7)

    用ghost直接将gho转成vmdk将ghost32, gho文件放到同一目录, cmd里进入对应目录,输入以下命令ghost32 -clone,mode=restore,src=example.gh ...

  6. 细聊Oracle通过ODBC数据源连接SQL Server数据库

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,文章结尾处的一些扩展有一定实战意 ...

  7. 常见浏览器CSS hack方法总结

    ie6和ie7 #tip {*background:black; /*IE7 背景变黑色*/_background:orange; /*IE6 背景变橘色*/} IE8和IE9 :root .test ...

  8. Python3之内建模块collections

    collections是python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不可变集合,例如,一个点的二维坐标可以表示成 >>> ...

  9. Eclipse下Maven安装和配置

    1. 下载 Maven 在百度输入 Maven 搜索 ,找到它的官网(http://maven.apache.org/),点击进入下载页面. 下载页面地址: http://maven.apache.o ...

  10. ROS安装,配置

    ROS最好安装在Ubuntu系统,因为ROS目前在其他的系统中都是试验性的 ! <Learning ROS for Robotics Programming-- second Edition&g ...