FreeRTOS config开始的宏

2023-10-30

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS config开始的宏 的相关文章

随机推荐

  • 日期时间datetime与时间戳timestamp互相转换

    字符串日期时间转换成时间戳 2015 08 28 16 43 37 283 gt 1440751417 def string2timestamp strValue d datetime datetime strptime strValue
  • Android 手机各大厂商的指纹设置界面

    开发中有的时候要跳转到指纹设置界面 Android厂商较多 基本都是定制化的操作 所以每个厂商的指纹设计界面各不相同 下面罗列几款市面上比较常用的手机厂商的指纹设置界面 并附上跳转方式 private final String SONY s
  • solidity智能合约的经典设计模式

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 设计模式是许多开发场景中的首选解决方案 本文将介绍五种经典的智能合约设计模式并给出 以太坊solidity实现代码 自毁合约 工厂合约 名称注册表 映射表迭代器和提款模式
  • Get value from agent failed:ZBX_TCP_READ() timed out(亲测)

    报错信息 Get value from agent failed ZBX TCP READ timed out 解决办法 1 查看服务和端口是否还在 2 查看zabbix agentd conf端配置文件 serverIP是否正确 3 查看
  • Java程序设计——UML类图

    目录 仅供参考 一 定义 二 类图示例 三 类之间的关系 类与类一共有如下几种关系 泛化 Generalization 实现 Realization 依赖 Dependence 关联 Association 聚合 Aggregation 组
  • eclipse project文件夹下 删除不掉文件夹或者文件的解决的方法

    对于新手来说 有时操作失误就会导致eclipse文件夹中的某些子文件夹或者文件无法删除 这种原因是 在project文件夹中 不是eclipse上显示的 是真实的物理磁盘上的 这个文件夹或者文件已经不存在了 所以在删除的时候报错 无法删除
  • python自动化办公——定制化将电子签名批量签写到PDF文件

    python自动化办公 定制化将电子签名批量签写到PDF文件 文章目录 python自动化办公 定制化将电子签名批量签写到PDF文件 1 安装依赖 2 需求分析 3 代码 1 安装依赖 首先需要下载所需要的库 pip install pdf
  • 树莓派CM4基于emmc安装Ubuntu系统及初始配置

    文章目录 安装前准备 CM4安装系统 参考资料 安装前准备 在树莓派官方手册CM板卡介绍中说明 开发板的供电电压为DC12V或5V 为了保证开发板USB接口的正常使用 开发板的供电电流应 1 2A CM4安装系统 补充说明 Ubuntu18
  • DCIC-赛题二赛后总结

    文章目录 赛题说明 赛题名称 赛题说明 任务解析 数据清单 算法分析 1 1 巡游车日均空驶率计算 1 2 网约车空驶率部分代码分析 1 3 结果与结果分析 2 1 订单运距与时长计算 2 2 结果与结果分析 3 1 上下客地点可视化实现
  • python 字符串 大小写转换 以及一系列字符串操作技巧

    总结 capitalize 首字母大写 其余全部小写 upper 全转换成大写 lower 全转换成小写 title 标题首字大写 如 i love python title I Love Python 转换大小写 和其他语言一样 Pyth
  • Anaconda--Python环境管理

    Anaconda是Python的一个开源发行版本 主要面向科学计算 预装了丰富强大的库 使用Anaconda可以轻松管理多个版本的Python环境 Download https www anaconda com download Anaco
  • 堆的节点总数n和叶结点数目的关系 (CLRS习题 6.1-7)

    来自算法导论 CLRS的一个习题 Chapter 6 Heap Sort Exercise6 1 7 Show that with the array representationfor storing an n element heap
  • TESTNG框架

    TestNG是一个设计用来简化广泛的测试需求的测试框架 从单元测试 隔离测试一个类 到集成测试 测试由有多个类多个包甚至多个外部框架组成的整个系统 例如运用服务器 编写一个测试的过程有三个典型步骤 编写测试的 业务逻辑并在代码中插入Test
  • Typora 含多图片笔记快速上传到 CSDN 上发表

    Typora 含多图片笔记快速上传到 CSDN 上发表 适用场景 解决方案 具体步骤 适用场景 在 Typora 里面记笔记 上传的图片是本地保存的 如果要将笔记上传到 CSDN 上发表的话 图片得一张一张地拖拽非常麻烦 解决方案 Typo
  • TypeScript快速上手

    简介 参考文档 https ts xcatliu com 阮一峰typescript入门教程 TypeScript JavaScript With Syntax For Types typescriptlang org typescript
  • Ubuntu上搭建RK3588开发环境

    目标 Ubuntu上搭建RK3588开发环境 并成功运行 测试其芯片性能 可参考连接 https wiki t firefly com zh CN Core 3588J started html x 16号之前完成打包Ubuntu系统 差一
  • String[] 插入元素数据

    String pIdStr request getParameter ids String projectIdList pIdStr split List
  • Mybatis报错mapkey is required解决方案

    Mybatis报错mapkey is required解决方案 问题背景 解决方案 总结 Lyric 几天都没有喝水也能活 问题背景 因为使用了mybatisX插件 导致检查报错mapkey is required 解决方案 1 关闭myb
  • vue中下载文件使用file-saver,文件错误excel无法打开

    最近使用到了file saver下载文件 通过axios调接口拿文件数据 再通过file saver下载文件 但就在我成功下载文件并打开时 提示这个信息 主要的原因就是没有设置响应的文件流类型为 blob 加上后就可以打开了
  • FreeRTOS config开始的宏

    FreeRTOSConfig h系统配置文件中可以自定义 FreeRTOS h中定义默认值 configAPPLICATION ALLOCATED HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的 将宏configAPPLIC