1304_FreeRTOS从任务控制块信息的角度尝试裁剪内核节省资源

全部学习汇总: GreyZhang/g_FreeRTOS: learning notes about FreeRTOS. (github.com)

前面分析了一些内核的实现,现在结合我自己常见的需求看看如何能够让FreeRTOS的功能减少一些。这一次,先从TCB中包含的信息的角度来看看能够节省多少资源。

近段时间,我手里的这个代码的工程一直没有做功能上的更新。这里,正好借用一下之前编译后获取到的资源使用的情况,以此做一个参考。我现在的这个工程,里面创建了两个用户task,分别以500ms和1000ms的周期执行。里面做了一点测试代码,主要是用来测试OS的接口。目前,存储的使用上看起来已经非常多了。32K的flash用掉了大概三分之二,而RAM一共10K的总量,现在也大概用掉了60%。

做这一次的对比之前,我先把之前的测试代码尽量删除一下,再次看一下资源的使用。

这是目前的一个资源使用使用情况,其实还有一个总体的资源汇总,准确度不知道如何。但是应该可以参考一下。

这是目前存储的使用情况,的确是占用了太多的存储空间。我在上面的代码中增加了一个TCB数据结构的大小打印功能,接下来,看看效果。

现在的TCB的大小是84个字节。接下来,做一下裁剪,具体的修改关系到TCB的信息。这样,参考一下TCB数据结构的定义。

这是目前的情况,其实注释里面基本上写了现在的配置的情况。如果尝试裁剪修改的话,可以先把静态的任务创建功能给去掉、互斥信号的使用功能禁用。暂且得保留一下任务通知功能,虽然目前来看,结合我过去项目中的应用,这些功能差不多可以满足我大部分需求。但是,任务通知功能涉及到我接下来想要了解的stream buffer的功能,因此暂且保留。由此看看,可以减少多少资源的使用。

目前能够修改的似乎也就这么多,先看看效果再说。

这么看,从总量上看,尤其是RAM减少了大概600个字节,资源的释放效果还是很明显的。由于部分功能的变化,flash现在也有了一些释放。

现在的TCB也少了12个字节。当前,任务名称其实还是可以在减少一些的,这个信息其实我基本用不到。

这一次测试中,我把任务名称只留下了4个字节的长度。但是对于整个系统的资源消耗来说,改善其实并不是很多了。

都已经做到这里了,不妨尝试去做到更好。再度优化,我优化掉了上面的信息。我第一次意识到,原来我用的这个配置默认下没有使能INCLUDE_vTaskDelayUntil()。

做了上面的调整之后,系统进入了hardfault,这个又是一个很奇怪的地方。

改成了这样子之后还是可以的,看起来什么地方应该用到了调度器状态的获取。后面还是得做一个分析才好。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值