Hi3863 第一个程序 Hello World

环境搭建好以后,开始写第一个程序。

首先看一下源码目录

docs文档目录,里面有详细的操作说明。

vendor是第三方提供的例子,有小熊派,润和,他们提供的代码质量非常高,搞不懂的时候可以到这里看看。

src源码目录。

源码目录说明:

目录名说明
application应用层代码(其中包含demo程序为参考示例)。
bootloaderboot(Flashboot/SSB)代码。
buildSDK构建所需的脚本、配置文件。
drivers驱动代码。
includeAPI头文件存放目录。
interim_binary库存放目录。
kernel内核代码和OS接口适配层代码。
libs_url库文件。
middleware中间件代码。
open_source开源代码。
protocolWiFi、BT、Radar等组件代码。
testtestsuite代码。
tools包含编译工具链(包括linux和windows)、镜像打包脚本、NV制作工具和签名脚本等。
output编译时生成的目标文件与中间文件(包括库文件、打印log、生成的二进制文件等)。
config.inKconfig配置文件。
CMakeLists.txtCmake工程顶层“CMakeLists.txt”文件。
build.py编译入口脚本。

开始可以先看看根目录下的 这个3个编译文件,build, build.py, CMakeLists.txt ,能大概了解编译过程。

默认设置我们开发的代码放到 \application\samples 这个目录下,就不做任何系统上的设置了。

代码编译配置,要使用CMake这个编译工具,CMake 是 Make 的辅助工具 ,Make下通过Kconfig文件实现图形化配置。说起来挺绕,如果是新手有点懵,老程序员这些都很熟悉,没用过也听过。站里有很多教程贴,看看跟着做点简单的配置也不难。

先写代码,最后配置。

我习惯建一个属于自己的开发目录,所以先建一个文件夹 \application\samples\hi3863,文件夹的名就叫hi3863。说到命名没太懂,海思网站说是hi3863,源码下命名是ws63,按惯例习惯用数字编号,所以我一直默认使用 hi3863这个名字。

在hi3861下再建一个hello目录,放代码。完整路径是 \application\samples\hi3863\hello 。

代码先不用自己写,到 \application\samples\peripheral\tasks 复制一个例子代码过来。

看一下代码


#include "common_def.h"
#include "soc_osal.h"
#include "app_init.h"

#define TASKS_TEST_DURATION_MS        5000
#define TASKS_TEST_TASK_PRIO          24            // 线程优先级
#define TASKS_TEST_TASK_STACK_SIZE    0x1000        // 任务大小

// 任务
static void *tasks_test_task(const char *arg)
{
    unused(arg);

    // 1个死循环
    while (1)
    {
        // 间隔 一段 时间 ,[osal_msleep] 间隔单位 毫秒
        osal_msleep(TASKS_TEST_DURATION_MS);
        // 通过串口 输出 一行文字 
        osal_printk("Hello BS25, Now you can develop SLE Product!\r\n");
    }

    return NULL;
}

// 线程
static void tasks_test_entry(void)
{
    osal_task *task_handle = NULL;

    // 锁定任务调度
    osal_kthread_lock();
    
    // [osal_kthread_create] 函数 :加载任务,并调用 kthread_run 创建内核线程 ,线程名叫 "TasksTask" ,并返回1个描述线程的指针对象
    task_handle = osal_kthread_create((osal_kthread_handler)tasks_test_task, 0, "TasksTask", TASKS_TEST_TASK_STACK_SIZE);

    // 如果返回不为空 即 创建成功
    if (task_handle != NULL)
    {
        // 设置线程的优先级
        osal_kthread_set_priority(task_handle, TASKS_TEST_TASK_PRIO);

        // 至此线程指针使命完成 , 释放线程指针所占用的内存
        osal_kfree(task_handle);
    }

    // 解锁任务调度
    osal_kthread_unlock();
}

// 加载到系统运行
app_run(tasks_test_entry);

对代码读一遍,逐行解读做注释。一个最简单过程就是,先写一个 任务(task) , 再写一个线程 (handle) ,把任务加载到 线程里(handle)里,最后 添加到 系统运行里。

代码确定,开始做编译配置。

看一下 \application\samples 目录下的 CMakeLists.txt ,Kconfig 这2个文件。 这个2个文件本质上都是辅助 Make 编译,简化配置过程。CMakeLists 简化 Make 引导 编译器,顺着目录找到要编译的文件,Kconfig 辅助 Make 配置编译内核,通过图形界面的方式,如果是命令行的话,就有点难用。

点开编辑器菜单条上的 系统配置项目。然后显示:

默认,\application\samples 目录下的编译项,显示有这写。我们自己写的hello不在这里,下面就是要把我们写的代码路径添加进去。

第一步,修改 \application\samples\Kconfig, 在文件末尾添加:

# 项目名
config ENABLE_HI3863_APP
    # 是选择项
    bool
    # 显示项
    prompt "Enable the hi3863 app."
    # 默认 无
    default n
    # 上级依赖
    depends on SAMPLE_ENABLE
    # 帮助说明
    help
        This option means enable hi3863 app.
# 需要 访问的 Kconfig 文件路径
if ENABLE_HI3863_APP
osource "application/samples/hi3863/Kconfig"
endif

让配置菜单 显示 hi3863 目录的选项,以及指定 hi3861下的 菜单项文件。

在 \application\samples\CMakeLists.txt 文件里添加编译目录

if(DEFINED CONFIG_ENABLE_HI3863_APP)
    add_subdirectory_if_exist(hi3863)
endif()

编译目录的位置在下一级目录的 hi3863 下。

第二步,到hi3861目录下,建 CMakeLists.txt ,Kconfig 2个配置文件。

Kconfig 内容为

config HI3863_HELLO
    bool
    prompt "Enable the hi3863 hello app."
    default n
    help
        This option means enable the hi3863 hello app.

菜单显示的编译项。

CMakeLists.txt 内容为

if(DEFINED CONFIG_HI3863_HELLO)
    add_subdirectory_if_exist(hello)
endif()

set(SOURCES "${SOURCES}" PARENT_SCOPE)

说明编译的hello的代码目录。

第三步,到 hello目录下,建 CMakeLists.txt ,内容为

set(SOURCES_LIST
    ${CMAKE_CURRENT_SOURCE_DIR}/main.c
)

set(PUBLIC_HEADER_LIST
    ${CMAKE_CURRENT_SOURCE_DIR}
)

set(SOURCES "${SOURCES_LIST}" PARENT_SCOPE)
set(PUBLIC_HEADER "${PUBLIC_HEADER_LIST}" PARENT_SCOPE)

说明头文件 ,源文件。

OK 配置完成。

看一下完整的文件结构

再点开编辑器菜单条上的 系统配置项目。

这个时候就显示 有 hello 项了,选择后,点上面 “Save”按钮,然后关闭。这里Make的编译核心就设置好了。

然后点击菜单条上的 重新编译项,然后编辑器下方就会显示编译进度。

如果编译成功,就会显示

如果编译失败,就是点开左侧 build.log 文件,这个是编译日志,里面有错误提示信息,根据提示修改代码再编译,直到提示成功。

编译成功以后,将单片机连接电脑,一般情况下win10会自动安装驱动程序,如果没有的话,就下载一个CH341SER程序安装一下。

在我的电脑上点右键,打开 设备管理器,查看单片机被分配的端口号是多少。

我被分配的是COM4 。

然后点击菜单条上的工程配置菜单项,进行烧录端口的设置。

下滑到“传输方式”,然后在右侧端口项下选择你的单片机的通讯端口号。

一切就绪,开始烧录程序,点击菜单条上的程序加载项。

提示 “Connecting, please reset device..”,就按下单片机的重启键,然后就开始烧录了,然后等待烧录结束。

烧录完毕以后,打开一个你喜欢的串口通讯工具,打开端口后,重启单片机,显示结果。

然后显示,500毫秒打印一行信息,第一个程序到此开发完成。

下一步上点强度,写WiFi连接,实现Mqtt物联网通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值