二、FREERTOS学习之 FreeRTOSConfig.h修改

FreeRTOSConfig.h配置文件:


  1. #ifndef FREERTOS_CONFIG_H
  2. #define FREERTOS_CONFIG_H
  3. #define configUSE_PREEMPTION 1
  4. //
  5. //置1:抢占式调度器:最高优先级的任务一旦就绪,总能得到CPU的执行权;它抢占了低优先级的运行机会。
  6. // 在抢占式调度系统中,总是运行最高优先级的任务。
  7. // 优点:使得一些需要实时运行的任务,能在较短的时间内获得CPU执行权,保证这些实时任务及时执行。
  8. //
  9. // 同时,也能配合时间片轮转的调度方法一起使用,当有高优先级任务就绪时,运行高优先级任务;
  10. // 当最高优先级的任务有好几个时,这几个任务可以以时间片轮转方式调度.
  11. //
  12. // 时间片轮转调度;让相同优先级的几个任务轮流运行,每个任务运行一个时间片,任务在时间片运行完
  13. // 之后,操作系统自动切换到下一个任务运行;在任务运行的时间片中,也可以提前让
  14. // 出CPU运行权,把它交给下一个任务运行(这一点和协作式类似)
  15. //
  16. // 使用:搜索全工程,看看有无定义configUSE_TIME_SLICING,如果没有,
  17. // 就添加:#define configUSE_TIME_SLICING 1 ,开启时间片轮转调度.
  18. //
  19. //
  20. //置0:协作式调度器;任务在运行一段时间后,自己主动放弃CPU运行权,让其他任务运行
  21. //
  22. // 在FreeRTOS里,可通过taskYIELD()这个函数实现主动放弃CPU,这时其他处于就绪态
  23. // 的最高优先级的任务才可能运行;如果其他任务都不在就绪状态,那么仍然回到taskYIELD()
  24. // 后面继续运行原来的任务 .
  25. //
  26. // 优点:资源占用少,
  27. // 缺点:需要用户在任务中规划好运行时间,适当的时候让出CPU。
  28. //
  29. #define configUSE_IDLE_HOOK 0
  30. #define configUSE_TICK_HOOK 0
  31. //
  32. //置1:使能钩子函数
  33. //
  34. //置0:禁能钩子函数
  35. //
  36. //钩子函数:FreeRTOS 中有多个钩子函数,钩子函数类似回调函数,当某个功能(函数)执行的时候就会调用钩子函数,
  37. // 至于钩子函数的具体内容那就由用户来编写。
  38. //
  39. //空闲任务钩子函数:
  40. //功能:1.执行低优先级,后台或需要不停处理的功能代码。
  41. // 2.测试出系统处理裕量(空闲任务只会在所有其它任务都不运行时才有机会执行,所
  42. // 以测量出空闲任务占用的处理时间就可以清楚的知道系统有多少富余的处理时间)。
  43. // 3.将处理器配置到低功耗模式——提供一种自动省电方法,使得在没有任何应用功能
  44. // 需要处理的时候,系统自动进入省电模式。
  45. //
  46. //使用注意:1、绝不能阻塞或挂起。
  47. // 2、如果应用程序用到了 vTaskDelete() API 函数,则空闲钩子函数必须能够尽快返回。
  48. // 因为在任务被删除后,空闲任务负责回收内核资源。如果空闲任务一直运行在钩子函
  49. // 数中,则无法进行回收工作。
  50. //
  51. //configUSE_IDLE_HOOK 空闲任务钩子函数(vApplicationIdleHook()),vTaskStartScheduler()会调用该函数
  52. //configSUE_TICK_HOOK 时间片钩子函数(vApplicationTickHook()),xTaskIncrementTick()会调用该函数
  53. //configUSE_MALLOC_FAILED_HOOK 内存申请失败钩子函数,使用pvPortMalloc()申请内存失败的时候会调用该函数
  54. //configUSE_DAEMON_TASK_STARTUP_HOOK 定时器服务任务钩子函数(vApplicationDaemonTaskStartupHook())
  55. //
  56. ///
  57. #define configCPU_CLOCK_HZ ( ( unsigned long ) 72000000 )
  58. //CPU主频,单位Hz(CM3内核,CPU主频为72M)
  59. #define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
  60. ///
  61. //
  62. //时钟节拍:时钟节拍的周期需要依据具体任务的特点来确定,一般为1ms~100ms(这里为1ms)
  63. // 如果实时性要求高,需要任务响应较快,则节拍设置得短一些;
  64. // 如果实时性要求低,可以设置得长一些。
  65. //
  66. //获取时钟节拍的计数:
  67. //普通任务函数: xTaskGetTickCount()
  68. //中断服务程序: xTaskGetTickCountFromISR()
  69. //返回值:时钟的节拍计数值
  70. //
  71. //
  72. #define configMAX_PRIORITIES ( 5 )
  73. //可供用户使用的最大优先级数
  74. //优先级的数值越小,任务的优先级越低
  75. //建议用户配置configMAX_PRIORITIES 的最大值不要超过32,
  76. //用户可以使用的范围0-31,根据实际应用配置,配置越大,需要的内存空间越大
  77. #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 )
  78. // 空闲任务的栈空间大小
  79. #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )
  80. //堆大小,在FreeRTOS中,用户动态内存申请,任务栈,任务创建,信 量创建,消息队列创建等都需要用这个空间。
  81. #define configMAX_TASK_NAME_LEN ( 16 )
  82. //定义任务名最大的字符数,包括末尾的结束符' '。
  83. #define configUSE_TRACE_FACILITY 0
  84. //置1:启用可视化跟踪调式
  85. //置0:禁用
  86. //注意:如果我们使用的开发环境为IAR,则要使能该配置,否则无法显示任务栈的使用情况。
  87. #define configUSE_16_BIT_TICKS 0
  88. //TickType_t作为tick count的数据类型
  89. //置1:TickType_t定义的就是16位无符 数
  90. //置0:定义为32位无符 数
  91. //注:32位的处理器,禁止此特性
  92. #define configIDLE_SHOULD_YIELD 1
  93. /
  94. //
  95. //处理空闲优先级任务:当程序使用抢占式内核调度,且用户任务使用空闲优先级时
  96. //置1:如果多个任务共享空闲优先级时,空闲任务立刻让出CPU,让就绪态共享空闲优先级的用户任务运行
  97. //
  98. //置0:阻止空闲任务为用户任务让出CPU,直到空闲任务的时间片结束
  99. //
  100. /
  101. /* Co-routine definitions. */
  102. #define configUSE_CO_ROUTINES 0
  103. //置1:使能合作式调度相关函数
  104. //置0:禁能合作式调度相关函数
  105. #define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
  106. //设置用户使用的最大的合作式任务优先级数
  107. 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月11日
下一篇 2022年9月11日

相关推荐