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. sqllite 学习-1

    C# SQLite 数据库操作学习: https://www.cnblogs.com/leemano/p/6578050.html SQLite 之 C#版 System.Data.SQLite 使用 ...

  2. 我非要捅穿这 Neutron(二)上层资源模型篇

    目录 文章目录 目录 Neutron 的资源模型 Network 运营商网络和租户网络 创建运营商网络 创建租户网络 创建外部网络 Network 小结 Subnet IP 核心网络服务 Subnet ...

  3. PAT 甲级 1071 Speech Patterns (25 分)(map)

    1071 Speech Patterns (25 分)   People often have a preference among synonyms of the same word. For ex ...

  4. cudaGetDevice() failed. Status: cudaGetErrorString symbol not found.怎么解决

    我是在使用anaconda的Spyder写一个数字识别的任务的时候遇到这个问题的,当时我以为是我的函数库有问题,然后安装了很多东西都没用,然后百度的答案都很模糊,在我尝试了一天一下午之后,找到了问题原 ...

  5. [BJOI2019] 奥术神杖 [取log+AC自动机+dp]

    题面 传送门 思路 首先,看到这个乘起来开根号的形式,应该能想到用取$\log$的方式做一个转化: $\sqrt[n]{\prod_i a_i}=\frac{1}{n}\sum_i \log_b a_ ...

  6. SSH 连接时间超时

    linux服务端 # vi /etc/ssh/sshd_config ClientAliveInterval 60 ClientAliveCountMax 3 # 注: # ClientAliveIn ...

  7. JIRA数据库的迁移,从HSQL到MYSQL/Oracle

    Jira数据库迁移,从HSQL到MYSQL 通过JIRA管理员登录,进入“管理员页面”,“系统”--“导入&导出”,以XML格式备份数据. 在MySQL中创建Schema,命名为jira 关闭 ...

  8. How George Washington Angered Lawmakers Over Thanksgiving——VOA慢速英语

    听力地址:How George Washington Angered Lawmakers Over Thanksgiving 中英对照:华盛顿总统将感恩节定为全国性节日 Words in This S ...

  9. code and dataset resources of computer vision

    From:http://rogerioferis.com/VisualRecognitionAndSearch2014/Resources.html Source Code Non-exhaustiv ...

  10. LeetCode 100. 相同的树(Same Tree) 2

    100. 相同的树 100. Same Tree 题目描述 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 每日一算法2019/5 ...