在星闪W63/W63E开发板上运行第一个OpenHarmony程序

目录

引言

demolink示例

程序修改

修改任务堆栈的大小

修改示例程序的build.gn

修改App的build.gn

修改ohos.cmake

修改config.py

编译程序

烧写程序

程序运行

结语


引言

在前面的博文星闪WS63E开发板的OpenHarmony环境构建-CSDN博客中介绍了如何构建W63E开发板的OpenHarmony环境,今天来尝试运行第一个程序。考虑到有很多朋友以前使用过hi3861系统,所以我主要说明两者在OpenHarmony下的区别。如果以前从来没有使用OpenHarmony开发过轻量级开发板,建议先从hi3861学起。

demolink示例

星闪OpenHarmony SDK里面带的例子其实都是hi3861的,毕竟hi3861是主线支持的芯片。这些例子在星闪派上运行要稍加修改才行。我测试的例子是applications/sample/wifi-iot/app/demolink。demolink这个例子的作用是打印hello world,不依赖I/O,所以最为简单。其基本流程如下图显示。

程序修改

要运行示例程序需要以下5个步骤,其中第2和第3步与hi3861一致,后两个是星闪SDK独有的。

修改任务堆栈的大小

修改applications/sample/wifi-iot/app/demolink/demosdk.c中的任务堆栈大小,由1000改为4000。1000这个大小在WS63上会导致无法创建任务。

//#define TASK_STACK_SIZE 1000
#define TASK_STACK_SIZE 4096

修改示例程序的build.gn

修改applications/sample/wifi-iot/app/demolink/BUILD.gn,将其static_library的名字和目录名一致,这步不是必须,但是修改后对后序处理有利。

static_library("demolink") {
  sources = [
    "demosdk.c",
    "demosdk_adapter.c",
    "helloworld.c",
  ]

  include_dirs = [ "//commonlibrary/utils_lite/include" ]
}

修改App的build.gn

修改applications/sample/wifi-iot/app/BUILD.gn,其默认的startup实际上什么也不做,此处加上demolink例子。

import("//build/lite/config/component/lite_component.gni")

lite_component("app") {
  features = [ "demolink:demolink" ]
}

修改ohos.cmake

修改device/soc/hisilicon/ws63v100/sdk/libs_url/ws63/cmake/ohos.cmake文件(老版本的SDK为device\soc\hisilicon\ws63v100\sdkv100\libs_url\ws63\cmake\ohos.cmake),添加 `"demolink"`,如下:

elseif(${TARGET_COMMAND} MATCHES "ws63-liteos-app")
set(COMPONENT_LIST

        "begetutil"   "hilog_lite_static" "samgr_adapter" "bootstrap" "fsmanager_static" "hal_update_static" "hilog_static" "inithook"   "samgr_source"
        "broadcast" "hal_file_static"   "init_log"  "native_file" "udidcomm"
        "cjson_static" "hal_sys_param" "hichainsdk" "hota" "init_utils"  "param_client_lite"
        "hiview_lite_static" "hal_sysparam" "hievent_lite_static" "huks_3.0_sdk"   "samgr" "blackbox_lite" "hal_iothardware" "wifiservice"
        "hidumper_mini" "ble_lite"  "sle_lite" "demolink")
endif()

修改config.py

修改device/soc/hisilicon/ws63v100/sdk/build/config/target_config/ws63/config.py(老版本为device\soc\hisilicon\ws63v100\sdkv100\libs_url\ws63\cmake\ohos.cmake),加入“demolink":

       'ws63-liteos-app': {
        'base_target_name': 'target_ws63_app_rom_template',
        'os': 'liteos',
        'defines': [
            ......
        ],
        'ram_component': [
            .......
            'xo_trim_port',
            "mqtt",
            'printf_adapt', 
            "demolink"
        ],
        'ccflags': [
            "-DBOARD_ASIC", '-DPRE_ASIC',
        ],
        'application': 'application',
        'bin_name': 'ws63-liteos-app',
        'smaller': True,
        'hso_enable_bt': True,
        'hso_enable': True,
        'codesize_statistic': True,
        'nv_update':True,
        'generate_efuse_bin': True,
        'copy_files_to_interim': True

此处除了demolink, 还加上了printf_adapt。后者是确保printf会被转向到串口输出。海思的SDK默认是ws63-liteos-xts有printf_adapt,而ws63-liteos-app没有,这导致我最开始的程序啥也不输出,走了弯路。

编译程序

修改过这4个地方之后,就可以使用hb build -f命令进行编译了。如果想先clean再build,可以使用hb clean --clean-all或者hb clean --clean-out-product。如果以前用过hi3861开发的都应该有经验,如果不clean就build,可能会吧以前编译过的模块加进来,导致程序不正常。

烧写程序

可以使用官方的burntool软件(tools · HiHopeORG/NearLink - 码云 - 开源中国)在Windows下烧写程序。

烧写前需要选择菜单“Option|Change chip”将芯片类型改为WS63。

剩下的设置参见下图:

点击Connect按钮后,再按下板子上的reset键就可以下载程序了。 

如果希望在Linux下进行烧写,可以使用网友开发的软件:GitHub - geekheart/xf_burn_tools: ws63 automatic burning softwareicon-default.png?t=O83Ahttps://github.com/geekheart/xf_burn_tools

程序运行

再次按下reset重启开发板,就可以运行程序了,下面是串口打印输出,可以从中看到我们想要的那两句打印信息。


boot.
Flash Init Fail! ret = 0x80001341
verify_public_rootkey secure verify disable!
verify_params_key_area secure verify disable!
verify_params_area_info secure verify disable!
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
SSB Uart Init Succ!
SSB Flash Init Succ!
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
Flashboot Uart Init Succ!
Flashboot Malloc Init Succ!
Flash Init Succ!
No need to fix SR!
flashboot version : 1.10.101
[UPG] upgrade init OK!
No need to upgrade...
flash_encrypt disable.
verify_image_key_area secure verify disable!
verify_image_code_info secure verify disable!
APP|Debug uart init succ.
[UPG] upgrade init OK!
APP|init_dev_addr, mac_addr:0xab,0x 0,0x73,0xbc,0x**,0x**,
xo_trim_temp_comp val:0 0
[osal_irq_request:57]:LOS_HwiCreate failed! irq[53] ret = 0x2000904.
                                                                    APP|AT uart init succ.
los_at_plt_cmd_register EXCUTE
[osal_msg_queue_create:25]:qName:dfx_msg qID=0x0
APP|=========FS MOUNT=========
LFS [E]:fs init failed, ret = 0xffffffff
LFS [E]:lfs_format failed, ret = -28
LFS [E]:lfs_mount failed, ret = -84
APP|=========FS READY=========
APP|WARNING: main_initialise::thread[11] func is null
hilog will init.

                hievent will init.

                                  hievent init success.
                                                       LFS [E]:lfs_file_open failed, ret = -2147483647, name = tmp_persist_parameters
LFS [E]:lfs_file_open failed, ret = -2147483647, name = persist_parameters
LFS [E]:lfs_file_open failed, ret = -2147483647, name = persist_parameters
Please implement the interface according to the platform!
                                                         it is demosdk entry.
                                                                             cpu 0 entering scheduler
                                                                                                     [osal_msg_queue_create:25]:qName:BthChannel qID=0x4
[osal_msg_queue_create:25]:qName:BtcChannel qID=0x5
[osal_msg_queue_create:25]:qName:BthChannel qID=0x6
[osal_msg_queue_create:25]:qName:BtcChannel qID=0x7
[osal_irq_request:57]:LOS_HwiCreate failed! irq[46] ret = 0x2000904.
                                                                    APP|btc open
hiview init success.
                    it is demo biz: hello world.
                                                [RADAR_LOG] alg ctrl read from nv [1][2][0][0][1][1][20]
[osal_kthread_set_priority:59]:parameter invalid!
                                                 [osal_kthread_set_priority:59]:parameter invalid!
                                                                                                  device_main_init: 0!
===hal_initialize_phy===225===
device_module_init:: succ!
cali_set_cali_mask:old[0x0] -> new[0x1fa2]

fe_rf_initialize
cali_offline_cali_entry enter
cali_set_cali_done_flag:old[0x0] -> new[0x1]

rf cali OK. time cost:23, ret:0

结语

虽然为WS63开发板所使用的hi3863芯片和hi3861非常相似,但是两者的OpenHarmony SDK还是有很多不同,结果一番折腾,也算是让程序运行起来了。后面有时间的话,就给大家多演示几个例子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934294.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring——@Autowired和@Configuration注解区别

摘要 本文主要介绍了Spring框架中Autowired和Configuration注解的区别。Autowired用于自动注入依赖,支持属性、构造器和方法注入。Configuration则用于定义配置类,允许在类中使用Bean注解声明Bean。文章详细解释了这两个注解的作用、使用场景和核心特性…

机器学习--张量

机器学习–张量 机器学习的数据结构–张量 张量是机器学习程序中的数字容器,本质上就是各种不同维度的数组,如下图所示。 张量的维度称为轴(axis),轴的个数称为阶(rank) 标量–0D张量 impor…

标记数据集生成模型助力无数据情况下的大模型指令微调

在构建大模型应用时,通常有两种方式来改进效果,一种是构建外部知识库,利用RAG来完成。但RAG并不是万能的,对于特定领域的LLM应用,以及无需示例,就能完成特定任务等场合就需要进行微调。然而,微调…

nvm安装指定版本显示不存在及nvm ls-remote 列表只出现 iojs 而没有 node.js 解决办法

在使用 nvm install 18.20.3 安装 node 时会发现一直显示不存在此版本 Version 18.20.3 not found - try nvm ls-remote to browse available versions.使用 nvm ls-remote 查看可安装列表时发现,列表中只有 iojs 解决方法: 可以使用以下命令查看可安装…

5.ABAP结构体和内表

总学习目录请点击下面连接 SAP ABAP开发从0到入职,冷冬备战-CSDN博客 目录 5.1.结构化数据对象 定义 如何引用结构化的数据对象 拷贝 实战练习 创建 拷贝 调试代码 5.2.内表 行类型 键 表种类 存取类型 表类型 如何在本地定义表类型 内表三种可能的…

C#搭建WebApi服务

1,OWIN的介绍 OWIN 的全称是 “Open Web Interface for .NET”, OWIN 在 .NET Web 服务器和 .NET Web 应用之间定义了一套标准的接口, 其目的是为了实现服务器与应用之间的解耦,使得便携式 .NET Web 应用以及跨平台的愿望成为现实…

unity 2D像素种田游戏学习记录(自用)

一、透明度排序轴 改变sprite的排序方式,默认按照z轴进行排序(离摄像机的远近)。可以将其改变成y轴的排序方式,这样可以使2D人物走在草丛的下方就不被遮挡,走在草丛上方就被遮挡,如下图。 在项目设置-图形…

K8S服务突然中断无法访问:报The node had condition: [DiskPressure]异常

一、背景 程序在运行过程中,突然无法访问,发现后台接口也无法访问;查看kuboard,发现报如下异常:The node had condition: [DiskPressure]. 继续查看磁盘使用率,发现系统盘使用率已经高达93%。问题前后呼应…

VLDB 2024 | 时空数据(Spatial-temporal)论文总结

VLDB 2024于2024年8月26号-8月30号在中国广州举行。 本文总结了VLDB 2024有关时空数据(time series data)的相关论文,主要包含如有疏漏,欢迎大家补充。 🌟【紧跟前沿】“时空探索之旅”与你一起探索时空奥秘&#xf…

GTC2024 回顾 | 优阅达携手 HubSpot 亮相上海,赋能企业数字营销与全球业务增长

从初创企业入门到成长型企业拓展,再到 AI 驱动智能化运营,HubSpot 为企业的每步成长提供了全方位支持。 2024 年 11 月下旬,备受瞩目的 GTC2024 全球流量大会(上海)成功举办。本次大会汇聚了全国内多家跨境出海领域企业…

如何使用go语言的gin库来搭建一个属于自己的网页版GPT

我们将会使用go语言的gin库来搭建一个属于自己的网页版GPT 一、准备工作 我们需要使用到ollama,如何下载和使用[ollama](Ollama完整教程:本地LLM管理、WebUI对话、Python/Java客户端API应用 - 老牛啊 - 博客园)请看这个文档 有过gin环境的直接运行就可…

用户登录流程详解

目录 前言1. 登录请求的发起1.1 表单设计与数据收集1.2 请求发送与状态反馈 2. 验证码校验2.1 验证码的生成与展示2.2 验证码的校验机制 3. 登录前置校验3.1 检查账户状态3.2 登录频率限制 4. SS认证管理器的用户校验4.1 密码校验机制4.2 用户角色与权限检查 5. 登录成功后的处…

虚拟机与Xshell5和Xftp4连接与虚拟机克隆

虚拟机与Xshell5和Xftp4连接与虚拟机克隆 虚拟机与Xshell5和Xftp4连接 虚拟机与Xshell5连接 下载Xshell5后启动出现如下界面,点击新建 新建会话输入虚拟机命名,如master,主机输入虚拟机IP,xxx.xxx.xxx.xxx然后确认,…

【大模型系列篇】LLaMA-Factory大模型微调实践 - 从零开始

前一次我们使用了NVIDIA TensorRT-LLM 大模型推理框架对智谱chatglm3-6b模型格式进行了转换和量化压缩,并成功部署了推理服务,有兴趣的同学可以翻阅《NVIDIA TensorRT-LLM 大模型推理框架实践》,今天我们来实践如何通过LLaMA-Factory对大模型…

最大值和最小值的差

最大值和最小值的差 C语言代码C 语言代码Java语言代码Python语言代码 💐The Begin💐点点关注,收藏不迷路💐 输出一个整数序列中最大的数和最小的数的差。 输入 第一行为M,表示整数个数,整数个数不会大于1…

【SH】微信小程序调用EasyDL零门槛AI开发平台的图像分类研发笔记

文章目录 微信小程序字符串字符串模板字符串拼接 上传图片GET请求测试编写测试代码域名不合法问题 GET和POST请求测试 微信小程序字符串 字符串模板 这是ES6引入的特性,允许你通过反引号()创建模板字符串,并在其中嵌入变量或表达…

Certimate自动化SSL证书部署至IIS服务器

前言:笔者上一篇内容已经部署好了Certimate开源系统,于是开始搭建部署至Linux和Windows服务器,Linux服务器十分的顺利,申请证书-部署证书很快的完成了,但是部署至Windows Server的IIS服务时,遇到一些阻碍&a…

【C++算法】38.模拟_替换所有的问号

文章目录 题目链接:题目描述:解法C 算法代码: 题目链接: 1576. 替换所有的问号 题目描述: 解法 模拟算法就是依葫芦画瓢 特点是思路简单,主要考察代码能力 模拟算法流程(一定要在草稿纸上过一遍…

三菱FX3uPLC输入接线注意事项

FX3u微型控制器(DC输入型)的输入根据外部接线,漏型输入和源型输入都可使用。 但是,一定要连接S/S端子的接线。 详细事宜请参考“FX3U系列微型控制器硬件说明手册 AC电源型的输入接线事例(FX3U-囗MR/UA1除外) DC电源型的输入接线事例 *请不要与(0V)、(24V)端子接线…

Milvus向量数据库03-搜索理论

Milvus向量数据库03-搜索理论 1-ANN搜索 通过 k-最近邻(kNN)搜索可以找到一个查询向量的 k 个最近向量。kNN 算法将查询向量与向量空间中的每个向量进行比较,直到出现 k 个完全匹配的结果。尽管 kNN 搜索可以确保准确性,但十分耗…