您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > FreeRTOSConfig详解
1.#ifndefFREERTOS_CONFIG_H2.#defineFREERTOS_CONFIG_H3.4./*Hereisagoodplacetoincludeheaderfilesthatarerequiredacross5.yourapplication.*/6.#includesomething.h7.8.#defineconfigUSE_PREEMPTION19.#defineconfigUSE_PORT_OPTIMISED_TASK_SELECTION010.#defineconfigUSE_TICKLESS_IDLE011.#defineconfigCPU_CLOCK_HZ6000000012.#defineconfigTICK_RATE_HZ25013.#defineconfigMAX_PRIORITIES514.#defineconfigMINIMAL_STACK_SIZE12815.#defineconfigTOTAL_HEAP_SIZE1024016.#defineconfigMAX_TASK_NAME_LEN1617.#defineconfigUSE_16_BIT_TICKS018.#defineconfigIDLE_SHOULD_YIELD119.#defineconfigUSE_TASK_NOTIFICATIONS120.#defineconfigUSE_MUTEXES021.#defineconfigUSE_RECURSIVE_MUTEXES022.#defineconfigUSE_COUNTING_SEMAPHORES023.#defineconfigUSE_ALTERNATIVE_API0/*Deprecated!*/24.#defineconfigQUEUE_REGISTRY_SIZE1025.#defineconfigUSE_QUEUE_SETS026.#defineconfigUSE_TIME_SLICING027.#defineconfigUSE_NEWLIB_REENTRANT028.#defineconfigENABLE_BACKWARD_COMPATIBILITY029.#defineconfigNUM_THREAD_LOCAL_STORAGE_POINTERS530.31./*Hookfunctionrelateddefinitions.*/32.#defineconfigUSE_IDLE_HOOK033.#defineconfigUSE_TICK_HOOK034.#defineconfigCHECK_FOR_STACK_OVERFLOW035.#defineconfigUSE_MALLOC_FAILED_HOOK036.37./*Runtimeandtaskstatsgatheringrelateddefinitions.*/38.#defineconfigGENERATE_RUN_TIME_STATS039.#defineconfigUSE_TRACE_FACILITY040.#defineconfigUSE_STATS_FORMATTING_FUNCTIONS041.42./*Co-routinerelateddefinitions.*/43.#defineconfigUSE_CO_ROUTINES044.#defineconfigMAX_CO_ROUTINE_PRIORITIES145.46./*Softwaretimerrelateddefinitions.*/47.#defineconfigUSE_TIMERS148.#defineconfigTIMER_TASK_PRIORITY349.#defineconfigTIMER_QUEUE_LENGTH1050.#defineconfigTIMER_TASK_STACK_DEPTHconfigMINIMAL_STACK_SIZE51.52./*Interruptnestingbehaviourconfiguration.*/53.#defineconfigKERNEL_INTERRUPT_PRIORITY[dependentofprocessor]54.#defineconfigMAX_SYSCALL_INTERRUPT_PRIORITY[dependentonprocessorandapplication]55.#defineconfigMAX_API_CALL_INTERRUPT_PRIORITY[dependentonprocessorandapplication]56.57./*Definetotraperrorsduringdevelopment.*/58.#defineconfigASSERT((x))if((x)==0)vAssertCalled(__FILE__,__LINE__)59.60./*FreeRTOSMPUspecificdefinitions.*/61.#defineconfigINCLUDE_APPLICATION_DEFINED_PRIVILEGED_FUNCTIONS062.63./*Optionalfunctions-mostlinkerswillremoveunusedfunctionsanyway.*/64.#defineINCLUDE_vTaskPrioritySet165.#defineINCLUDE_uxTaskPriorityGet166.#defineINCLUDE_vTaskDelete167.#defineINCLUDE_vTaskSuspend168.#defineINCLUDE_xResumeFromISR169.#defineINCLUDE_vTaskDelayUntil170.#defineINCLUDE_vTaskDelay171.#defineINCLUDE_xTaskGetSchedulerState172.#defineINCLUDE_xTaskGetCurrentTaskHandle173.#defineINCLUDE_uxTaskGetStackHighWaterMark074.#defineINCLUDE_xTaskGetIdleTaskHandle075.#defineINCLUDE_xTimerGetTimerDaemonTaskHandle076.#defineINCLUDE_pcTaskGetTaskName077.#defineINCLUDE_eTaskGetState078.#defineINCLUDE_xEventGroupSetBitFromISR179.#defineINCLUDE_xTimerPendFunctionCall080.81./*Aheaderfilethatdefinestracemacrocanbeincludedhere.*/82.83.#endif/*FREERTOS_CONFIG_H*/1.configUSE_PREEMPTION为1时RTOS使用抢占式调度器,为0时RTOS使用协作式调度器(时间片)。注:在多任务管理机制上,操作系统可以分为抢占式和协作式两种。协作式操作系统是任务主动释放CPU后,切换到下一个任务。任务切换的时机完全取决于正在运行的任务。2.configUSE_PORT_OPTIMISED_TASK_SELECTION某些运行FreeRTOS的硬件有两种方法选择下一个要执行的任务:通用方法和特定于硬件的方法(以下简称“特殊方法”)。通用方法:configUSE_PORT_OPTIMISED_TASK_SELECTION设置为0或者硬件不支持这种特殊方法。可以用于所有FreeRTOS支持的硬件。完全用C实现,效率略低于特殊方法。不强制要求限制最大可用优先级数目特殊方法:并非所有硬件都支持。必须将configUSE_PORT_OPTIMISED_TASK_SELECTION设置为1。依赖一个或多个特定架构的汇编指令(一般是类似计算前导零[CLZ]指令)。比通用方法更高效。一般强制限定最大可用优先级数目为32。3.configUSE_TICKLESS_IDLE设置configUSE_TICKLESS_IDLE为1使能低功耗tickless模式,为0保持系统节拍(tick)中断一直运行。通常情况下,FreeRTOS回调空闲任务钩子函数(需要设计者自己实现),在空闲任务钩子函数中设置微处理器进入低功耗模式来达到省电的目的。因为系统要响应系统节拍中断事件,因此使用这种方法会周期性的退出、再进入低功耗状态。如果系统节拍中断频率过快,则大部分电能和CPU时间会消耗在进入和退出低功耗状态上。FreeRTOS的tickless空闲模式会在空闲周期时停止周期性系统节拍中断。停止周期性系统节拍中断可以使微控制器长时间处于低功耗模式。移植层需要配置外部唤醒中断,当唤醒事件到来时,将微控制器从低功耗模式唤醒。微控制器唤醒后,会重新使能系统节拍中断。由于微控制器在进入低功耗后,系统节拍计数器是停止的,但我们又需要知道这段时间能折算成多少次系统节拍中断周期,这就需要有一个不受低功耗影响的外部时钟源,即微处理器处于低功耗模式时它也在计时的,这样在重启系统节拍中断时就可以根据这个外部计时器计算出一个调整值并写入RTOS系统节拍计数器变量中。4.configUSE_IDLE_HOOK设置为1使用空闲钩子(IdleHook类似于回调函数),0忽略空闲钩子。当RTOS调度器开始工作后,为了保证至少有一个任务在运行,空闲任务被自动创建,占用最低优先级(0优先级)。对于已经删除的RTOS任务,空闲任务可以释放分配给它们的堆栈内存。因此,在应用中应该注意,使用vTaskDelete()函数时要确保空闲任务获得一定的处理器时间。除此之外,空闲任务没有其它特殊功能,因此可以任意的剥夺空闲任务的处理器时间。应用程序也可能和空闲任务共享同个优先级。空闲任务钩子是一个函数,这个函数由用户来实现,RTOS规定了函数的名字和参数,这个函数在每个空闲任务周期都会被调用。要创建一个空闲钩子:1.设置FreeRTOSConfig.h文件中的configUSE_IDLE_HOOK为1;2.定义一个函数,函数名和参数如下所示:1.voidvApplicationIdleHook(void);这个钩子函数不可以调用会引起空闲任务阻塞的API函数(例如:vTaskDelay()、带有阻塞时间的队列和信号量函数),在钩子函数内部使用协程是被允许的。使用空闲钩子函数设置CPU进入省电模式是很常见的。5.configUSE_MALLOC_FAILED_HOOK每当一个任务、队列、信号量被创建时,内核使用一个名为pvPortMalloc()的函数来从堆中分配内存。官方的下载包中包含5个简单内存分配策略,分别保存在源文件heap_1.c、heap_2.c、heap_3.c、heap_4.c、heap_5.c中。仅当使用这五个简单策略之一时,宏configUSE_MALLOC_FAILED_HOOK才有意义。如果定义并正确配置malloc()失败钩子函数,则这个函数会在pvPortMalloc()函数返回NULL时被调用。只有FreeRTOS在响应内存分配请求时发现堆内存不足才会返回NULL。如果宏configUSE_MALLOC_FAILED_HOOK设置为1,那么必须定义一个malloc()失败钩子函数,如果宏configUSE_MALLOC_FAILED_HOOK设置为0,malloc()失败钩子函数不会被调用,即便已经定义了这个函数。malloc()失败钩子函数的函数名和原型必须如下所示:1.voidvApplicationMallocFailedHook(void);6.configUSE_TICK_HOOK设置为1使用时间片钩子(TickHook),0忽略时间片钩子。注:时间片钩子函数(TickHookFunction
本文标题:FreeRTOSConfig详解
链接地址:https://www.777doc.com/doc-5196344 .html