文章目录
准备
需要准备以下三个工具
- Keil 5高版本MDK
下载地址:https://www.keil.com/demo/eval/arm.htm
- S32DS
下载地址:https://nxp.flexnetoperations.com/control/frse/download?agree=Accept&element=9671497
- S32K Keil_pack包
下载地址:https://keilpack.azureedge.net/pack/Keil.S32_SDK_DFP.1.2.0.pack
Keil和S32DS两个开发环境要安装好,移植S32K144工程需要利用S32DS导出工程文件复制到Keil中使用,需要安装Keil的pack包,让Keil支持S32K144芯片。
创建KEIL工程
打开Keil,点击Project
->New uVision Project
,创建一个新的Keil工程
输入你的工程名字,比如S32K144_Project
,点击保存
。
这时会弹窗让你选择工程的芯片,这里选择S32K144
,点击OK
。如果弹窗没出来,也可点击,选择Device
来重新打开芯片选择界面。
下一个弹窗我们勾选CORE
和Startup
两项,现在的S32DS例程选择这两个功能即可。如果没有弹窗,也可以点击重新打开选择界面
这时Keil的工程创建完毕,下一步通过S32DS导出所需工程的源码。
导出源码
打开S32DS,File
->New
->S32DS Project from Example
创建一个源码工程。
这里一定要选择最前面的S32DS Example Projects
里面的S32K144的例程,这里我选择的是最简单的hello_interrupt_s32k144
例程,点击Finish
。
这时例程创建出来了,现在将例程工程文件导出到指定的路径。鼠标指向hello_interrupts_s32k144
工程名鼠标右键,点击Export
,
选择File System
,点击Next
To directory
是工程导出的路径,点击Browse
可以修改,这里我导出到桌面,点击Finish
即导出成功。
进行移植
找到导出的工程,将src
文件夹中的所有源文件复制到刚刚新建的Keil工程下,我重新创建了一个SRC
文件夹统一放在了里面。
不同的工程这里的源文件数量不同,全部复制即可。
点击,把刚才复制的源文件包含进来,点击OK
,现在已经移植成功,但是编译会有一些错误,解决办法如下。
编译一下,出现找不到S32K144.h
的错误。
打开Device
中的system_S32K144.c
下的S32K144.h
,鼠标右键,Copy Full Path
复制头文件的所在路径。
点击,选择C/C++
,点击Include Paths
,将刚刚复制的路径粘贴进去,将后缀S32K144.h
删除掉,点击OK
。
再重新编译,下图代码出现下图的错误。
这里将代码改成如下即可。
这里的错误可能有可能没有,看Keil的ARM编译器版本,版本比较低就会出现错误,不支持括号里面直接输入二进制数值,需要改成十进制。
再重新编译,会发现还是有错误。这里是因为没有使用分散加载文件.sct
。
点击,选择Linker
,取消勾选Use Memory Layout from Target Debug
,选择RTE
文件夹下的S32K144_64_flash_AC6.sct
,点击Edit
之后,点击OK
。
这里需要修改S32K144_64_flash_AC6.sct
中第一行的代码,不然还是会编译错误,刚才点击Edit
已经打开了该文件,将下面的代码替换第一行代码,保存
。
#! armcc -E
再重新编译,发现编译成功。