开发准备
在开始之前,请准备下列软硬件:
硬件准备:
- 一块移远通信提供的EG800Z_EVB开发板 (以下内容以该开发板为例);
- USB数据线 (USB-A转USB-C);
- PC (Windows 10)。
软件准备:
安装编译环境
- 安装编译程序
- 配置环境变量
安装程序
1.双击unirtos-toolchain.exe执行安装程序,提示申请管理员权限时,点击“同意”。

2.根据提示选择解压目录,默认为D:\unirtos-toolchain,用户可根据需要自定义安装目录。解压后文件约占4.3GB空间,请确保磁盘空间充足。
3.解压完成后,命令行窗口将自动弹出并执行编译环境的解压安装,如下图所示:
4.解压完成后,目录结构如下,包含CMake、Ninja、Python 3.8和GCC编译工具。
添加系统环境变量



编译工程

├─cmake // CMake 相关配置文件 ├─qos_applications // 存放所有 demo 程序 ├─qos_build // 编译生成的物与中间产物文件夹 │ ├─build // App工程构建编译生成的中间产物文件夹 │ ├─gccout // Kernel 编译生成的中间产物文件夹 │ └─release // 最终生成用户可烧录固件包文件夹 ├─qos_components // 对应平台侧提供的相关能力的头文件 ├─qos_kernel // 对应存放 kernel 平台相关工程 └─qos_tools // 编译及调试工具 buildlib.bat // Windows 编译脚本命令行编译入口 buildlib_unirtos.bat // Windows 环境一键编译配置脚本 buildopt.ini // 控制编译模块型号信息配置文件,配合buildlib_unirtos.bat脚本使用 CMakeLists.txt // UniRTOS 编译的主 CMake 工程文件 Kconfig // 管理宏控依赖及约束条件 main.py // UniRTOS 编译控制 Python 脚本 show_view.cmake // 在命令行显示功能宏控信息 target.config // CSDK 可裁剪宏控选项配置文件
编译说明如下:
[buildopt] build_type=all build_operation=new build_project=EG800ZCN_LA build_version=EG800ZCNLAR01A01M04_OCPU build_subver=V01 build_qinf=FFF build_certver=EG800ZCNLAR01A01M04_OCPU build_svn=01 build_modemapp=01.001 build_oem= [end]
| 参数 | 参数说明 |
|
build_type
|
all:同时编译Kernel与App
app:仅编译App侧
必须先编译一次Kernel才可独立编译App
|
|
build_operation
|
new:全部重新编译
r:追加编译,只编译改动的文件
|
|
build_project
|
对应SDK所支持的模块型号,如“EC800ZCN_LF”
|
|
build_version
|
对应客户自定义的版本名称信息
|
|
build_subver
|
固件子版本号,通常以“V”开头(如V01、V02)
|
|
build_qinf
|
qinf型号信息
|
|
build_certver
|
版本QGMR信息
|
|
build_svn
|
SVN信息
|
|
build_modemapp
|
版本App号
|
|
build_oem
|
定义OEM的型号
|

3. 编译生成物位于qos_build/release目录下。
新增Demo
新增HelloWorld demo
-
在qos_applications/apps目录下新建hello_world文件夹,并创建CMakeLists.txt和hello_world.c文件:
hello_world: ├── CMakeLists.txt └── hello_world.c
-
在hello_world.c文件中添加以下代码:
// QOSA 系统核心定义头文件
#include "qosa_def.h"
// 包含 QOSA 系统 API 头文件
#include "qosa_sys.h"
// 包含 QOSA 日志系统头文件
#include "qosa_log.h"
// 定义Log日志信息
#define QOS_LOG_TAG LOG_TAG_DEMO
// 定义 hello world 任务的栈大小为 1024 字节
#define UniRTOS_HELLO_WORLD_DEMO_TASK_STACK_SIZE 1024
// 定义 hello world 任务优先级为正常优先级
#define UniRTOS_HELLO_WORLD_DEMO_TASK_PRIO QOSA_PRIORITY_NORMAL
// 声明全局任务句柄,初始化为空
static qosa_task_t g_quec_hello_world_demo_task = QOSA_NULL;
// 定义 hello world 任务的主处理函数
static void quec_hello_world_demo_process(void *ctx)
{
// 初始化计数器
int hello_world_cnt = 0;
// 无限循环
while (1)
{
// 打印详细日志,显示当前计数值
QLOGV("hello world count=%d", hello_world_cnt++);
// 任务休眠 1000 毫秒(1 秒)
qosa_task_sleep_ms(1000);
}
}
// 初始化 hello world demo 的函数
void quec_hello_word_init(void)
{
// 打印详细日志,表示进入 hello world demo
QLOGV("enter hello world DEMO !!!");
// 检查任务是否尚未创建
if (g_quec_hello_world_demo_task == QOSA_NULL)
{
// 创建 hello world 任务
qosa_task_create(
&g_quec_hello_world_demo_task, // 任务句柄指针
UniRTOS_HELLO_WORLD_DEMO_TASK_STACK_SIZE, // 任务栈大小
UniRTOS_HELLO_WORLD_DEMO_TASK_PRIO, // 任务优先级
"hello_world_demo", // 任务名称
quec_hello_world_demo_process, // 任务处理函数
QOSA_NULL); // 任务参数
}
}
- 在CMakeLists.txt文件中添加以下代码:
# 打印当前源码目录配置信息
message(STATUS "cmake config ${CMAKE_CURRENT_SOURCE_DIR}")
# 设置目标名称
set(target hello_world)
# 添加目标文件到应用程序库列表
add_apps_libraries($<TARGET_FILE:${target}>)
# 添加静态库目标
add_library(${target} STATIC)
# 设置目标的归档输出目录
set_target_properties(${target} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${out_unir_lib_dir})
# 添加私有包含目录
target_include_directories(${target} PRIVATE
${SOURCE_TOP_DIR}
${SOURCE_SYS_DEBUG_DIR}
${SOURCE_SYS_OS_DIR}
${SOURCE_COMPONENTS_PUBLIC_INC})
# 添加公共包含目录
target_include_directories(${target} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
# 添加源文件
target_sources(${target} PRIVATE
hello_world.c
)
# 条件链接 system_os 库
target_link_libraries_if(CONFIG_QOSA_LINK_SYSTEM_LIBRARIES_FUNC THEN ${target} system_os)
-
若不涉及功能裁剪,可跳过步骤4~9。 添加宏控需符合Kconfig语法及CMake规则。修改 qos_applications/apps/Kconfig 文件,添加:
config QAPP_HELLO_WORLD_DEMO_FUNC
bool "Enable hello world demo"
default n
-
修改qos_applications/apps/CMakeLists.txt文件,添加:
if(CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC)
add_subdirectory_if_exist(hello_world)
endif()
-
修改qos_applications/apps/include/unirtos_apps_config.h.in文件,添加:
/** * Hello world demo config define */ #cmakedefine CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC
-
修改qos_applications/apps/app_init/app_init.c文件,添加:
#ifdef CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC
extern void quec_hello_word_init(void);
#endif /* CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC */
void apps_init(void)
{
#ifdef CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC
quec_hello_word_init();
#endif /* CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC */
}
-
修改根目录下target.config文件,添加:
CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC=y
-
修改根目录下show_view.cmake文件,添加:
# Customer apps
message("\nCustomer Apps")
message(STATUS "CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC ------------------------- ${CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC}")
-
执行.\buildlib_unirtos.bat编译工程,检查日志确认宏控CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC已启用:

编译成功日志显示:

固件烧录
- 开发板连接
- QFlash烧录固件
硬件连接
以EG800Z-CN开发板为例:
1. 使用USB数据线连接开发板与电脑。

2. 长按powerkey开机,同时短接boot引脚(EG800Z-CN开发板boot测试点位于背面)。

3. 打开设备管理器查看下载端口号。

QFlash烧录
打开烧录工具QFlash,若未安装,请前往下载专区进行下载。
1. 点击 "Load FW Files",加载需要烧录的固件。

2. 选择编译或下载完成的固件。

3. 选择上一栏"开发板连接"结尾查询的下载端口,并点击"Start"开始烧录固件。

4. 等待出现"PASS"字样,表示固件烧录完成。

日志查看
查看程序运行日志
不同平台查看日志使用的工具不同,以EG800Z为例,EG800Z属于移芯平台,查看日志使用EPAT工具,若未安装请前往下载专区下载安装。
1.打开EPAT工具,选择“Serial Device”并点击“OK”:

2. 点击“Device Communication”,选择串口设备并点击“打开”:

3. 选择设备管理器中的Quectel USB DIAG Port COM通道,点击“OK”查看日志输出:




7. 使用“Ctrl+F”搜索“hello world”,点击“Find Previous”查看hello world程序日志:
