K60项目开发的基础——IAR工程建立

参考资料:野火的IAR工程建立教程(百度网盘):IAR工程建立.pdf

这里我们使用的K60系列的具体型号是:MK60DN512ZVLQ10。此外,我所建立的工程是由CodeWarrior10.6迁移过来的,而已对于MK60DZ10.h文件也做了相应的改动,所以这里所改动的地方比较多。

文件目录结构:

Kinetis60->build->intelligentcar

工程文件(*.ewp)保存在build的intelligentcar文件夹下。

而工作空间文件(*.eww)保存在主目录Kinetis60文件夹下。

往工程中添加Kinetis官方自带函数库。分别为:

  1. src文件夹全部文件。复制到主目录Kinetis60文件夹下。(后面我们还要对这个文件夹下的文件进行裁剪。)

  2. buildiar文件夹下的iar.h和文件夹config files。复制到bulid文件夹下。

为了方便进行管理,在IAR的工程intellignetcar下添加分组。所添加的分组有app、common、cpu、drivers。

添加代码文件

common文件夹下的*.c文件全部添加到common分组中。(注意,在这里不选择.h文件,当然如果你选择也是没有问题的,只是为了简化目录结构,我们不这样做,对于.h文件夹,我们是包含在编译器头文件查找目录中的。)

cpu文件夹下的*.c和crt0.s。特别需要注意的是crt0.s不是漏掉,这是一个启动文件单片机上位复位后,就会执行里面的汇编代码。

对于drivers文件夹,你可以根据需要添加lptmr、uart、wdog。在这里我们只添加这几个。

而在srcprojects将hello_world文件夹修改为intelligentcar,并将里面的hello_world.c文件修改为main.c。并添加进app中。

最后在Kinetis60srcplatforms文件夹下,复制一份k60_tower.h出现,重新命名为k60_xx.h,这里我们我们命名为k60_cae.h。对应的修改Kinetis60srccommoncommon.h里面的代码为:

另外,DEBUG_PRINT在Kinetis60srccommoncommon.h和Kinetis60srcplatformsk60_cae.h中都有定义,都应注释掉。

IAR工程选项设置

IAR的工程选项分为两个:Debug和Release,一个是调试模式,一个是发布模式。调试的时候,我们使用的是Debug,而在发布产品或是比赛里我们使用的是Release,切换起来十分方便。

网上共享的一些工程中,没有Debug与Release,而是Rom、Ram、Flash等模式,这是可以在Project->Edit Configurations中来进行修改的,比如我们可以新建一个Flash的设置。

注意:IAR从Debug切换到Release模式,会出现各种异常的编译错误或者运行异常,这是因为Release有更严格的检查,详细情况,可以搜索《在IARWorkspace窗口顶部的下拉菜单中有两个选项.pdf》了解详细信息。

网上共享的工程模版,大部分是Debug的,就是怕用户会编译出现。但Debug的优化效果不如Release,简单一点的解释就是生成的下载文件Debug会比Release大得多。在这里我们是用Debug模式来讲解的。

在工作区的工程名intelligentcar上,右击,在菜单中选择Options:

General Options->Target ->Processor variant->Device

选择的是Freescale MK60DN512Zxxx10,其中的xxx是封闭对应的标识符号,对于编译器的设置是没有影响的。

General Options->output

选择Executable。直接编译生成执行代码的,选择Executable,如果编译成库,则选择Library。

C/C++ Compiler->Optimizations

在Debug模式下,这里设为不优化,便于调试。事实上,在调试的时候,如果进行了优化,有些变量就不能显示出来了,就不便于调试了。

在Release模式里,可以选择最大优化,但在发布前,需要对优化后的效果进行验证。因为优化后可能会出现各种异常错误。

C/C++ Compiler->Preprocessor

在Additional include directories:(one per line)文本编辑框中填入:

其中$PROJ_DIR$表示IAR工程所在的目录

..表示上一层目录

在Defined symbols:(one per line)文本编程框里输入:

注意:如果在Defined symbols:(one per line)这里填入了DEBUG,那就要注释到Kinetissrccommoncommon.h里面的DEBUG的宏定义。

Output Converter->Output

这里可以设置编译代码后,把代码转化为其他格式。这里我们使用的是USBDM4.10.4版本的下载工具,要使用的是IAR生成的srec文件。

Linker->Config

在Linker configuration file里勾选中Override default,重新打开Linker配置文件,在Kinetisbuildconfig files文件夹下就有多个Linker配置文件。里面设置了Kinetis芯片是从ROM启动还是RAM启动,堆栈的大小等配置。对于这里使用的芯片,有128KB SRAM与512KB FLASH,在Debug模式下,如果想从RAM启动,可以选择128KB_Ram.icf,如果想从ROM启动,可以选择512KB_Pflash.icf或者256KB_Pflash_256KB_Dflash.icf,两者的区别里,后者把512KB的Flash分一半出来,作为保存其他数据用,而不是全部用来保存程序代码。

Release模式中,肯定是从ROM启动,即可选择512KB_Pflash.icf或者256KB_Pflash_256KB_Dflash.icf。而且Release模式因为没有调试信息,所以是不能使用JLink等调试器来Debug的。

选择的时候,编译器会改成绝对地址,为了工程在其他电脑上也能运行,可以改成相对地址

 Linker->Automatic runtime library s

这与预处理时设置头文件所在的文件夹一样,这里是设置库所在文件夹。

如果使用其他已经编译好的库,那就把库所在文件添加进去。

Linker->Optimizations

去除勾选Inline small rountines。

Linker->List

可能生成关于内存分布、编译后生成文件的大小等各种信息的文件。

勾上Generate linker map file。

Debugger->Setup

我们使用的是BDM下载器,所以Driver选择PE micro,并在Device description file中勾选Override default,选择默认文件。

Debugger->Download

勾选上Use flash load,勾选下方的Override default .board file,选择默认文件。

代码修改

在k60_cae.h头文件下,删除或是注释

还有下方的

对于

不可改变,否则代码会认为没有选择CPU,编译不成功。

删除io.c与io.h,这里我们不会使用到他们。此外还有在common.h在删除或注释掉

删除printf.c,因为这文件是依赖于io.c与io.h的,删除后,将不能再进行串口输出字符串。

修改sysinit.c为:

修改sysinit.h为:

在common.h中加入:

并修改MK60DZ10.h为:

MK60DZ10.h

在start.c中,注释或删除以下代码:

删除uif.c与uif.h。

在srart.h中删除或注释:

删除main.c函数中的内容,删除或注释start.c中的:

还有

到这里,IAR编译环境就配置完成了。在main函数中使用sysinit()函数来配置时钟。注意还要包含sysinit.h文件。

最后要注意的是,如何代码中有使用中断的时候,要在vector.h中做出相应的修改,否则EnableInterrupt会失败,程序将不再能正常运行。

附件:示例工程文件

未经允许不得转载:TacuLee » K60项目开发的基础——IAR工程建立

赞 (1)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址