经过前面对freeRTOS源码目录结构和例程的分析,接下来我们就动手来移植freeRTOS最新版源码包到NXP的kinetis系列KV46MCU上,并实现一个简单的例子,按一个按键,点亮LED灯。
准备工作
1, 官网下载freeRTOS源码包V9.0.0,解压到本地电脑上
2, 装有IAR的电脑
3, 塔式系统平台Kv46
之前曾多次提到过,移植一个源码包,必须熟悉他的源码目录结构,所以本次移植前,假设你已经熟悉freeRTOS源码目录结构,如果不熟悉,请自行学习。我们以源码包里的在k60上的例程为基础来移植到kv46上。
移植
启动过程
我们知道系统上电后首先会运行crt0.s,这个文件是汇编文件,但是很简单,可以跟踪下,执行问这个文件会跳入start .c文件中的start函数,经过禁止看门狗,初始化,系统时钟配置等之后会跳入main函数,执行用户应用程序。
了解启动过程对我们移植修改顺序有很大帮助。
工程搭建
复制freeRTOS的demo文件夹下CORTEX_Kinetis_K60_Tower_IAR文件夹所有内容。并将复制的CORTEX_Kinetis_K60_Tower_IAR文件夹改名为CORTEX_Kinetis_Kv46_Tower_IAR,并将k60_tower.h改为kv46_tower.h,修改kv46_tower.h文件,删除跟网络有关的文件,因为kv46不支持网络
同样在kv46_tower.h文件中修改如下内容,因为kv46只有串口1和串口0.
头文件修改
因为k60和kv46的头文件不一样,所以必须修改common.文件,首先包含刚刚我们修改的文件kv46_tower.h文件,在包含kv46的头文件,
工程配置修改
因为我们移植是针对不同的芯片,所以必须修改工程配置,首先选择kv46芯片
修改文件包含目录,删除与网络有关的,因为kv46不支持网络,并添加TWR_KV40F256
修改链接文件,因为k60的例程用的是512Kflash的配置文件,找到kv46的配置文件并复制到我们工程的common文件夹下,可以删除原来的k60的配置文件
在配置选项中指定kv46的配置文件
修改调试配置
修改系统时钟函数
修改pll_init函数,因为k60和kv46的时钟配置上,有的寄存器是不一样的,这个要对照数据手册修改
主要修改的地方有
修改系统初始化函数
修改sysinit函数,因为kv46只有串口1和串口0,我们使用串口1,所以配置对应的管脚,删除掉不用的配置
修改freeRTOS配置文件
应用程序修改
根据硬件平台,修改应用程序对应的硬件管脚配置
修改vectors.h
还有其他LED对应管脚映射修改等,这里不在赘述。
编译测试程序
编译修改完的移植工程
将编译好的工程输出文件下载到板子上运行,可观察到,按动SW1按键,LED会闪亮,证明移植成功。
总结
经过此移植过程,可以证明我们的工程已经成功从K60移植到了KV46MCU上,同理可以移植其他功能,如可以添加移植Modbus通信,ADC等功能,完善工程,添加更多的应用程序模块,可以应用于实际开发