FreeRTOS 基本配置

FreeRTOS 基本配置

首次将FreeRTOS移植到目标系统上时,我们需要对其进行配置。

FreeRTOSConfig.h

FreeRTOSConfig.h文件是FreeRTOS的配置文件,我们可以通过修改宏定义的值,对其功能进行定制。下面依次说一下每个功能的作用。

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

Application specific definitions. 具体定义

这部分是需要根据我们的硬件平台来修改的。由于FreeRTOS为大多数平台都提供了Demo,我们可以直接复制Demo中的配置文件FreeRTOSConfig.h就能快速实现应用。

#define configUSE_PREEMPTION		1 //是否使用抢占式调度
#define configUSE_IDLE_HOOK			0 //是否使用空闲Hook
#define configUSE_TICK_HOOK			0 //是否使用滴答Hook
#define configCPU_CLOCK_HZ			( ( unsigned long ) 72000000 ) //CPU主频	
#define configTICK_RATE_HZ			( ( TickType_t ) 1000 ) // 系统滴答频率
#define configMAX_PRIORITIES		( 5 ) //最高优先级
#define configMINIMAL_STACK_SIZE	( ( unsigned short ) 128 ) //最小栈大小
#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 17 * 1024 ) ) //总堆大小
#define configMAX_TASK_NAME_LEN		( 16 ) //最大任务名称长度
#define configUSE_TRACE_FACILITY	0 //是否使用跟踪
#define configUSE_16_BIT_TICKS		0 //是否是使用16位滴答定时器
#define configIDLE_SHOULD_YIELD		1 //是否允许空闲优先级任务抢占空闲任务

Co-routine definitions. 协程定义

协程目前已经很少使用了。

/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 		0
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

API function 定义

#define INCLUDE_vTaskPrioritySet		1 //改变任务优先级
#define INCLUDE_uxTaskPriorityGet		1 //查询任务优先级
#define INCLUDE_vTaskDelete				1 //删除任务
#define INCLUDE_vTaskCleanUpResources	0 //回收任务资源
#define INCLUDE_vTaskSuspend			1 //挂起任务
#define INCLUDE_vTaskDelayUntil			1 //任务延迟
#define INCLUDE_vTaskDelay				1 //任务延迟

中断优先级定义

/* This is the raw value as per the Cortex-M3 NVIC.  Values can be 255
(lowest) to 0 (1?) (highest). */
#define configKERNEL_INTERRUPT_PRIORITY 		255 
// 这个值通常必须设置为可允许的最低优先级
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	191 
/* equivalent to 0xb0, or priority 11. */
// FreeRTOS API能够使用的最高优先级

/* This is the value being used as per the ST library which permits 16
priority values, 0 to 15.  This must correspond to the
configKERNEL_INTERRUPT_PRIORITY setting.  
Here 15 corresponds to the lowest NVIC value of 255. */
#define configLIBRARY_KERNEL_INTERRUPT_PRIORITY	15
// ST库函数能使用的优先级0-15

#endif /* FREERTOS_CONFIG_H */

示例:
在这里插入图片描述
当configMAX_SYSCALL_INTERRUPT_PRIORITY 设置为3,configKERNEL_INTERRUPT_PRIORITY 设置为1时:

  • 不使用API的中断可以使用任何优先级,可以嵌套
  • 中断优先级1~3可以使用API,但是有些情况下会被更高优先级任务屏蔽
  • 中断优先级4~7不能使用API,不会被FreeRTOS内核干扰,可以嵌套。
发布了85 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lun55423/article/details/105651048