03嵌入式实时操作系统FreeRTOS裁剪和配置.ppt
-
资源ID:89754136
资源大小:686.50KB
全文页数:28页
- 资源格式: PPT
下载积分:10金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
03嵌入式实时操作系统FreeRTOS裁剪和配置.ppt
嵌入式实时操作系统嵌入式实时操作系统FreeRTOSFreeRTOS原理及应用原理及应用基基于于STM32STM32微控制器微控制器嵌入式实时操作系统嵌入式实时操作系统FreeRTOS原理及应用原理及应用张超张超 主编主编STM32 Cortex-M4通用开发板通用开发板嵌入式实时操作系统嵌入式实时操作系统FreeRTOS原理及应用原理及应用FreeRTOS基础配置基础配置FreeRTOS与中断相关配置与中断相关配置FreeRTOS可选可选API函数配置函数配置FreeRTOS其它配置其它配置FreeRTOS参考配置示例参考配置示例FreeRTOS的裁剪和配置的裁剪和配置主要内容:主要内容:一、FreeRTOS基础配置基础配置FreeRTOS的裁剪和配置的裁剪和配置FreeRTOS基础配置基础配置configUSE_PREEMPTIONconfigUSE_PORT_OPTIMISED_TASK_SELECTIONconfigCPU_CLOCK_HZconfigTICK_RATE_HZconfigMAX_PRIORITIESconfigMINIMAL_STACK_SIZE常用配置项常用配置项是运行FreeRTOS比较常用的一些配置,涉及调度方式、时钟节拍、堆内存大小、空闲任务堆栈等。FreeRTOS基础配置基础配置configTOTAL_HEAP_SIZEconfigUSE_16_BIT_TICKSconfigIDLE_SHOULD_YIELDconfigMAX_TASK_NAME_LENconfigUSE_TICKLESS_IDLE常用配置项常用配置项队列信号量相关队列信号量相关FreeRTOS基础配置基础配置configUSE_QUEUE_SETS用于定义是否使用队列集。configUSE_MUTEXES用于定义是否使用互斥信号量。configUSE_RECURSIVE_MUTEXES用于定义是否使用递归互斥信号量。configUSE_COUNTING_SEMAPHORES用于定义是否使用计数信号量。configUSE_TASK_NOTIFICATIONS用于定义是否使用任务通知。当宏设置为1时,相应功能的API函数就会被编译。钩钩子函数相关子函数相关FreeRTOS基础配置基础配置configUSE_IDLE_HOOK用于使能空闲任务钩子函数。configUSE_TICK_HOOK用于使能时间片钩子函数。configUSE_MALLOC_FAILED_HOOK用于使能动态内存分配失败钩子函数。configCHECK_FOR_STACK_OVERFLOW用于使能堆栈溢出检测钩子函数。钩子函数需要用户实现,当对应的宏不为0时,必须提供相应的钩子函数。二、FreeRTOS与中断相关配置中断相关配置FreeRTOS的裁剪和配置的裁剪和配置FreeRTOS与中断相关配置与中断相关配置Cortex-M优先级优先级STM32微控制器使用ARM Cortex-M内核,Cortex-M内核采用8个二进制位来表示可编程的优先级,共有256级。实际的优先级数由芯片生产厂家决定,像STM32微控制器,就没有使用全部的8个二进制位,而只是使用了4位,共16个优先级。不管采用多少位表达优先级,均采用MSB对齐方式,使用4位来表达优先级时MSB对齐的情形如下:FreeRTOS与中断相关配置与中断相关配置configPRIO_BITS设置硬件用于表达优先级的二进制位数。STM32微控制器使用的是4位,此宏应该设定为4。因在core_cm4.h头文件中定义了表达优先级位数据的宏_NVIC_PRIO_BITS,且该宏已设为4,可通过这个宏来设定configPRIO_BITS,或者直接将configPRIO_BITS设定为4。#ifdef _NVIC_PRIO_BITS#define configPRIO_BITS _NVIC_PRIO_BITS /*core_cm4.h中定义的宏中定义的宏*/#else#define configPRIO_BITS 4 /*对对STM32微控制器应设为微控制器应设为4*/#endifFreeRTOS与中断相关配置与中断相关配置configLIBRARY_LOWEST_INTERRUPT_PRIORITY用于设置中断最低优先级。STM32微控制器使用4位二进制位表达优先级,优先级数最多就是16个。但STM32微控制器表达优先级高低与优先级数的关系比较特殊,数值越大,优先级反而越低,数值为0时表示最高优先级。所以,此宏的值应设为15。FreeRTOS与中断相关配置与中断相关配置configKERNEL_INTERRUPT_PRIORITY用于设置内核的中断优先级,即嘀嗒定时器和PendSV的中断优先级。此宏定义通过configLIBRARY_LOWEST_INTERRUPT_PRIORITY (8-configPRIO_BITS)替换得到,替换结果应该是中断系统中的最低优先级。用前面定义好的宏,替换为0 x0F(8-4),结果为0 xF0,高4位正好就是15,也就是STM32微控制器的最低中断优先级。FreeRTOS与中断相关配置与中断相关配置configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY用于设置FreeRTOS可管理的最大优先级。可以在硬件中断优先级数量之内任意设置,比如设置为5,表示高于优先级5的中断(对于STM32微控制器,为优先级0至4)不归FreeRTOS管理。FreeRTOS与中断相关配置与中断相关配置configMAX_SYSCALL_INTERRUPT_PRIORITY由宏configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY (8-configPRIO_BITS)得到。例如,宏configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY设为5,表示优先级高于5的中断不归FreeRTOS管理,在这些中断服务函数中不能调用FreeRTOS相关API函数。三、FreeRTOS可可选选API函数配置函数配置FreeRTOS的裁剪和配置的裁剪和配置FreeRTOS可选可选API函数配置函数配置可选可选API通过配置INCLUDE_开始的宏,可对FreeRTOS一些可选API函数进行配置,当对应的宏为1时,表示使能相应功能的API函数,这些API函数就会参与编译,从而可供应用程序调用。例如,当INCLUDE_vTaskDelay宏定义为1时,函数vTaskDelay()将会被编译,从而在应用程序中可用vTaskDelay()实现阻塞式延时。FreeRTOS可选可选API函数配置函数配置#define INCLUDE_vTaskPrioritySet#define INCLUDE_uxTaskPriorityGet#define INCLUDE_vTaskDelete#define INCLUDE_vTaskSuspend#define INCLUDE_vTaskDelayUntil#define INCLUDE_vTaskDelay可选可选API常用的使能API函数对应的宏。FreeRTOS可选可选API函数配置函数配置#define INCLUDE_xTaskGetSchedulerState#define INCLUDE_xTaskGetCurrentTaskHandle#define INCLUDE_uxTaskGetStackHighWaterMark#define INCLUDE_xTaskGetIdleTaskHandle#define INCLUDE_xTimerGetTimerDaemonTaskHandle#define INCLUDE_pcTaskGetTaskName可选可选API常用的使能API函数对应的宏。四、FreeRTOS其它配其它配置置FreeRTOS的裁剪和配置的裁剪和配置FreeRTOS其它配置其它配置协程相关协程相关1、configUSE_CO_ROUTINES。定义是否使用协程,0为不使用,1为使用。在抢占式调度中也可使用协程,协程可以节约开销,但功能将受到限制,现在的微处理器功能都已经很强大,协程已经很少采用,此宏应该设为0。2、configMAX_CO_ROUTINE_PRIORITIES。定义协程的有效优先级数目,优先级从0到configMAX_CO_ROUTINE_PRIORITIES-1,0为最低优先级。FreeRTOS其它配置其它配置任务运行信息相关任务运行信息相关1、configUSE_TRACE_FACILITY,用于使能可视化跟踪和调试,为1时使能。2、configUSE_STATS_FORMATTING_FUNCTIONS,当此宏与configUSE_TRACE_FACILITY宏同时为1时,vTaskList()和vTaskGetRunTimeStats()函数会参与编译,从而可以通过这二个函数获取任务运行信息。FreeRTOS其它配置其它配置任务运行信息相关任务运行信息相关3、configGENERATE_RUN_TIME_STATS,用于定义是否开启时间统计功能,为1时表示开启。当此宏为1时,还需要用户实现这二个宏:portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()和portGET_RUN_TIME_COUNTER_VALUE()。前者对应一个精度高于嘀嗒定时器时间精度10倍以上的定时器初始化函数,后者对应一个获取统计时间值的函数,这二个函数均需由用户实现。FreeRTOS其它配置其它配置软件定时器相软件定时器相关关1、configUSE_TIMERS,定义是否使用软件定时器功能,为1时使用。当此宏为1时,会在调度器开启功能函数中自动创建定时器服务任务,同时需要正确配置后面几个宏。2、configTIMER_TASK_PRIORITY,用于定义软件定时器任务的默认优先级。3、configTIMER_QUEUE_LENGTH,用于定义软件定时器命令队列长度。4、configTIMER_TASK_STACK_DEPTH,用于定义软件定时器任务堆栈大小。FreeRTOS其它配置其它配置是否使用断言是否使用断言用于代码调试阶段检查传入的参数是否合理。FreeRTOS内核在关键点均会调用configASSERT(x),如果x结果为0,说明有错误发生。错误发生时有多种处理方法,可通过串口输出信息,可直接停机,下面是一种停机处理方法示例,发生错误时直接停机。#define configASSERT(x)if(x)=0)taskDISABLE_INTERRUPTS();for(;);使用断言会增加系统开销,一般是在调试阶段使用,要关闭这个功能,注释掉configASSERT(x)就可以。FreeRTOS其它配置其它配置中断服务函数中断服务函数在FreeRTOS移植层port.c文件里,分别定义了vPortSVCHandler、xPortPendSVHandler和xPortSysTickHandler三个中断服务处理函数,需要与STM32的SVC_Handler、PendSV_Handler和SysTick_Handler进行一一对应。#define vPortSVCHandler SVC_Handler#define xPortPendSVHandler PendSV_Handler#define xPortSysTickHandler SysTick_Handler四、FreeRTOS参考配参考配置置FreeRTOS的裁剪和配置的裁剪和配置FreeRTOS参考配置参考配置FreeRTOSConfig.h典型的FreeRTOSConfig.h配置文件,后面的例子,均使用这个配置文件。除个别有改动的会特别说明外,不再描述FreeRTOS配置文件,默认使用本配置文件。