山外K60程序移植

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zy_like_study/article/details/89324555

一、工程建立

1.新建文件夹
将山外工程文件夹的前四个直接拖出来,至于Prj文件夹,只保留其中的config files文件夹,其他全删掉。
PS:① config files文件夹是Linker配置文件,设置了Kinetis芯片是从ROM启动,还是从RAM启动,堆栈的大小配置等,这些文件虽然飞思卡尔官方也有,但是很不规范,上外哥改过这些文件了,待会设置直接设置使用这些文件链接就行。
② 最好先使用鹰眼摄像头的使用的库建工程,因为这个库比较成熟,之前用的前面的库发现好多设置和h文件都不一样,导致摄像头用不了
在这里插入图片描述
2.IAR新建工程
在这里插入图片描述
① 打开IAR→Project→Create New Project→Empty Project→命名并保存在Prj文件夹下→点击右上角Save All再次保存
PS:第一次保存是保存工作空间,第二次保存是保存当前工程
② 选择工程模式Project → Edit Configurations → New→键入工程名字,并选择debug模式
PS:Debug 模式为调试模式,Release 模式不可以调试且要求严格,Debug 模式的优化效果不如 Release 模式,如果我们的程序编
程是没 Debug,就不怕把模式调到 Release 模式,只不过是在 Debug 模式下,会隐藏了一些错误而让我们觉得编译通过了
在这里插入图片描述

3.新建分组
在这里插入图片描述
右键工程名称→Add→Add Group→键入’App’
重复上述操作,完成App、Board、Chip、Lib分组的建立

PS:App是应用代码
Board是针对山外开发板的特有的代码,移植应该注意引脚外设(LED、KEY等)要改一下
Chip是针对K60芯片内部外围电路的库和启动文件,比如uart、ftm、adc等,这些一般都是通用的,移植起来比较方便
Lib是Arm内核的支持文件,(对于不同的IDE,可能是相同的,这个记不清了)

4.向分组添加文件
右键App→Add files→App中的C文件全部加入
依次类推将其余分组添加完毕,Chip添加文件时注意要把启动文件(.s文件)也添加进去
在这里插入图片描述

5.配置工程(右键工程名字→Options)

① 选择芯片
在这里插入图片描述
②选择Library为Full(printf函数要用)

在这里插入图片描述
③设置优化程度
在这里插入图片描述
④选择头文件路径,选择所有包含.h文件的文件夹,并选择绝对路径,如下图

在这里插入图片描述在这里插入图片描述
⑤加入宏定义,代码会根据这些宏定义做宏条件编译,这是Debug模式下的宏定义
DEBUG
ARM_MATH_CM4
MK60F15
MK60FX15
在这里插入图片描述
⑥使用自己的linker文件,在Prj的config files文件夹下
在这里插入图片描述
⑦选择调试工具:
硬件调试,选择 J-Link/J-Trace ;软件仿真,选择 Simulator 。如果是在 Release 模式,不能选择软件仿真 Simulator
执行到main函数,即调试直接从main开始,步过bootloader
在这里插入图片描述
⑧ 设置复位后继续连接,方便调试
在这里插入图片描述
⑨ 生成hex文件
在这里插入图片描述
⑩ 把char设置为有符号型,并生成map文件(这两个可以不设置)
在这里插入图片描述在这里插入图片描述
PS:勾上 Generate linker map file 编译后,以 Debug 模式为例,在工程的文件夹下生成: fire_Kinetis\build\gpio_demo\Debug\List\ fire_gpio_demo.map 文件,里面有很多详细的信息,方便我们了解工程编译后内存的使用情况

在这里插入图片描述
至此已经完成工程建立。

二、删除开发板外设文件

上述工程已经能使用,但是会发现MK60_conf.c里面会有#include "VCAN_LED.h"和#include "VCAN_KEY.h"外设头文件,如果移植到其他开发板时,这些外设文件是用不了的(也可以引脚改成和自己板子外设一样的),但是直接删除会报错,因为MK60_conf.c很多函数都调用了LED和KEY(程序跑飞时可以用LED提醒程序员,KEY则用来jtag下载,但是这些都是无关紧要的,可以一点点删掉,原谅我的强迫症,我只想要一个干净的库)

start_check()函数是防止jtag引脚被复用为其他功能时无法下载程序问题,但实际编码过程一般都会注意不与jtag引脚冲突,因此此函数可以不用使用,以下是start_check()的使用过程
①函数说明

  • @brief 启动前进行检测(检测按键是否按下,按下则进入死循环,防止进入 main 函数,松开按键后再按下则进行解锁)
  • @since v5.0
  • @note 此函数可避免 下载口在 main 前 复用了导致无法下载等问题

②宏定义为SRART_CHECK()函数

void start_check();
#ifdef DEBUG
#define SRART_CHECK()       start_check()
#else
#define SRART_CHECK()
#endif

③可以看下在哪里使用了它

/*!
 *  @brief      kinetis 启动函数
 *  @since      v5.0
 *  @author     飞思卡尔公司
 *  @note       此函数是系统启动初期由汇编函数调用,然后执行main函数
 */
void start(void)
{
    wdog_disable();     // 关闭看门狗

    common_startup();   // 复制中断向量表 和 必要的数据到 RAM里

    sysinit();          // 系统初始化,设置系统频率,初始化printf端口

    //为了防止 main 函数 里 复用了 下载口,导致 下载失败,此处增加 按下 KEY_A 就进入死循环
    SRART_CHECK();

    main();             // 执行用户主函数

    while(1);           // 死循环
}

④因为start_check()函数涉及了大量的KEY、LED函数,盲目移植到其他K60开发板可能会造成其他后果,因此可以直接删掉start()函数里面的SRART_CHECK()函数,也可以通过取消掉宏定义以不执行start_check()函数(如果一直不用直接删掉好了,不然删除VCAN_KEY.h时会报错)

void start_check();
#ifdef DEBUG
#define SRART_CHECK() //  注释掉  start_check()
#else
#define SRART_CHECK()
#endif

⑤如果有关start_check()的都删除了,那么接下来在MK60_conf.c把有关led的函数都删掉,就可以删除 "VCAN_LED.h"和#include "VCAN_KEY.h"头文件了,并将Board的原来两个文件移除,替换成自己板子的文件了

至此一个干净的工程就移植好了

展开阅读全文

没有更多推荐了,返回首页