跳转至

新工程创建

创建工程目录

新工程的创建可参考“project”目录下的已有工程。首先需要给工程起个有意义的名字,并以该名字作为工程目录。工程名字建议和项目相关,例如“storyteller”(故事机工程);不推荐采用不具备标识性的名字,例如“demo1”、“audio2”等。假设需要创建新工程“foo”(实际工程不建议采用这种命名),操作如下:

  1. 以“hello_demo”为模板,创建新工程“foo”(假设当前工作目录为SDK 根目录)
$ cp -r project/demo/hello_demo project/demo/foo

创建工程板级配置文件

由于不同项目方案的PCB 板设计都不一样,一般情况下,每个项目方案都需要创建自己的板级配置文件。板级配置文件的创建可参考“project/common/board/”目录下的XRADIO 开发板配置文件。

假设需要在新工程“foo”创建板级配置“bar_evb”,操作如下:

#以“project/common/board/xr806_dig_ver”为模板,创建板级配置“project/common/board/bar_evb”
# (假设当前工作目录为SDK 根目录)

$ cp -r project/common/board/xr806_dig_ver project/common/board/bar_evb

执行以上操作后,创建“project/common/board/bar_evb”目录,目录下包含“board_config.c”和“board_config.h”两个文件(所有的板级配置目录都必须包含这两个文件)。

由于从“project/common/board/xr806_dig_ver”复制的板级配置文件只适用于XRADIO 开发板,所以,必须根据实际的PCB 设计修改板级配置文件。

“board_config.c”和“board_config.h”共同定义了板级相关的配置信息,例如pinmux 配置、CPU 频率、AHB/APB 总线频率、UART 波特率等。最关键的是要修改“board_config.c”中的pinmux 配置,使之与PCB 设计相符。

创建工程链接脚本

工程默认镜像配置文件为“project/image_cfg/image.cfg”。新建工程一般需要实现本工程的镜像配置文件

  1. 工程默认镜像配置文件:“project/image_cfg/image.cfg”
  2. 其他工程创建镜像过程中产生的实际镜像配置文件:“project/[prj]/image/[chip]/.image.cfg”

修改工程defconfig

工程需要的配置选项在“project/[prj]/gcc/defconfig”中定义。具体工程需要根据项目方案需求,开启或禁用相关配置选项。例如,以下配置开启了xplayer、XIP、OTA(OTA 需要开启WLAN 功能)功能(某项配置默认开启,需要关闭时,通过“# CONFIG_PSRAM is not set”关闭)。

CONFIG_PROJECT="demo/foo"
CONFIG_BOARD="bar_evb"
CONFIG_XIP=y
# CONFIG_PSRAM is not set
CONFIG_XPLAYER=y
CONFIG_WLAN=y

修改工程Makefile

工程Makefile 位于“project/[prj]/gcc/Makefile”,主要用于指定工程的源文件、链接脚本、镜像配置文件等

一般需要修改的项包括:ROOT_PATH、PRJ_ROOT_PATH、SRCS、LINKER_SCRIPT、IMAGE_CFG。假设“project/demo/foo”工程的文件目录结构(假设芯片选择为XR806)如下:

project/demo/foo/
├── command.c
├── command.h
├── gcc
│ ├── appos.ld
│ ├── defconfig
│ └── Makefile
├── image
│ └── xr806
│ └── image.cfg
├── main.c
└── prj_config.h

“project/demo/foo/gcc/Makefile”中需要修改的变量如下:

# 定义SDK 根目录
ROOT_PATH := ../../../../..
# 定义工程根目录
PRJ_ROOT_PATH := $(ROOT_PATH)/project/$(PROJECT)
# 定义工程源文件,需要根据具体工程的源代码结构进行源代码指定
SRCS := $(basename $(foreach dir,$(DIRS),$(wildcard $(dir)/*.[csS])))
# 定义链接脚本
LINKER_SCRIPT := ./appos.ld
# 定义镜像配置文件
IMAGE_CFG := ./image.cfg

修改工程prj_config.h

工程“prj_config.h”定义本工程的功能选项配置值,可覆盖“project/common/prj_conf_opt.h”中的默认值。具体工程需要根据项目方案需求,重定义相关的功能选项。

所有可选的功能选项可参考“project/common/prj_conf_opt.h”中的注释描述。例如,以下代码将主线程栈设置为2KB,MAC 地址从EFUSE 获取,禁用看门狗超时复位功能:

#define PRJCONF_MAIN_THREAD_STACK_SIZE (2 * 1024)
/* MAC address source */
#define PRJCONF_MAC_ADDR_SOURCE SYSINFO_MAC_ADDR_EFUSE
/* watchdog enable/disable */
#define PRJCONF_WDG_EN 0

修改工程command.c

工程“command.c”定义了本工程可用的控制台命令。具体工程可根据需求增加或删除命令,SDK 支持的所有命令在“project/common/cmd/”目录下实现,用户也可以自定义新命令。