一、简介
基于MCU移植FreeRTOS,进行多线程的嵌入式开发。
二、基础工程搭建过程

2.1 从SDK里拷贝资源到自己的工程文件夹里

整体框架


2.2 芯片支持相关文件(chip_driver\apm32f103\)


拷贝到chip_driver\apm32f103\,标准驱动文件,cortex-m3的内核通用文件,以及设备文件夹中极海半导体给的系统相关的文件和对应的开发环境的.s汇编启动文件

2.3 输出文件夹(out\)
在keil中指定,进入魔法棒



2.4 keil工程启动文件夹

2.5 自行安装该MCU的keil环境支持DFP包


如果还不会就参考例程


2.6 打开keil,点击project新建工程到工程文件夹的mdk里




2.7 调整过程结构


添加文件到工程结构里



导入.c文件,.h文件在编译后会在.c文件下 ,不建议引入,会导致目录繁杂


点击ok
2.7 魔法棒,导入各文件的文件路径才能找到

c/c++



会自动转为相对路径

2.8 编译查看是否通过
打开关联信息,即可跳转


(1)如果出现一定要添加.s文件进来,添加到左侧工程.c/.s文件以及配合头文件路径才会真正起效


(2)如果出现启动文件符号定义问题的添加宏

解决方法:

2.9 成功搭建基础工程


三、移植FreeRTOS
新建文件夹os

3.1 找到FreeRTOS源码,SDK包的中间件文件夹里






拷贝到工程文件夹的os文件夹里
3.2 添加头文件路径
注:可以只添加头文件路径,因为.c和.s文件是添加到了keil工程文件结构里(左侧),而.h文件需要另外添加路径

3.3 添加.c文件





3.4 添加FreeRTOS相关的用户文件,与主任务main隔离开
freertos_task.h
#ifndef __FREERTOS_TASK_H
#define __FREERTOS_TASK_H
#include "freertos.h"
#include "task.h"
void AppTaskCreate(void);
#endif
freertos_task.c
#include "freertos_task.h"
void AppTaskCreate(void)
{
}
main.c
#include "apm32f10x.h"
#include "freertos_task.h"
int main(void)
{
while(1)
{
AppTaskCreate();
vTaskStartScheduler();
}
}




3.5 要使用自定义的FreeRTOS配置文件,创建FreeRTOSConfig.h文件



3.6 改中断文件
注释掉三个中断,因为FreeRTOS里已经实现,同时核心时钟SysTick会交接给FreeRTOS


(1)如果出现大量错误,以及提示GCC\ARM_CM3的port.c有问题

解决方法:将编译器换成6版本的,不要使用5版本的

3.7 成功移植os
