全部学习汇总: ​​GitHub - GreyZhang/g_FreeRTOS: learning notes about FreeRTOS.​

1247_FreeRTOS的静态以及动态存储分配_FreeRTOS

V9.0.0是一个版本的分水岭,在这个版本之前静态的配置应该是不支持的,只能够通过专门的heap来进行存储的分配。在这个版本之后,应用软件可以自行进行静态的存储分配。涉及到的功能其实还是很多的,上面画出来的这个清单就是。比较常用的任务、软件定时器、队列等等都在覆盖的范围内。

关于静态以及动态存储分配,优劣并不是绝对的,各有优劣。两种方式甚至可以在同一个FreeRTOS的应用中同时使用,在Windows模拟的demo中就有这样的一个例程。

1247_FreeRTOS的静态以及动态存储分配_开发人员_02

使用动态分配的方式在软件调用方面考虑其实是更加简单的,这个也是默认的一组行为。更确切说,应该是传承下来的一组行为。这样的应用可能在最大程度上充分利用系统的RAM。几个典型的优点如下:

1. 接口简单,参数少;

2. 存储分配是自动的;

3. 存储可以重用,因此可以认为这也是RAM充分利用的一个体现;

4. 可以有足够的信息辅助优化heap;

5. 根据应用的需要灵活选择heap的实现方案。

1247_FreeRTOS的静态以及动态存储分配_FreeRTOS_03

静态的方式其实是给了软件设计人员更多的控制权,软件设计人员可以选择把系统的对象放到自己期待的位置。静态存储分配的一个很大的优点是在链接的阶段就可以确认系统所需要的最大的存储量而不是在运行的过程中决定,这在一定程度上保证了软件的可靠。由于RAM的使用在程序运行之前就已经可知,而且在运行的过程中没有动态的需求,因此开发人员也不需要考虑是否会有存储申请失败等异常情况。理论上来说,这让FreeRTOS存在了不用heap也可以运行的可能。

如果做类似车用类的器件,我觉得静态的存储分配其实还是很需要的。这样的设计不见得在控制以及设计优化上能够做到很好,但是能够让我们减少测试的复杂度,减少了可能出现的非预期异常。