本文主要讲解如何将FreeRTOS实时操作系統移植到STM32单片机中在本文之前已经基于MDK集成开发环境移植了stm32标准库并新建工程模板,如果您阅读本文之前没有该工程或者相关stm32工程您鈳以参考进行工程创建,然后继续本文的阅读后续文章将更新对FreeRTOS工作原理的讲解。阅读过程中如有不正确或者有疑问的地方欢迎评论区留言!
一、FreeRTOS源码下载及移植
1、本文移植的版本为FreeRTOSv9.0.0如果您还未有该版本,可以参考以下链接进行下载
2、解压下载的压缩包可以看到里面主要有两个文件夹及几个网页,我们移植时只用到FreeRTOS文件夹里的文件
3、进入FreeRTOS目录将Source目录里所有文件拷贝到上篇文章里所创建的工程里的FREERTOS文件夹里,如下图所示
对于里面的文件如何使用及工作原理后续文章将会详细讲解在这里主要就先讲解如何移植到我们的stm32工程。
4、打开MDK工程新建FREERTOS分组并将源文件添加进分组如下图所示。在这里需要注意的是portable目录里的文件是跟平台相关的我们添加进portable\RVDS\ARM_CM3\port.c,在portable目录里还有一个MemMang文件夹里面主要是跟内存管理相关的,在这里我们选用heap_4.c
5、添加头文件如下图所示
6、经过上面的步骤后可以开始编译了,编译结果如下图所示从编译结果看是缺少了 "FreeRTOSConfig.h"头文件,从文件名称里可以看出这个头文件里的内容主要是一些配置信息但从刚刚复制的Source的源码里并没有找到该头文件,在这里我们可以从FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil里把FreeRTOSConfig.h拷贝到我们工程的FREERTOS\include里然后重新编译,发现编译通过了
7、开始写我们的main.c,这里可以参考以下LED灯代碼之后进行编译然后烧录进stm32单片机里,发现LED灯并没有闪烁
功能描述:灯端口初始化
/* 启动调度器,创建的任务得到执行 */
/* 如果一切正常,main()函数不应该会执行到这里但如果执行到这里,很可能是内存堆空间不足导致空闲
任务无法创建第五章将提供更多关于内存管理从多方面考虑问题的信息 */
最后感谢您的阅读,如果阅读本文章过程中有疑惑或者文章有纰漏的地方欢迎评论区留言!
}