基础配置项

1、为什么使用config.h?
此页面所有的宏定义是用来配置系统所需要的功能,使用条件编译的方式减少系统占用的ROM和RAM大小,降低系统消耗。

2、#define configUSE_PREEMPTION
为1时使用抢占式内核,0使用协程。
(抢占式内核是指准备运行的最高优先级任务始终被赋予 CPU 控制权,当一个任务使更高优先级的任务准备好运行时,当前任务被抢占(挂起)并且更高优先级的任务立即获得 CPU 的控制权。)
(协程是指是通过一个线程实现代码块相互切换执行,对于并发执行的程序来讲,减少上下文切换的开销,提升程序的性能,是非抢占式的,前一个协程执行完毕或者堵塞,才会让出CPU,其在FreeRTOS中不再更新)

3、#define configUSE_TIME_SLICING
为1使能时间片调度。
(时间片调度是指每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。)

4、#define configUSE_PORT_OPTIMISED_TASK_SELECTION
用于优化优先级列表中要执行的最高优先级任务的算法。
配置为1时进行优化,此方法部分硬件平台支持,比通用方式高效,但有最高优先级数量限制。
配置为0用于通用方法,所有平台的移植文件都可以配置为0,纯C语言编写,但可用的优先级数量不限制。

5、#define configUSE_TICKLESS_IDLE
为1启用低功耗tickless模式。
(低功耗模式是指在空闲任务的钩子函数中执行低功耗相关处理,比如关闭其他外设时钟、降低系统主频等等。)

6、#define configUSE_QUEUE_SETS
为1时启用队列集。
(队列是任务与任务、任务与中断之间通信的桥梁,又因为其用来传递消息,也称为消息队列)

7、#define configCPU_CLOCK_HZ
定义CPU频率。
(CPU频率指单片机型号HAL库定义值,即SystemCoreClock,可能与main函数中定义的时钟频率不同,但其在运行过程中会自动改变)

8、#define configTICK_RATE_HZ
时钟节拍频率,周期为(1/定义值)秒。

9、#define configMAX_PRIORITIES
可使用的最大优先级。
(设置任务的优先级数量,设置好以后任务就可以使用从0到configMAX_PRIORITIES-1的优先级,其中0是最低优先级,configMAX_PRIORITIES-1是最高优先级。)

10、#define configMINIMAL_STACK_SIZE
空闲任务使用的堆栈大小,以字为单位,例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。

11、#define configMAX_TASK_NAME_LEN
任务名最大字符串长度。

12、#define configUSE_16_BIT_TICKS
系统节拍计数器变量数据类型,变量类型为TickType_t,1表示为16位无符号整形,0表示为32位无符号整形。

13、#define configIDLE_SHOULD_YIELD
为1时空闲任务放弃CPU使用权给其他同优先级的用户任务。
(宏定义了与空闲任务处于同等优先级时,是否放弃CPU使用权给其他同优先级的用户任务,但同优先级的抢占任务与空闲任务共用一个时间片,可能导致用户任务运行时间少)

14、#define configUSE_TASK_NOTIFICATIONS
为1时开启任务通知功能,相关的API函数会被编译,开启此功能会使每个任务多消耗8个字节。

15、#define configUSE_MUTEXES
为1时使用互斥信号量。
(互斥信号量是一个拥有优先级继承的二值信号量,适用于需互斥访问的应用。)
(当一个互斥信号量正在被一个低优先级的任务使用,而此时有个高优先级的任务也尝试获取这个互斥信号量的话就会被阻塞。不过这个高优先级的任务会将低优先级任务的优先级提升到与自己相同的优先级,这个过程就是优先级继承。)

16、#define configQUEUE_REGISTRY_SIZE
不为0时表示启用队列记录,具体值为记录队列和信号量最大数目。

17、#define configCHECK_FOR_STACK_OVERFLOW
大于0时启用堆栈溢出检测功能,如果使用此功能用户必须提供一个栈溢出钩子函数,如果使用的话此值可以为1或者2,因为有两种栈溢出检测方法,一般堆栈溢出检测会增加上下文切换的开销,建议在调试的时候使用。
(回调函数更多的是目的处理,钩子函数更多的是过程监控,一般是操作函数指针实现且函数内容为用户定义)

18、#define configUSE_RECURSIVE_MUTEXES
为1时使用递归互斥信号量。
(递归互斥信号量可以看作是一个特殊的互斥信号量,已经获取了互斥信号量的任务就不能再次获取这个互斥信号量,但是递归互斥信号量不同,已经获取了递归互斥信号量的任务可以再次获取这个递归互斥信号量,而且次数不限,但获取多少次,结束时就得释放多少次)

19、#define configUSE_MALLOC_FAILED_HOOK
1使用内存申请失败钩子函数。

20、#define configUSE_APPLICATION_TASK_TAG
为任务分配标签值,设置为1来使用vTaskSetApplicationTaskTag函数,分配的标签只对应用程序有用,内核不使用。.

21、#define configUSE_COUNTING_SEMAPHORES
为1时使用计数信号量。
(计数信号量为长度大于1的队列,同二值信号量一样,用户无需关心队列中的数据内容,只需关心队列是否为空即可)

内存申请配置项

1、#define configSUPPORT_DYNAMIC_ALLOCATION
为1时支持动态内存申请。
(动态内存实质并不是真正意义上的动态分配,而是事先分配了一个足够大的静态数组,然后freertos的内存管理策略会对这一块大的静态数组进行内存管理。)

2、#define configSUPPORT_STATIC_ALLOCATION
为1时支持静态内存申请。
(需要用户先申请任务控制模块和任务栈需要的内存,然后把内存地址传递给函数,函数负责其他初始化)

3、#define configTOTAL_HEAP_SIZE
系统所有总的堆大小,即动态内存最大占用大小
(静态内存在栈上分配; 动态内存在堆上分配。)

钩子函数配置项

1、#define configUSE_IDLE_HOOK
为1时使用空闲钩子;为0时不使用
(空闲任务钩子函数会在空闲任务每循环一次时就自动调用一次。)

2、#define configUSE_TICK_HOOK
为1时使用时间片钩子;为0时不使用
(时间片中断可以周期性的调用一个被称为钩子函数(回调函数)的应用程序。时间片钩子函数可以很方便的实现一个定时器功能。)

状态配置项

1、#define configGENERATE_RUN_TIME_STATS
为1时启用运行时间统计功能;
(用于统计每个任务的运行时间。要使用这个函数必须有一个用于时间统计的定时器或计数器,这个定时器或计数器的精度要至少大于10倍的系统节拍周期。)

2、#define configUSE_TRACE_FACILITY
为1启用可视化跟踪调试;
(使能此配置将添加额外的结构体成员和函数,以此来协助可视化和跟踪。)

3、#define configUSE_STATS_FORMATTING_FUNCTIONS
与宏configUSE_TRACE_FACILITY同时为1时会编译下面3个函数
prvWriteNameToBuffer(),vTaskList(),vTaskGetRunTimeStats();启用可视化跟踪调试;

协程配置项

1、#define configUSE_CO_ROUTINES
设置为1,将使用(协同例程)合作轮转式程序,启用协程以后必须添加文件croutine.c.

2、#define configMAX_CO_ROUTINE_PRIORITIES
协程的有效优先级数目;

软件定时器配置项

1、#define configUSE_TIMERS
为1时启用软件定时器;
(软件定时器允许设置一段时间,当设置的时间到达之后就执行指定的功能函数,被定时器调用的这个功能函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期,当定时器的定时周期到了以后就会执行回调函数。)

2、#define configTIMER_TASK_PRIORITY
软件定时器优先级,一般设为最大优先级

3、#define configTIMER_QUEUE_LENGTH
软件定时器队列长度;
(队列长度指定时器任务同一时间能容纳的定时器命令个数)

4、#define configTIMER_TASK_STACK_DEPTH
软件定时器任务堆栈大小;

可选函数配置项

#define INCLUDE_xTaskGetSchedulerState
#define INCLUDE_vTaskPrioritySet
#define INCLUDE_uxTaskPriorityGet
#define INCLUDE_vTaskDelete
#define INCLUDE_vTaskCleanUpResources
#define INCLUDE_vTaskSuspend
#define INCLUDE_vTaskDelayUntil
#define INCLUDE_vTaskDelay
#define INCLUDE_eTaskGetState
#define INCLUDE_xTimerPendFunctionCall

此类函数一般为1,用于对应函数的编译;

中断配置项

1、#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY
设置中断最低优先级;
(STM32优先级使用了4位,而且STM32配置的使用组4,也就是4位都是抢占优先级。因此优先级数就是16个,最低优先级那就是15。不同的MCU此值不同,具体是多少要看所使用的MCU的架构)

2、#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY
设置系统可管理的最高中断优先级;
(用于系统开关中断时,不同任务优先级在系统程序运行过程中可以抢占的上限)

3、#define configKERNEL_INTERRUPT_PRIORITY
设置内核中断优先级;
(RTOS内核中断不允许抢占用户使用的中断,因此这个宏一般定义为硬件最低优先级。)

4、#define configMAX_SYSCALL_INTERRUPT_PRIORITY
设置优先级,低于此优先级的中断可以安全的调用FreeRTOS 的API函数,高于此优先级的中断FreeRTOS不能调用FreeRTOS的API函数。

自娱自乐的FreeRTOS——config.h配置文件详解相关推荐

  1. Ruoyi框架学习--Vue前端配置文件详解

    CSDN话题挑战赛第2期 参赛话题:学习笔记 1.package.json配置中的重点介绍: 1.许可证:license:各种License介绍(BSD,MIT,MPL,Apache License, ...

  2. nuxt 目录结构及配置文件详解

    nuxt 目录结构详解 首先我们来看下使用 create-nuxt-app脚手架工具所创建的nuxt项目目录的结构, windows cmd 命令行输入,tree /f /a ,打印如下项目目录结构: ...

  3. Web.config配置文件详解(新手必看)

    Web.config配置文件详解(新手必看) 花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点. ...

  4. 【连载】从单片机到操作系统⑥——FreeRTOS任务切换机制详解

    大家晚上好,我是杰杰,最近挺忙的,好久没有更新了,今天周末就吐血更新一下吧! 前言 FreeRTOS是一个是实时内核,任务是程序执行的最小单位,也是调度器处理的基本单位,移植了FreeRTOS,则避免 ...

  5. tomcat配置文件详解

    Tomcat基础配置详解 组件原理图如下: 任何tomcat实例就是一个server,而一个server内部要想能够解析jsp页面转义编译serlet程序,要靠其引擎来实现 而引擎才是真正意义上执行j ...

  6. tomcat之配置文件详解

    tomcat配置文件详解 目录结构及作用 tomcat配置文件 1. context.xml 2. web.xml 3. server.xml 4. tomcat-users.xml 运维常用配置文件 ...

  7. docker-compose.yml 配置文件详解

    docker-compose.yml 配置文件详解 Compose 是一个用于定义和运行多容器 Docker 的工具.借助 Compose,您可以使用 YAML 文件来配置应用程序的服务. 使用 Co ...

  8. nginx学习简介-安装-启动-命令-nginx配置文件详解

    nginx是什么:nginx是一个高性能的HTTP和反向代理web服务器.同时也提供了IMAP/POP3/SMTP服务. nginx特点:开源.占内存少.轻量级.高性能(有报告表面nginx能支持高达 ...

  9. mmdetection学习笔记(二)配置文件详解

    配置文件详解 四项基础配置 1. _base_/datasets 2. _base_/models 3. _base_/schedules 4. _base_/default_runtime.py 基 ...

  10. Linux日志系统-03:logrotate主配置文件详解

    logrotate主配置文件详解 一.logrotate主配置文件/etc/logrotate.conf # see "man logrotate" for details # r ...

最新文章

  1. Java中Byte类型数据在运算中的问题
  2. RabbitMQ生产者代码
  3. 【Asp.net】Session对象
  4. 15-CSS基础-浮动流
  5. python学习笔记-day6-【python如何写excel表】
  6. android 固定大小取图片缩略图
  7. flume的几种使用方式
  8. cudaMemcpy的性能问题
  9. idea卸载不干净怎么办_卸载删除面具(Magisk)后,手机不开机怎么办
  10. 利用python进行TEQC质量检核结果绘图
  11. diskpart clean误操作数据恢复
  12. oracle mysql 同义词_Oracle数据库同义词
  13. insgram 网页分享_instagram网页版登陆使用图文教程
  14. 一章——系统安全及应用(应用——linux防护与群集)
  15. android espresso 教程,Espresso 设置说明
  16. css animate动画demo
  17. Oceanus:美团点评HTTP流量定制化路由的实践
  18. 如何在Mac上删除iPhone和iPad iCloud备份?
  19. Web前端开发技术课程大作业——龙猫宫崎骏5页 带js 带jquery 带轮播 带js表单校验 带留言表单 HTML+CSS+JS网页设计期末课程大作业 web前端开发技术 web课程设计
  20. 【滤波】无迹卡尔曼滤波

热门文章

  1. 重磅!厦门大学信息学院11篇论文入选AI顶会AAAI 2021
  2. 免费二级域名分发企业备案域名 阿里云备案域名
  3. 千万不要点开,Cjson入门快速使用看这篇就够了(CJSON入门操作以及问题讲解,CJSON对象删除出错)
  4. python 彩票图表下载_python彩票
  5. springboot微服务使用Feign远程调用失败
  6. linux连接无线网络配置详解
  7. iOS - UIButton连续点击事件控制
  8. kubeadm部署1.11.1的k8s集群
  9. Rhino7.4软件安装教程
  10. 根据四个点坐标排列出左上右上右下左下位置关系