STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级)
STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级)
STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)
STM32F103移植FreeRTOS必须搞明白的系列知识---4(FreeRTOSConfig.h配置文件)
目录
七、configKERNEL_INTERRUPT_PRIORITY
八、configMAX_SYSCALL_INTERRUPT_PRIORITY
3、配置configKERNEL_INTERRUPT_PRIORITY
4、配置configMAX_SYSCALL_INTERRUPT_PRIORITY
一、FreeRTOSConfig.h配置文件概述
FreeRTOSConfig.h配置文件是由FreeRTOS官网提供给用户针对具体的某一款MCU并且独立于FreeRTOS内核的配置文件。
要想实现STM32F103移植,必须熟悉FreeRTOSConfig.h配置文件中的以下几项(注:博主使用的FreeRTOS版本为FreeRTOS Kernel V10.2.1)。
1、configCPU_CLOCK_HZ
2、configTICK_RATE_HZ
3、configMAX_PRIORITIES
4、configMINIMAL_STACK_SIZE
5、configTOTAL_HEAP_SIZE
6、configKERNEL_INTERRUPT_PRIORITY
7、configMAX_SYSCALL_INTERRUPT_PRIORITY
二、configCPU_CLOCK_HZ
写入实际的CPU内核时钟频率,也就是CPU指令执行频率。(stm32f103芯片的晶振为72MHZ。)
配置此值是为了正确的配置系统节拍中断周期。
例如,在STM32F10X中,FreeRTOS Kernel V10.2.1
#define configCPU_CLOCK_HZ ( ( unsigned long ) 72000000 )
三、configTICK_RATE_HZ
FreeRTOS系统自己的节拍中断的频率。即一秒中断的次数,每次中断FreeRTOS都会进行任务调度。
系统节拍中断用来测量时间,因此,越高的测量频率意味着可测到越高的分辨率时间。但是,高的系统节拍中断频率也意味着RTOS内核占用更多的CPU时间,因此会降低效率。RTOS演示例程都是使用系统节拍中断频率为1000HZ,这是为了测试RTOS内核,比实际使用的要高。(实际使用时不用这么高的系统节拍中断频率)
多个任务可以共享一个优先级,RTOS调度器为相同优先级的任务分享CPU时间,在每一个RTOS 系统节拍中断到来时进行任务切换。高的系统节拍中断频率会降低分配给每一个任务的“时间片”持续时间。
例如,在STM32F10X中,FreeRTOS Kernel V10.2.1
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
表示滴答中断(SYSTICK)1毫秒中断1次。
如果想让滴答中断(SYSTICK)100微秒中断1次,可以如下进行配置
#define configTICK_RATE_HZ ( ( TickType_t ) 100 )
四、configMAX_PRIORITIES
配置应用程序最大可用的优先级数目。
在FreeRTOS内核中,每个有效优先级都会消耗一定量的RAM,因此这个值最好不要超过你的应用实际需要的优先级数目,FreeRTOS官网建议,宏configMAX_PRIORITIES最大数目不要超过32,那么工程项目可以使用的任务的优先级号范围为(0~31)。
每一个任务都会被分配一个优先级,任务的优先级值在0~ (configMAX_PRIORITIES - 1)之间。
FreeRTOS任务优先级数值越小,表示任务优先级越低;FreeRTOS任务优先级数值越大,表示任务优先级越高。
空闲任务的优先级为0(tskIDLE_PRIORITY),因此它是最低优先级任务。
例如,在STM32F103中,FreeRTOS Kernel V10.2.1
#define configMAX_PRIORITIES ( 5 )
程序中给任务分配优先级时,可用的优先级号为:(0~configMAX_PRIORITIES-1)。
#define configMAX_PRIORITIES=5,因此工程项目中任务可用的优先级号范围为(0~4)。优先级号0被FreeRTOS内核固定分配给空闲任务;优先级号1,优先级号2,优先级号3,优先级号4都可以分配给用户任务。
警告:优先级号5禁止分配给任务。如果优先级号5分配给任务,则会造成系统崩溃。
五、configMINIMAL_STACK_SIZE
定义空闲任务使用的堆栈大小。
通常此值不应小于对应处理器演示例程文件FreeRTOSConfig.h中定义的数值。
例如,在STM32F103中,FreeRTOS Kernel V10.2.1
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )
在STM32F103中,堆栈大小不是以字节为单位,而是以字为单位的。在32位架构下,栈大小为128表示栈内存占用128*4=512字节的空间。
六、configTOTAL_HEAP_SIZE
配置FreeRTOS任务栈可用的RAM总量。
工程项目分配的所有任务都在该区域申请用户栈,每个任务的

本文介绍STM32F103移植FreeRTOS的关键配置,包括FreeRTOSConfig.h配置项详解,如CPU时钟频率、系统节拍频率、最大优先级等,并通过实例展示配置方法。
&spm=1001.2101.3001.5002&articleId=127301127&d=1&t=3&u=d798dd2ee47b4310b1fbc1364db1d23f)
7963

被折叠的 条评论
为什么被折叠?



