王超的小站
认证:VIP会员
所在专题目录 查看专题
FreeRTOS移植详解1-专题概览(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植详解2-滴答定时器实现(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植详解3-内核裁剪(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植详解4-中断配置(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植详解5-临界段处理(基于Microchip dsPIC33C系列芯片)
FreeRTOS移植详解6-任务堆栈初始化和启动(基于Microchip dsPIC33C系列芯片)
作者动态 更多
PIC24 & dsPIC33 MCU Bootloader开发
2021-11-08 15:12
PIC16 & PIC18 MCU Bootloader开发
2021-11-08 15:00
Python开发环境搭建(for Bootloader)
2021-11-08 14:58
Python开发环境搭建 (for Control)
2021-01-27 18:43
MCU扩展CAN/CAN FD接口方案-MCU软件动手实验
2020-11-25 14:11

FreeRTOS移植详解3-内核裁剪(基于Microchip dsPIC33C系列芯片)

      在实际应用中并不会用到FreeRTOS的所有功能,因此可以对RTOS内核进行裁剪,这样也可以节省MCU的Flash和RAM资源。FreeRTOS内核的裁剪是使用名为FreeRTOSConfig.h的配置文件进行定制的,关于FreeRTOSConfig.h 的详细解析在FreeRTOS官网有详细说明,参见链接https://www.freertos.org/a00110.html

      FreeRTOSConfig.h 是特定于工程,而不是RTOS自身的,对于基于FreeRTOS的任何工程所有的RTOS文件都是不需要做任何更改的除了这个FreeRTOSConfig.h。下图是例程工程示例图,可以看出将FreeRTOSConfig.h放在了头文件的Config目录下,而没有和FreeRTOS的头文件和C源文件放在一起。

      从上图中我们可以看出另一个信息,工程用了大约5%的RAM(1186 bytes5 )和6%的Flash(5551 words ),花费并不是很大,这还包括与器件的初始化相关等非FreeRTOS内容,如MCC Generated Files文件夹下内容。同时这是在用免费的XC16编译器,代码优化等级为0的情况下获得的。如此小的代价换来的是最基本的FreeRTOS抢占式内核开发环境,这将给逻辑任务开发带来极大的便利,如定义了优先级递减的100us、1ms、10ms和100ms时基任务,这些任务的调度会自动进行,用户不用在考虑某一瞬间100us、1ms、10ms、100ms的任务撞到一起而导致100us的任务不能及时执行。

      FreeRTOS的配置和裁剪,是借助FreeRTOSConfig.h 中各种宏的值通过条件编译的方法实现的,不需要的功能就不用编译,这样就可以根据实际需求来减少系统占用的Flash和RAM的大小。这里首先介绍“config”开头的宏, 例程中“config”开头的宏配置如下。

      接着介绍“INCLUDE_”开头的宏,使用“INCLUDE_ ”开头的宏用来表示使能或禁止FreeRTOS中的相应API函数,作用就是用来配置FreeRTOS中的可选API函数,例程中配置如下。

      最后,在实际的项目中如应用程序各个任务里有较多的局部变量,那么configTOTAL_HEAP_SIZE要定义的更大些;如果用到了互斥信号量、递归互斥信号量和计数值信号量等,则相应的宏定义开关要打开。这也就是FreeRTOSConfig.h 是特定于具体的工程项目的意思。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 5
收藏 3
关注 40
成为作者 赚取收益
全部留言
0/200
  • 天赐时间 2020-11-07 18:28
    思路清晰,受益匪浅
    回复