快速启动

开发准备

在开始之前,请准备下列软硬件:

硬件准备:

  • 一块移远通信提供的EG800Z_EVB开发板 (以下内容以该开发板为例);
  • USB数据线 (USB-A转USB-C);
  • PC (Windows 10)。

    软件准备:

    • UniRTOS:开发SDK。获取请联系技术与支持
    • unirtos-toolchain.exe:编译工具链安装程序,点此获取
    • QFlash.exe:模块固件烧录程序,用于烧录UniRTOS编译生成的固件,点此获取
    • USB驱动:用于 PC 识别模块的USB枚举口,点此获取
    • EPAT工具:芯片厂商提供的日志捕获工具,用于查看模块运行日志以分析应用程序执行情况,点此获取
    • QCOM工具:移远通信提供的COM口工具程序,用于执行和验证AT命令,点此获取

    安装编译环境

    • 安装编译程序
    • 配置环境变量

    安装程序

    1.双击unirtos-toolchain.exe执行安装程序,提示申请管理员权限时,点击“同意”。

    2.根据提示选择解压目录,默认为D:\unirtos-toolchain,用户可根据需要自定义安装目录。解压后文件约占4.3GB空间,请确保磁盘空间充足。

    3.解压完成后,命令行窗口将自动弹出并执行编译环境的解压安装,如下图所示:

    4.解压完成后,目录结构如下,包含CMakeNinjaPython 3.8GCC编译工具。

    添加系统环境变量

    unirtos-toolchain工具链路径添加到系统环境变量Path中。例如,若工具链安装在默认路径D:\unirtos-toolchain下,添加D:\unirtos-toolchain\bin
    进入Windows系统设置界面(以Windows 10为例),按照下图所示配置Path环境变量:
    新建命令行窗口,输入unirtos.exe --version检查版本信息。若成功显示版本信息,则表示编译环境安装完成。

    编译工程

    完成编译环境和相关软件安装后,打开移远通信提供的UniRTOS SDK文件夹。以下为SDK根目录结构:

    目录结构说明:
    ├─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 可裁剪宏控选项配置文件
    

    编译说明如下:

    1. 修改buildopt.ini文件,例如编译生成EG800ZCN_LA型号固件。此文件用于为buildlib_unirtos.bat提供编译参数:
    参数说明:
    [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的型号

    2. 新建命令行窗口,切换到SDK工程目录,命令行执行.\buildlib_unirtos.bat进行编译。若固件编译成功,则输出下图所示日志。如需使用命令行编译,请先阅读buildlib_unirtos.bat脚本中的内容,基于规则手动构造编译命令。

    3. 编译生成物位于qos_build/release目录下。

    新增Demo

    新增HelloWorld demo

    1. qos_applications/apps目录下新建hello_world文件夹,并创建CMakeLists.txthello_world.c文件:
    hello_world:
    ├── CMakeLists.txt
    └── hello_world.c
    
    1. 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);                              // 任务参数
        }
    }
    
    1. 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)
    
    1. 若不涉及功能裁剪,可跳过步骤4~9。 添加宏控需符合Kconfig语法及CMake规则。修改 qos_applications/apps/Kconfig 文件,添加:
    config QAPP_HELLO_WORLD_DEMO_FUNC
        bool "Enable hello world demo"
        default n
    
    1. 修改qos_applications/apps/CMakeLists.txt文件,添加:
    if(CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC)
        add_subdirectory_if_exist(hello_world)
    endif()
    
    1. 修改qos_applications/apps/include/unirtos_apps_config.h.in文件,添加:
    /**
     * Hello world demo config define
     */
    #cmakedefine CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC
    
    1. 修改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 */
    }
    
    1. 修改根目录下target.config文件,添加:
    CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC=y
    
    1. 修改根目录下show_view.cmake文件,添加:
    # Customer apps
    message("\nCustomer Apps")
    message(STATUS "CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC ------------------------- ${CONFIG_QAPP_HELLO_WORLD_DEMO_FUNC}")
    
    1. 执行.\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”查看日志输出:

    4. 点击“Database state”,选择数据库文件,匹配日志数据库:
    5. 选qos_build\release自定义版本文件夹下的DBG/comdb.txt文件,点击“Update”:
    6. 在UniLogViewer”选项卡,点击“Stop”停止日志记录:

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

    沟通无界,服务无限

    了解更多关于移远公司、产品和技术支持的信息。