[PIC®/AVR®/dsPIC®产品] (一)FreeRTOSConfig.h详解

[复制链接]
 楼主| 奔波儿熊 发表于 2019-6-12 17:22 | 显示全部楼层 |阅读模式
本帖最后由 奔波儿熊 于 2019-6-13 14:41 编辑

这一篇主要分析一下FreeRTOSConfig.h中的重要的宏定义, 通常使用这些宏定义来完成FreeRTOS的配置和裁剪.
"INCLUDE_"开头的宏: 表示使能或禁能相应的FreeRTOS API函数, 如果需要使用某API函数则设为1,如果不需要使用某API函数则设为0. 比如#define INCLUDE_vTaskPrioritySet 0 表示不能使用函数vTaskPrioritySet(),该函数也不会被编译; #define INCLUDE_vTaskPrioritySet 1  表示可以使用函数vTaskPrioritySet(),该函数会被编译.
"config"开头的宏,  用处各不相同,下面是FreeRTOSConfig.h的源码, 我会将一些重要的宏加以中文注释来说明其作用.
  1. #ifndef FREERTOS_CONFIG_H
  2. #define FREERTOS_CONFIG_H

  3. /*
  4. * #define TCB_t to avoid conflicts between the
  5. * FreeRTOS task control block type (TCB_t) and the
  6. * AVR Timer Counter B type (TCB_t)
  7. */
  8. #define TCB_t avrTCB_t
  9. #include <avr/io.h>
  10. #undef TCB_t

  11. #define configUSE_PREEMPTION 1<font color="#9acd32">//使用抢占式的任务调度机制</font>
  12. #define configCPU_CLOCK_HZ (20e6 / 2)<font color="#9acd32">//CPU的时钟频率,准确的来说是FreeRTOS使用的硬件Timer的计数时钟频率</font>
  13. #define configTICK_RATE_HZ 1000<font color="#9acd32">//FreeRTOS使用的硬件Timer的中断频率</font>
  14. #define configMAX_PRIORITIES 4<font color="#9acd32">//最大优先级,实际可用的优先级是0~3.理论上最大优先级没有限制,根据实际需要设置</font>
  15. #define configMINIMAL_STACK_SIZE 115<font color="#9acd32">//最小堆栈大小,事实上只有空闲任务使用了这个值作为堆栈大小</font>
  16. #define configMAX_TASK_NAME_LEN 8<font color="#9acd32">//任务名字长度,根据需要设置</font>
  17. #define configUSE_16_BIT_TICKS 1<font color="#9acd32">//1:设置TickType_t为16位;0:设置TickType_t为32位</font>
  18. #define configIDLE_SHOULD_YIELD 1<font color="#9acd32">//1:空闲任务会为处于同等优先级的任务让出CPU 0:空闲任务不会为处于同等优先级的任务让出CPU</font>
  19. #define configUSE_TASK_NOTIFICATIONS 1<font color="#9acd32">//启用任务通知功能</font>
  20. #define configUSE_MUTEXES 1<font color="#9acd32">//启用互斥信号量</font>
  21. #define configUSE_RECURSIVE_MUTEXES 0<font color="#9acd32">//禁用递归互斥信号量</font>
  22. #define configUSE_COUNTING_SEMAPHORES 0<font color="#9acd32">//禁用计数型信号量</font>
  23. #define configQUEUE_REGISTRY_SIZE 0
  24. #define configUSE_QUEUE_SETS 0<font color="#9acd32">//禁用队列集</font>
  25. #define configUSE_TIME_SLICING 1<font color="#9acd32">//使能时间片调度, 同优先级任务基于时间片调度,即使这里不定义为1, FreeRTOS.h中也会将其定义为1</font>
  26. #define configUSE_NEWLIB_REENTRANT 0
  27. #define configENABLE_BACKWARD_COMPATIBILITY 0
  28. #define configNUM_THREAD_LOCAL_STORAGE_POINTERS 0

  29. /* Memory allocation related definitions. */
  30. #define configSUPPORT_STATIC_ALLOCATION 0
  31. #define configSUPPORT_DYNAMIC_ALLOCATION 1<font color="#9acd32">//动态内存分配</font>
  32. #define configTOTAL_HEAP_SIZE 0x800<font color="#9acd32">//设置堆大小</font>
  33. #define configAPPLICATION_ALLOCATED_HEAP 0

  34. /* Hook function related definitions. */
  35. #define configUSE_IDLE_HOOK 0
  36. #define configUSE_TICK_HOOK 0
  37. #define configCHECK_FOR_STACK_OVERFLOW 0
  38. #define configUSE_MALLOC_FAILED_HOOK 0
  39. #define configUSE_DAEMON_TASK_STARTUP_HOOK 0

  40. /* Run time and task stats gathering related definitions. */
  41. #define configGENERATE_RUN_TIME_STATS 0
  42. #define configUSE_TRACE_FACILITY 0
  43. #define configUSE_STATS_FORMATTING_FUNCTIONS 0

  44. /* Co-routine related definitions. */
  45. #define configUSE_CO_ROUTINES 0
  46. #define configMAX_CO_ROUTINE_PRIORITIES 1

  47. /* Software timer related definitions. */
  48. #define configUSE_TIMERS 0
  49. #define configTIMER_TASK_PRIORITY 3
  50. #define configTIMER_QUEUE_LENGTH 10
  51. #define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE

  52. /* Define to trap errors during development. */
  53. //#define configASSERT(  x  ) if( ( x ) == 0 ) { asm volatile ("cli"); while(1){ asm volatile ("BREAK"); } }

  54. /* Optional functions - most linkers will remove unused functions anyway. */
  55. #define INCLUDE_vTaskPrioritySet 0
  56. #define INCLUDE_uxTaskPriorityGet 0
  57. #define INCLUDE_vTaskDelete 0
  58. #define INCLUDE_vTaskSuspend 1
  59. #define INCLUDE_xResumeFromISR 0
  60. #define INCLUDE_vTaskDelayUntil 1
  61. #define INCLUDE_vTaskDelay 1
  62. #define INCLUDE_xTaskGetSchedulerState 0
  63. #define INCLUDE_xTaskGetCurrentTaskHandle 0
  64. #define INCLUDE_uxTaskGetStackHighWaterMark 0
  65. #define INCLUDE_xTaskGetIdleTaskHandle 0
  66. #define INCLUDE_eTaskGetState 0
  67. #define INCLUDE_xEventGroupSetBitFromISR 0
  68. #define INCLUDE_xTimerPendFunctionCall 0
  69. #define INCLUDE_xTaskAbortDelay 0
  70. #define INCLUDE_xTaskGetHandle 0
  71. #define INCLUDE_xTaskResumeFromISR 0

  72. #define pdMS_TO_TICKS(xTimeInMs) ((TickType_t)(((uint32_t)(xTimeInMs) * (uint32_t)configTICK_RATE_HZ) / (uint32_t)1000))

  73. #endif /* FREERTOS_CONFIG_H */


dongnanxibei 发表于 2019-6-14 00:13 | 显示全部楼层
讲的可以,看看。
小灵通2018 发表于 2019-6-16 16:58 | 显示全部楼层
这个是移植的根本?
 楼主| 奔波儿熊 发表于 2019-6-17 12:16 | 显示全部楼层
小灵通2018 发表于 2019-6-16 16:58
这个是移植的根本?

准确来说,这个不是移植的根本,这只是裁剪和配置. 移植的根本是实现port.c里面的内容. 如果是一款全新架构的MCU, 需要对架构非常了解,才能很好的实现port.c的内容,通常来讲这部分原厂都会实现.
小卡 发表于 2019-6-18 09:38 | 显示全部楼层
厉害啊
643757107 发表于 2019-6-18 23:05 | 显示全部楼层
厉害厉害。
643757107 发表于 2019-6-18 23:05 | 显示全部楼层
上面讲的真好。答复的更好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

503

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部