优化内存设置的关键技巧
1.合理设置任务栈大小: 任务栈的大小会影响系统的内存占用。根据任务的实际需求,合理设置任务栈的大小,避免过度分配。
2.选择合适的内存分配策略: 根据系统的实际需求选择合适的内存分配方式,可以是静态内存分配或动态内存分配。
3.监控内存使用情况: 在系统运行过程中,不断监控内存的使用情况是非常重要的。通过内存分析工具、内存监控函数等手段,及时发现和解决内存相关的问题。
4.使用编译器优化选项: 合理使用编译器的优化选项可以进一步优化内存使用情况,提高系统的性能。
5. 使用内存块池而不是字节池
内存字节池本质上是一个堆。开发人员可以在程序执行期间动态请求内存,就像他们使用 malloc 一样。在许多情况下,使用堆或字节池会导致影响实时系统性能的不确定行为。为了确保系统及时运行,嵌入式开发人员可以使用块池来代替,它以一种确定的方式运行,并且也不存在碎片问题。
6. 不要创建和销毁对象
创建任务、信号量、消息队列和其他 RTOS 对象通常会导致动态分配内存。创建和销毁 RTOS 对象将使用 malloc 和 free,这又是不确定的,可能会导致性能问题。与创建和销毁对象相关的开销,特别是如果经常这样做,可能会成为系统障碍,更不用说它如何增加代码复杂性并使程序难以遵循。在可能的情况下,在应用程序初始化期间分配所有对象,并让它们在应用程序的整个生命周期中持续存在。这样,对象的行为就好像它们是静态分配的,而不是动态分配的。
7.考虑使用事件标志
事件标志可用于同步任务,类似于使用信号量同步任务的方式。从性能角度比较事件标志和信号量时,事件标志通常使用更少的内存并且执行得更快。嵌入式开发人员应考虑比较其 RTOS 的内存占用和执行时间,以确定他们可以从应用程序中挤出几个额外字节或微秒的位置。
8. 最小化 RTOS 对象
大多数 RTOS 对象都需要一个控制块。应用程序中的任务、信号量、消息队列等越多,内存使用量就越大。通过限制在运行时创建的 RTOS 对象的数量,可以最大限度地减少内存使用。
9.优化任务栈
任务堆栈因在应用程序中消耗最多的内存而臭名昭著。许多开发人员只是猜测一个值而不是进行测量。许多 RTOS 会建议任务的默认堆栈大小约为 1 kB。是不是太多了? 太少了? 如果不进行测量,就无法判断,因此开发人员只会猜测。结果是为堆栈空间分配了太多内存并浪费了。开发人员应利用与 RTOS 相关的堆栈监控功能来确定其最小、最大和平均堆栈使用情况。从最大值开始,额外增加 25% 将是确定堆栈大小的安全经验法则。
10.关闭未使用的功能
RTOS 是极其丰富和复杂的软件系统。它们包含许多并非每个应用程序或开发人员都可以使用的功能。熟悉 RTOSes 配置文件对于最小化内存使用和代码大小非常有帮助。配置文件允许开发人员启用和禁用功能。
使用 RTOS 不一定需要增强型微控制器或大量内存。嵌入式开发人员构建和使用他们的 RTOS 的方式可以决定它是在资源受限的环境中运行良好还是被标记为膨胀代码。这七个技巧只是帮助你开始优化 RTOS 的一些技巧。