Helios SDK开发指南__入门应用代码编写

应用代码编写#

  • 理论上,可在SDK目录下的任意位置新建应用代码文件。
  • 实际上,为了规范起见,建议在SDK的根目录下新建应用代码文件夹。
  • 功能的单元测试代码,建议放置于功能所在目录下的testdemo文件夹。
  • SDK建议使用微软的VSCode打开,移远后续将推出针对VSCode的易用插件,敬请期待。

以SDK根目录下的sample为例:

步骤一:新建应用代码文件夹

在SDK根目录下新建sample文件夹。

步骤二:创建应用代码源文件

进入sample文件夹,新建文件sample.c

步骤三:编写应用代码

  • 打开sample.c

  • 包含头文件

sample.c仅需要包含最基本的头文件,即helios.hhelios_debug.hhelios_os.h
helios.h目前定义了添加自启动项的接口。
helios_debug.h定义了日志打印的相关接口。
helios_os.h定义了多线程相关接口。

包含头文件的代码如下所示:

复制代码
#include "helios.h"
#include "helios_debug.h"
#include "helios_os.h"
  • 自定义日志打印接口

日志打印接口说明:

helios_debug.h提供了如下日志打印相关的接口:
void Helios_Debug_Enable(void):使能日志打印功能。
void Helios_Debug_Disable(void):关闭日志打印功能。
helios_debug(fmt, ...):通用日志输出接口。
custom_log(tag, fmt, ...):可自定义标签的日志输出接口,标签会连同日志一起输出。

默认使能日志打印功能。

sample.c中定义自定义标签的日志输出接口,标签名称为APP,代码如下所示:

复制代码
#define app_debug(fmt, ...) custom_log(APP, fmt, ##__VA_ARGS__) // custom_log在helios_debug.h中定义
  • 实现应用功能

sample.c中实现每一秒钟循环打印一次日志的功能,代码如下所示:

复制代码
static void AppSample(void *argv)
{
    UNUSED(argv); // 在helios.h中定义

    while (1)
    {
        app_debug("app sample running ...\r\n"); // 自定义的带标签的日志输出
        Helios_sleep(1); // 在helios_os.h中定义
    }
}
  • 添加为自启动项

编写完应用功能代码后,调用以下接口,会在系统启动完成后,自动启动应用功能:

复制代码
application_init(AppSample, "AppSample", 2, 0); // 在helios.h中定义

application_init接口用法说明

定义:application_init(entry, name, stack_size_kib, startup_prio)

参数:entry - 应用代码入口地址

参数:name - 应用名称

参数:stack_size_kib - 应用线程栈大小,以KB(K字节)为单位

参数:startup_prio - 启动优先级,0表示最高优先级

步骤四:编写编译管控脚本

  • 新建mk脚本文件

在应用代码根目录下(本例为sample目录下)新建和应用代码根目录同名的.mk文件,本例新建文件为sample.mk

  • 编写mk脚本文件

编译管控脚本的详细写法可参考SDK根目录下的README.MD,此处仅针对sample.c做阐述。

复制代码
NAME := SAMPLE # 组件名称,建议和组件根目录名称一致,全部大写

$(NAME)_SRCS := sample.c # 添加需要编译的源码的相对路径(相对于组件代码根目录,此处相对于sample目录)

$(NAME)_INCS := . # 仅组件内部可引用的头文件相对路径(相对于组件代码根目录,此处相对于sample目录,其实sample下无头文件,此行可删除)

$(NAME)_COMPONENTS := # 当前组件依赖的其他组件相对路径(相对于SDK根目录,置空时可删除此行)

至此,应用代码编写完毕。

编译和烧录#

步骤一:查看编译命令用法

在SDK目录下启动的命令行中,键入helios,并回车,查看helios命令的用法。

输出结果如下:

复制代码
Usage: helios <action> [<app>] [<at>] [<fw_name>]

These are common commands used in various situations:
   menuconfig                       - Do the project configuration
   make <app> [[<at>] [<fw_name>]]  - Do the compilation work
   private_clean                    - Clean the app private target
   clean                            - Clean the output directory
   git [<args>]                     - Git commands execution
   help                             - Show this help page

编译命令的详细用法参考SDK根目录下的README.MD

步骤二:编译固件

以EC600SCN_LB模块为例,在命令行中键入以下命令,并回车:

复制代码
helios make sample @EC600SCN_LB EC600SCNLBR01A01M08
  • helios:触发编译流程。
  • make:表示编译固件。
  • sample:应用入口地址(相对于SDK根目录)。
  • @EC600SCN_LB:指定目标模块型号,可缺省,缺省值为@EC200UCN_AA
  • EC600SCNLBR01A01M08:固件版本号名称,可缺省,以指定的应用代码的根目录名称作为缺省值。

如需清除编译目标,在命令行中键入以下命令,并回车:

复制代码
helios clean

步骤三:查看编译目标

生成的固件包存储于SDK根目录下的output/release文件夹中,如下图所示。

步骤四:烧录固件

固件烧录请参考《Quectel_QFlash_用户指导》。

功能测试#

步骤一:连接PC和模块

用串口线缆将模块的Debug串口和PC连接。

步骤二:查看PC端的Debug串口号

打开PC的设备管理器,如下图,本实验的Debug串口号为COM20。

步骤三:打开PC端的串口调试工具

本文以SecureCRT为例,点击下图的快速连接按钮,弹出Quick Connect窗口。

点击Port选项的下拉菜单,选中COM20,其余参数严格遵照图中的配置即可。

点击右下角Connect按钮即可打开串口。

步骤四:启动模块程序

复位模块,启动程序

步骤五:查看模块运行日志

在SecureCRT的串口数据接收区查看运行日志,如下图:

上图可看出,日志输出的格式包含了自定义标签APP、输出日志的函数名AppSample、输出日志的文件行数L29,及日志内容app sample running ...

相关推荐
今天AI了吗5 分钟前
Hermes Agent 搭建全流程:从本机试跑到可持续运行的个人 AI Agent
java·人工智能·python·学习·embedding
为啥全要学1 小时前
自注意力中随着根号dk的增大,qk点积的方差为什么也会增大
python·深度学习
来两个炸鸡腿2 小时前
【Datawhale2607】llm-algo-leetcode task02 基础算子
人工智能·python·大模型
庵中十三居士2 小时前
【纯AI无人工修改】AI Agent从0到1实战:50行Python手写核心循环,一次看懂所有Agent框架的底层逻辑
开发语言·人工智能·python
有同事要进步2 小时前
python常见问题--2
开发语言·python
天天爱吃肉82182 小时前
# 商用车多体动力学整车仿真学习笔记(开篇总览)
人工智能·笔记·python·功能测试·学习·汽车
Allen说改装2 小时前
2025 APAxpo佛山改装展的展出规模达到了多少平方米?
人工智能·python
Leinwin3 小时前
GPT-5.6 提示词编写范式重构:从“保姆式指令“到“四要素框架“的工程实践
后端·python·flask
aqi003 小时前
15天学会AI应用开发(十四)搭建LangChain的开发环境
人工智能·python·大模型·ai编程·ai应用