Nucleo-L476运行FreeRTOS学习3-配置文件FreeRTOSConfig.h

今天看一下和配置有关的部分,对应工程文件为FreeRTOSConfig.h

官方的解释见:https://www.freertos.org/a00110.html

在cubemx中配置的设置为:(可以看到已经做出了分类)

 

对应看cubemx中归类的

主要有几大类:(有些参考黄工 strongerHuang 的博客)


一. Kernel settings 系统内核参数配置:

 

1. USE_PREEMPTION

调度模式配置

      配置为Disabled:合作式调度,即时间片轮流执行;

      配置为Enabled:抢占式调度,即优先级高的任务抢先执行;

我们一般配置为 Enabled,才有使用系统的意义。

 

2. CPU_CLOCK_HZ

系统时钟频率     
 

3.TICK_RATE_HZ 

系统滴答,即系统每秒钟滴答的次数,可以说是系统的心跳,但需要和主频区分开来。

默认1000Hz。


4.MAX_PRIORITIES 

系统最大优先级值

FreeRTOS中优先级数值越大,优先级越高。而UCOS则相反

 

5.MINIMAL_STACK_SIZE

最小堆栈值


6.MAX_TASK_NAME_LEN

任务名称最大长度

也就是创建任务定义任务名称的字符串长度

 

7.USE_16_BIT_TICKS 

是否使用16位滴答计数值

配置为0:则使用32位的滴答计数值,一般在32位处理器中都是配置为0;  本设计设置为0 (Disabled)

配置为1:则使用16位的滴答计数值,一般8位或者16位处理器中配置为1。

 

8.IDLE_SHOULD_YIELD

是否让空闲任务“放弃”抢占

也就是说在执行与空闲任务相同优先级的任务过程中,空闲任务是否具有抢占的机会。


9.USE_MUTEXES

是否使用互斥锁

配置为0:不使用

配置为1:使用

 

10.USE_RECURSIVE_MUTEXES

是否使用递归互斥锁

互斥锁也叫互斥信号量,也就是说对资源“加锁”。它的作用是实现多任务间共享资源的独占式处理。简单的说,就是某个资源在某一时刻只允许一个任务处理,处理完之后才允许其他任务处理该资源。

 

11. USE_COUNTING_SEMAPHORES

是否使用计数型信号量功能

 

12. QUEUE_REGISTRY_SIZE

可添加(或登记)队列名的数量

 

13.USE_APPLICATION_TASK_TAG

开启之后会编译函数 vTaskSetApplicationTaskTag()xTaskCallApplicationTaskHook()

 

14.ENABLE_BACKWARD_COMPATIBILITY

FreeRTOS.h头文件包含一组#define宏,这些宏将在8.0.0之前的FreeRTOS版本中使用的数据类型的名称映射到在FreeRTOS的8.0.0版本中使用的名称。这些宏允许应用程序代码将其构建的FreeRTOS版本从8.0.0之前的版本更新为8.0.0以后的版本,而无需进行修改。在FreeRTOSConfig.h中将configENABLE_BACKWARD_COMPATIBILITY设置为0会从构建中排除这些宏,从而允许进行验证,以确保未使用8.0.0之前的版本。

FreeRTOS.h文件的某一块:

15.USE_PORT_OPTIMISED_TASK_SELECTION

默认强制为1

freertos有两种方法选择下一个要运行的任务,这里设置为1表示使用特殊方法,也就是硬件方法,有以下特点:

16.USE_TICKLESS_IDLE

低功耗模式选择

0- 关闭低功耗

1-开启低功耗,使用freertos写好的函数实现函数vPortSuppressTicksAndSleep()

2-开启低功耗,用户自己实现函数vPortSuppressTicksAndSleep()

17.USE_TASK_NOTIFICATIONS

是否开启任务通知功能,开启的话每个任务多消耗8个字节

18. RECORD_STACK_HIGH_ADDRESS

从v10开始有次配置参数

当设置为1(启用)时,堆栈开始地址将保存到每个任务的TCB中(假设堆栈向下增长)。

 


 

二. 内存管理配置

1.Memory Allocation

memory分配方式: Dynamic 动态; static 静态; Dynamic/static 动态静态都开启

2. TOTAL_HEAP_SIZE

系统总共堆(栈)大小

动态内存管理的时候使用,使用heap_x.c中的内存申请函数申请内存时,会从堆中申请

3.Memory Management scheme

内存分配实现,可参考官网解释:https://www.freertos.org/a00111.html

  • heap_1 –最简单,不允许释放内存
  • heap_2 –允许释放内存,但不合并相邻的空闲块。
  • heap_3 –简单包装标准malloc()和free()以确保线程安全
  • heap_4 –合并相邻的空闲块以避免碎片。包括绝对地址放置选项。 默认使用的heap_4
  • heap_5 –按照heap_4,能够跨多个不相邻的内存区域扩展堆

 

三.Hook钩子函数配置

HOOK函数是提供给开发者的函数,实现自己想要实现的东西

开启Hook之后,用户需要自己定义相应的函数

1. USE_IDLE_HOOK

是否定义IDLE空闲任务HOOK函数

在task.c中有代码

		#if ( configUSE_IDLE_HOOK == 1 )
		{
			extern void vApplicationIdleHook( void );

			/* Call the user defined function from within the idle task.  This
			allows the application designer to add background functionality
			without the overhead of a separate task.
			NOTE: vApplicationIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES,
			CALL A FUNCTION THAT MIGHT BLOCK. */
			vApplicationIdleHook();
		}
		#endif /* configUSE_IDLE_HOOK */

函数vApplicationIdleHook()需要用户书写。

2. USE_TICK_HOOK

是否定义TICK滴答HOOK函数

 

3. USE_MALLOC_FAILED_HOOK

是否定义内存分配失败HOOK函数

我们创建任务、信号量、队列等都需要耗费系统堆栈,如果我们对系统总共分配堆栈不够多,在创建多个任务或队列时容易分配失败,这个时候就起到一个提示作用。

 

4. USE_DAEMON_TASK_STARTUP_HOOK

是否定义守护进程HOOK函数

 

5. CHECK_FOR_STACK_OVERFLOW

是否定义栈溢出HOOK函数


四.运行时信息统计配置

1. GENERATE_RUN_TIME_STATS
是否生成统计信息

配置为0:否

配置为1:是

 

2. USE_TRACE_FACILITY

是否协助执行可视化和跟踪

配置为0:否

配置为1:是

 

3. USE_STATS_FORMATTING_FUNCTIONS
是否统计相关的功能

配置为0:否

配置为1:是


 

五. 协程配置

1. USE_CO_ROUTINES

是否使用CO_ROUTINES(协程),协程可以节省开销,但是功能有限,现在MCU的性能以及非常强大了,建议关闭协程。

2. MAX_CO_ROUTINE_PRIORITIES

CO_ROUTINE优先级

 


 

六.软件定时器配置

1. USE_TIMERS

是否开启软件定时器

 

若开启,需要配置额外的3个参数:

TIMER_TASK_PRIORITY

软件定时器任务优先级

TIMER_QUEUE_LENGTH

软件定时器命令队列长度

TIMER_TASK_STACK_DEPTH

软件定时器服务任务的任务堆栈大小


 

七.中断有关配置

1. LIBRARY_LOWEST_INTERRUPT_PRIORITY

最低优先级,STM32使用4位表示,也就是0~15个

2. LIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY

设置FreeRTOS可管理的最大优先级,高于此优先级的任务不归FreeRTOS管理



 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值