FreeRTOS组织为了抢用户也是拼了命的,不信你打开Demo文件夹看看,里面提供了FreeRTOS在各种单片机上已经移植好的工程,如果建工程时遇到什么问题,可以参考下这些Demo。
不过小灯现在着重于自己动手移植FreeRTOS,考虑到原子哥@正点原子的用户比较多,绝大多数习惯了使用MDK来开发STM32,因此小灯分别以IAR和MDK两种使用比较广泛的开发环境来移植FreeRTOS。说到IAR和MDK,不得不提的是小灯自从用了IAR之后就果断放弃了MDK,相信很多人有这个经历,哈哈!
在开始移植FreeRTOS之前,先介绍下FreeRTOS的源码:
FreeRTOS的源码比较少,源文件也远没有UCOS多,不过麻雀虽小五脏俱全,FreeRTOS的短小精悍也是最令小灯着迷的,虽然缺少了很多组成部分,例如GUI、网络协议栈、文件系统等,不过这些统统都不是问题,因为完全可以移植第三方的组件!
一不小心牛X又吹大了,哈哈!回归正题,FreeRTOS的源码核心部分是tasks.c和list.c,其余的几个文件功能都是可选的,例如软件定时器、队列、协程等等,小灯就不介绍了,有兴趣的话可以到官网上看介绍。include文件夹里面的文件是操作系统相关的头文件,而portable这个文件夹有些奇葩,先看看里面有啥:
这里的文件几乎都是与平台相关的,如果你要删掉这里的文件时就必须小心了,因为不是所有文件都能删除的。
注意文件夹MemMang,里面存放的是FreeRTOS自带的内存管理方案的源文件:
关于内存管理方案的选择,小灯以后再跟大家讨论,现在只需要知道这些文件不能删就好。
接下来看看IAR文件夹的内容,里面都是跟单片机底层相关的,由于我们以STM32F103为例,因此只需要保留ARM_CM3文件夹即可,其余可选择性删除。ARM_CM3文件夹里只有几个文件,这几个文件是操作系统最最底层的部分:
接下来再看看Keil文件夹的内容,里面只有一个文件,文件提示See-also-the-RVDS-directory,意思是让我们参照RVDS目录下的文件。其实我们以MDK建工程时,就是拿RVDS目录下的文件来替代的,因此我们应该把RVDS目录下的文件拷贝到Keil目录下,跟上面IAR文件夹一样我们只拷贝ARM_CM3文件夹即可:
到这里我们可以把其他无用的文件统统删掉了,portable目录下只保留下面几个文件夹的文件即可:
现在已经把源码整理好了,接下来就开始移植工作吧!