FreeRTOS配置管理:

网上移植教程较多,也可以使用官方提供的各种Demo工程进行移植,不在详细介绍。本文主要介绍FreeRTOS移植成功后进行的配置方式。使其成为自己最匹配最精简,最适用的系统。

FreeRTOSConfig.h几乎包含了所有需要的配置。下文讲述主要的几项配置:

  1. 包含INCLUDE_。。。的宏定义。所有这些宏都是条件编译所需的。可以根据自身需要进行定义。例如INCLUDE_xTaskAbortDelay是需要使用函数 xTaskAbortDelay()时定义为1。这样做的好处是使处理器不编译不需要的函数。减少代码量。函数的功能在函数名字中已体现出来。根据需要进行定义即可。
  2. config开始的宏:

   2.1 configAPPLICATION_ALLOCATED_HEAP 该宏定义为1时用户可以自己家设置堆内存,堆内存的详细代码在heap_1.c到heap_5.c中。具体取决于用户选择哪种内存管理方式。网上都推荐使用4。

   2.2 configASSERT 断言,和assert()函数类似,调试时可以判断传入的参数是否合理。一般在调试结束后关闭。FreeRTOS内核中的关键点都会调用 configASSERT(x),configASSERT()需要在 需要在 FreeRTOSConfig.h文 件中定义, 如下实例: #define configASSERT((x)) if((x)==0) vAssertCalled(__FILE_,__LINE__);
注意, vAssertCalled()函数需要用户自行去定义,可以是显示到 LCD上的 函数 ,也可以是 通过串口打印出来的 函数 ,原子的例程使用的定义:

//断言 #define vAssertCalled(char,int) printf("Error:%s,%d\r\n",char,int) #define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__)
当参数 x错误的 时候就通过串口打印出发生文件名和所在错误的 时候就通过串口打印出发生文件名和所在行。

   2.3  configCHECK_FOR_STACK_OVERFLOW 堆栈溢出检测。堆栈的大小是从任务创建时就已经定义完成的。如果定义了堆栈溢出检测,用户必须定义一个钩子函数(回调函数)当堆栈溢出时,就会调用该函数。函数原型:

    void vApplicationStackOverflowHook( TaskHandle_t xTask, char * pcTaskName );

参数 xTask是任务句柄, pcTaskName是任务名字,要注意的堆栈溢出太严重话可能会 是任务名字,要注意的堆栈溢出太严重话可能会 是任务名字,要注意的堆栈溢出太严重话可能会 损毁这两个参数, 损毁这两个参数, 如果发生这种情况的话可以直接查看变量 如果发生这种情况的话可以直接查看变量 如果发生这种情况的话可以直接查看变量 如果发生这种情况的话可以直接查看变量 如果发生这种情况的话可以直接查看变量 pxCurrentTCB来确定哪个任务发 生了堆栈溢出,一般在调试结束时将该宏关闭,减少系统开销。该宏可以等于1或者2,方法1较快,方法2慢一点但是几乎可以检测出所有堆栈溢出的情况。

   2.4 configCPU_CLOCK_HZ 设置 CPU的频率。

   2.5 configSUPPORT_DYNAMIC_ALLOCATION 定义为 1的话在创建 FreeRTOS的内核对象时候 所需要的 RAM就会从 FreeRTOS的堆中 的堆中 动态的获取内存,定义为0的话需要用户自行提供。默认为1。

   2.6 configGENERATE_RUN_TIME_STATS 置为 1开启时间统计功能, 开启时间统计功能, 相应的 API函数会被编译, 为 0时关闭间统计功能。 时关闭间统计功能。 如果 宏 configGENERATE_RUN_TIME_STATS为 1的话还需要定义一个外设来作为时间系统的基准,还需要一个宏返回当前基准时钟的值。

   2.7 configIDLE_SHOULD_YIELD 一般关闭,空闲任务。没什么作用。

   2.8 configKERNEL_INTERRUPT_PRIORITY、
       onfigMAX_SYSCALL_INTERRUPT_PRIORITY、
       onfigMAX_API_CALL_INTERRUPT_PRIORITY
       三个宏和FreeRTOS 的中断配置有关。

   2.9 configMAX_CO_ROUTINE_PRIORITIES 系统的最大优先级数量

   2.10 configMAX_PRIORITIES 设置任务的优先级数量,设置好以后任务就可以使用从0 到configMAX_PRIORITIES-1 的优先级,其中0 是最低优先级,configMAX_PRIORITIES-1 是最高优先级。

   2.11 configMAX_TASK_NAME_LEN 设置任务名最大长度。

    2.12 configMINIMAL_STACK_SIZE 设置空闲任务的最小堆栈大,以字为单位,不是字节。

    2.13 configNUM_THREAD_LOCAL_STORAGE_POINTERS 每个任务的指针数组大小。

    2.14 configUSE_MUTEXES 为1时使用互斥信号量。

    2.15 configUSE_PORT_OPTIMISED_TASK_SELECTION FreeRTOS有两种方法来选择下一个 要运行的任务,是通用另外有两种方法来选择下一个 要运行的任务,是通用另外有两种方法来选择下一个 要运行的任务,是通用另外是特殊的 方法, 也就是硬件方法, 使用 MCU自带 的硬件指令来实现。(注:使用硬件方式时和使用的CPU有关,例如stm32有32个中断,因此,使用stm32时硬件方式最多使用32个任务。而通用方式无限制。)

    2.16 onfigUSE_PREEMPTION 为1时使用抢占式任务调度器。0为协程方式。(FreeRTOS已经不再更新协程方式的算法。我们也可以使用同一优先级多个任务的方式来进行相类似的效果。)

    2.17 configUSE_TICKLESS_IDLE 低功耗模式

      configUSE_TIMERS 软件定时器模式。并不精确。

    2.18 configUSE_TIME_SLICING 为1时使用抢占式调度器,这样会使调度器无限调用最高级优先级任务。为0时使用轮盘式任务调度模式。默认为1。

  这是这个头文件中我认为最常用也是最基本的几个宏,在今后使用中有需要再具体查看即可。

转载于:https://www.cnblogs.com/daidong805/p/7220053.html

FreeRTOS学习笔记4-FreeRTOS配置管理相关推荐

  1. STM32F407霸天虎FreeRTOS学习笔记——移植FreeRTOS到开发板上

    STM32F407霸天虎FreeRTOS学习笔记--移植FreeRTOS到开发板上 FreeRTOS源码获取 移植第一步:创建文件夹 Keil main.c 实验效果 FreeRTOS源码获取 在移植 ...

  2. 【ESP32+freeRTOS学习笔记-开篇前言】

    目录 前言的前言 RTOS的选择 开发与实践环境 参考资料 笔记的形式 专题文章的链接(持续更新中......) 前言的前言 单片机的开发,也有两年多了,之前一直是做一些简单应用,因此以裸机开发的方式 ...

  3. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

    FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...

  4. freeRtos学习笔记 (9) 移植和CPU利用率统计

    freeRtos学习笔记 (9) 移植和CPU利用率统计 使用官方固件移植 首先准备一个能跑的裸机工程 注意,freertos需要使用systick定时器,而stm32HAL库默认使用systick作 ...

  5. freeRtos学习笔记 (8) 任务通知

    freeRtos学习笔记 freeRtos任务通知 任务通知的优缺点 freeRtos任务控制块中包含两个32位的变量,用于任务通知,在一些情况下,任务通知可以替代信号量和事件组,并且比信号量和事件组 ...

  6. freeRtos学习笔记 (7)信号量

    freeRtos学习笔记 freeRtos信号量 信号量种类 信号量分为四种:二值信号量,互斥信号量,计数信号量和递归互斥信号量,其中计数信号量用于管理系统多个共享资源,用计数值表示可用资源数目;二值 ...

  7. freeRtos学习笔记 (6)软件定时器

    freeRtos学习笔记 freeRtos软件定时器 软件定时器需要注意事项 软件定时器的精度基于时钟节拍,例如系统时钟节拍为10ms, 软件定时器定时时间必须是10ms的整数倍,因此软件定时器一般用 ...

  8. freeRtos学习笔记 (5)事件组

    freeRtos学习笔记 freeRtos事件组 为什么要用事件组? 多任务环境下, 任务.中断之间往往需要同步操作,一个事件发生会告知等待中的任 务,即形成一个任务与任务.中断与任务间的同步.事件可 ...

  9. FreeRTOS学习笔记——互斥型信号量

    来自:http://blog.csdn.net/xukai871105/article/details/43456985 0.前言 在嵌入式操作系统中互斥型信号量是任务间资源保护的重要手段.下面结合一 ...

  10. FreeRTOS学习笔记

    FreeRTOS学习笔记 (这是我自己学习FreeRTOS整理的笔记,仅供参考) 第一部分:实现FreeRTOS内核 变量名: 定义变量时往往会把变量的类型当作前缀加在变量上 变量类型 前缀 char ...

最新文章

  1. zabbix proxy安装配置
  2. java魂斗罗_java 魂斗罗
  3. 第十二届蓝桥杯省赛A组砝码称重Java解题思路及代码
  4. mysql 预留一个自定义字段_MySQL 按指定字段自定义列表排序 | DevOps
  5. 问题:未清空磁盘被添加到磁盘组触发坏块
  6. 媒体化战略:数字时代企业如何做好公关与内容营销
  7. 1年内从2000涨到13000的成长经验分享
  8. 谋哥:这个时代没有比程序员更适合创业
  9. [导入]DotNetNuke 模組偵錯(DNN module debug)
  10. 006 关于大数据的本地模式环境的搭建
  11. 网络安全:SQL 注入漏洞
  12. Python 递归函数计算阶乘
  13. 怎么批量查询银行卡号是哪个银行
  14. python小工具集_Python 小工具集合
  15. python中的多线程 GIL(全局解释器锁) 死锁与递归锁
  16. 解读 ESP32 API参考-system-App Image Format
  17. WireShark 抓包使用教程--详细
  18. 光电容积脉搏波描记法PPG
  19. 计算机科学领域专业,计算机科学与技术专业主要包括哪些领域?
  20. android绑定交通卡,安卓手机公交卡的用法

热门文章

  1. /etc/rc.local 与 /etc/init.d Linux 开机自动运行程序
  2. html5中上传图片
  3. 每天读一遍,不久你就会变!
  4. lua学习:使用Lua处理游戏数据
  5. Oracle体系结构中的各种名称
  6. 动态生成treeview
  7. 基于svg.js实现可编辑的图像
  8. 网易举办首届云创大会,优云软件助力司南战略
  9. freemarker第三篇
  10. 让Redis在你的系统中发挥更大作用的几点建议