工程配置指南



下面以官方的评估板为例,建立一个简单的工程:s32k144evb


搭建开发环境


通过导入方式创建工程

下载工程

git clone --recursive https://gitee.com/xwos/s32k144evb.git
cd s32k144evb
unzip project-template.zip
  • 工程需要放在S32DS的工作目录内(即S32DS启动时指定的目录), 并按照上面的命令将“project-template.zip”解压到工程目录中, 这些文件为工程模板。

img

导入工程

打开菜单File --> Import... --> General --> Projects from Folder or Archive

img

导入后,S32DS会重新生成一次源代码,这会使得部分对SDK的修改被覆盖:

img

幸好我们使用git管理源码,可使用git命令将这这些文件找回:

cd s32k144evb
git checkout SDK/platform/devices/status.h
git checkout SDK/rtos/osif/osif.h

修改的这两个文件可使得玄武OS与S32K的SDK能更好地一起工作,但每次使用S32DS重新生成 代码时,这两个文件都会被覆盖。一劳永逸的方法是将这两个文件覆盖到S32DS的安装目录:

S32DS的安装目录\S32DS\software\S32SDK_S32K1xx_RTM_3.0.0\platform\devices\status.h
S32DS的安装目录\S32DS\software\S32SDK_S32K1xx_RTM_3.0.0\rtos\osif\osif.h

工程设置

文件编码设置

菜单 Project –> Properties –> Resource

img

编译设置

  • 菜单Project –> Properties
  • DebugRelease两个配置都需要增加:

img

img

环境变量设置

  • 菜单Project –> Properties –> C/C++ Build –> Environment
  • 点击Restore Defaults先恢复一次默认设置。
  • 设置:
    • WKSPC: ../../../${ConfigName}
    • ~V: 1
    • ~D: Debug配置为1Release配置为0
  • DebugRelease两个配置都需要增加。

img

img

设置系统搜索路径

  • 修改Debug和Release两个配置的PATH环境变量。

img

编译工程

img

调试

img

img

img

重启调试

调试过程可能需要复位系统,可以在右键菜单中选择Restart。

img


重新创建工程

若用户需要自定义工程名称,可通过新建工程的方式,方法: 打开菜单File –> New –> S32DS Application Project

img

img

新建工程后,S32DS的Processor Expert会自动生辰SDK代码,用户需要按照原理图进行配置 后重新生成代码,并将XuanWuOS目录放入工程内部,如图所示:

img

C/C++头文件路径设置

为了能正确地在源码间跳转,需要在IDE中增加头文件路径,但这不影响编译。

img

增加编译规则

S32K的SDK是以玄武模块中的OEM模块的形式集成到玄武OS中的。 有关玄武模块可以参考应用手册——构建系统

此处需要建立一个玄武模块文件夹:s32dslib,其中编译规则xwmo.mk内如如下:

# 引入配置
include $(XWOS_WKSPC_DIR)/XuanWuOS.cfg
include $(XWBS_UTIL_MK_XWMO)

# 增加.c源文件
# 函数$(call getAllFileUnderXwmoDir,*.c,xxx)表示查找xxx目录下的所有.c文件
XWMO_CSRCS :=
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/devices)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/devices/S32K144/startup)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/clock/S32K1xx)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/interrupt)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/pins)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/power)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/power/S32K1xx)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/wdog)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/edma)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/lpuart)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/lpspi)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../SDK/platform/drivers/src/flexcan)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../Generated_Code)
XWMO_CSRCS += ../SDK/rtos/osif/osif_xwos.c
XWMO_CSRCS += sdkac/weak/isr.c
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,xwac/xwds)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,xwac/xwos)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,xwac/isc)
XWMO_CSRCS += $(call getAllFileUnderXwmoDir,*.c,../app)
XWMO_CSRCS += init.c
XWMO_CSRCS += xwmo.c

# 定义编译选项
XWMO_CFLAGS :=
XWMO_CFLAGS += -DCPU_S32K144 -DCPU_S32K144HFT0VLLT -DTURN_ON_CPU0
XWMO_CFLAGS += -Wno-unused-parameter -Wno-error=sign-conversion

# 定义头文件路径
# 函数$(call getXwmoDir)表示获取当前玄武模块的路径
XWMO_INCDIRS :=
XWMO_INCDIRS += $(call getXwmoDir)/..
XWMO_INCDIRS += $(call getXwmoDir)/../Generated_Code
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/rtos/osif
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/drivers/inc
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/drivers/src/clock/S32K1xx
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/drivers/src/power/S32K1xx
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/devices
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/devices/common
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/devices/S32K144/include
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/devices/S32K144/startup

# 引入编译规则
include xwbs/$(XuanWuOS_CFG_XWMO_MK)

修改OEM模块的路径

  • 配置文件:XuanWuOS/xwbd/s32k144evb/cfg/XuanWuOS.h
  • 配置项:将XuanWuOS_CFG_OEMPATH配置为"..",表示OEM目录为 “相对于XuanWuOS目录的上级目录”。
#define XuanWuOS_CFG_OEMPATH                          ..

增加用户软件

下面以增加OEM模块为例,说明如何增加用户软件,假定模块名称为app:

  • 在工程的根目录下创建文件夹app;
  • 在文件夹app中增加源代码文件;
  • 在文件夹app中创建一个文件xwmo.mk,用于列举源代码文件以及一些编译选项:
# 引入配置
include $(XWOS_WKSPC_DIR)/XuanWuOS.cfg
include $(XWBS_UTIL_MK_XWMO)

# 增加.c源文件
XWMO_CSRCS :=
XWMO_CSRCS += src1.c src2.c

# 定义编译选项
# 下面例子中,增加了SDK所需要的宏定义
XWMO_CFLAGS :=
XWMO_CFLAGS += -DCPU_S32K144 -DCPU_S32K144HFT0VLLT -DTURN_ON_CPU0
XWMO_CFLAGS += -Wno-unused-parameter -Wno-error=sign-conversion

# 定义头文件路径
# 下面例子中,增加了SDK所需要的头文件路径
# 函数$(call getXwmoDir)表示获取当前玄武模块的路径
XWMO_INCDIRS :=
XWMO_INCDIRS += $(call getXwmoDir)
XWMO_INCDIRS += $(call getXwmoDir)/..
XWMO_INCDIRS += $(call getXwmoDir)/../Generated_Code
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/rtos/osif
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/drivers/inc
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/drivers/src/clock/S32K1xx
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/drivers/src/power/S32K1xx
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/devices
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/devices/common
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/devices/S32K144/include
XWMO_INCDIRS += $(call getXwmoDir)/../SDK/platform/devices/S32K144/startup

# 引入编译规则
include xwbs/$(XuanWuOS_CFG_XWMO_MK)
  • 在配置文件XuanWuOS/xwbd/s32k144evb/cfg/oem.h中增加定义:
#define OEMCFG_app  1

附录