OpenHarmony测试代码编译执行流程

Posted 嵌入式up笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenHarmony测试代码编译执行流程相关的知识,希望对你有一定的参考价值。

文章目录

【OpenHarmony】测试代码编译执行流程

之前的文章我们搭建了小熊派的开发环境,并且拉取了源码到本地编译后烧写到了小熊派中,这一章将在上一章的基础上,编写一个用户态的执行程序,按照 OpenHarmony 的编译框架编译程序,然后在串口命令行执行程序

一、编译目录结构

首先先看一下要修改添加的文件架构

./applications/BearPi/BearPi-HM_Micro/samples
├── helloworld
    ├── BUILD.gn
    ├── include
    │   └── helloworld.h
    └── src
        └── helloworld.c
./build
├── lite
    ├── components
        └──applications.json
./vendor
└── bearpi
    └── bearpi_hm_micro
        └── config.json

一个用户态的业务代码设计到的文件框架基本如上面所示,下面进入代码编写

二、编写测试代码

首先编译业务测试代码,业务代码目录如下:

./applications/BearPi/BearPi-HM_Micro/samples
├── helloworld
    ├── BUILD.gn
    ├── include
    │   └── helloworld.h
    └── src
        └── helloworld.c

include 用于存放头文件,src 则存放源文件,BUILD.gn 则是编译组织文件,用于编译当前目录下面的工程文件

首先编写 .h 文件,声明一个函数 HelloPrint,同时声明编译器使用 c 编译

#ifndef HELLOWORLD_H
#define HELLOWORLD_H

#ifdef __cplusplus
#if __cplusplus
    extern "C" 
#endif
#endif

void HelloPrint();

#ifdef __cplusplus
#if __cplusplus

#endif
#endif
#endif

再编写 .c 源文件,编写函数内容,显示 helloworld

#include <stdio.h>
#include "helloworld.h"

int main(int argc, char **argv)

    HelloPrint();
    return 0;


void HelloPrint()

    printf("\\n************************************************\\n");
    printf("\\n\\t\\tHello World!\\n");
    printf("\\n************************************************\\n");
    printf("OpenHarmony Code Test! JeckXu - Top嵌入式");

三、编写构建脚本

然后编写编译脚本文件 BUILD.gn

先导入编译组件,源码hello_world.c 编译成 hello_world_lib 模块文件:

# 导入编译组件
import("//build/lite/config/component/lite_component.gni")

然后编写可执行模块的详细信息,

# 可执行模块
executable("hello_world_lib")  
  output_name = "helloworld"
  sources = [ "src/helloworld.c" ]
  include_dirs = ["include"]
  defines = []
  cflags_c = []
  ldflags = []


最后由模块编译生成的 lib 模块生成 my_app 组件:

lite_component("my_app") 
    features = [
       ":hello_world_lib",
    ]

四、添加组件

编译脚本将编译生成的文件和组件关联,下面我们进入到

./build
├── lite
    ├── components
        └──applications.json

进一步修改组件信息,在如下位置插入新的组件信息:

新组件信息如下:

    
        "component": "helloworld_app",
        "description": "helloworld samples",
        "optional": "true",
        "dirs": [
        "applications/BearPi/BearPi-HM_Micro/samples/helloworld"
        ],
        "targets": [
        "//applications/BearPi/BearPi-HM_Micro/samples/helloworld:my_app"
        ],
        "rom": "",
        "ram": "",
        "output": [],
        "adapted_kernel": [ "liteos_a" ],
        "features": [],
        "deps": 
        "components": [],
        "third_party": [ ]
        
    ,

不同组件主要就是依赖和名称不同

五、修改开发板配置文件

最后就是修改开发板的配置文件,添加对应的hello部件:

./vendor
└── bearpi
    └── bearpi_hm_micro
        └── config.json

在应用子系统下添加组件

组件代码如下:

  "component": "helloworld_app", "features":[] ,

添加完如下:


    "subsystem": "applications",
    "components": [
         "component": "helloworld_app", "features":[] ,
         "component": "bearpi_sample_app", "features":[] ,
         "component": "bearpi_screensaver_app", "features":[] ,
         "component": "bearpi_sample_communication", "features":[] 
    ]

六、运行结果

到此一个应用程序组件添加完成,下面就是编译烧录,可以参考我之前的文章

【OpenHarmony】开发环境搭建

【OpenHarmony】文件下载到小熊派

编译指令

hb build -t notest --tee -f

这里我在腾讯云服务器上编译的,编译完成如下

拷贝结果文件,然后下载程序,下载后启动系统,在串口命令行执行业务代码:

./bin/hello_world

执行结果如下,执行成功

总结一下用户代码的编译流程,编写 BUILD.gn 编译代码生成执行文件,然后根据执行文件生成对应模块,编写组件关联调用模块

以上是关于OpenHarmony测试代码编译执行流程的主要内容,如果未能解决你的问题,请参考以下文章

OpenHarmony-标准设备系统代码操作梳理

[openharmony]标准系统编译过程分析

#星光计划2.0#Openharmony 单元测试1: 测试用例指导大全

OpenHarmony 小型系统兼容性测试指南

#夏日挑战赛# OpenHarmony HiSysEvent打点调用实践(L2)

#盲盒+码##跟着小白一起学鸿蒙#如何编译OpenHarmony自带APP