• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 编写“Hello World”程序
2
3
4下方将通过修改源码的方式展示如何编写简单程序,输出“Hello world”。请在下载的源码目录中进行下述操作。
5
6
7## 前提条件
8
9已参考[创建工程并获取源码](quickstart-ide-import-project.md),创建Hi3861开发板的源码工程。
10
11
12## 操作步骤
13
141. 确定目录结构。
15
16   开发者编写业务代码时,务必先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
17
18   例如:在app下新增业务my_first_app,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:
19
20
21   ```
22   .
23   └── applications
24       └── sample
25           └── wifi-iot
26               └── app
27                   └── my_first_app
28                     │── hello_world.c
29                     └── BUILD.gn
30   ```
31
322. 编写业务代码。
33
34   新建./applications/sample/wifi-iot/app/my_first_app下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用OpenHarmony启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)
35
36   ```
37   #include <stdio.h>
38   #include "ohos_init.h"
39   #include "ohos_types.h"
40
41   void HelloWorld(void)
42   {
43       printf("[DEMO] Hello world.\n");
44   }
45   SYS_RUN(HelloWorld);
46   ```
47
483. 编写用于将业务构建成静态库的BUILD.gn文件。
49
50   新建./applications/sample/wifi-iot/app/my_first_app下的BUILD.gn文件,并完成如下配置。
51
52   如步骤1所述,BUILD.gn文件由三部分内容(目标、源文件、头文件路径)构成,需由开发者完成填写。
53
54
55   ```
56   static_library("myapp") {
57       sources = [
58           "hello_world.c"
59       ]
60       include_dirs = [
61           "//utils/native/lite/include"
62       ]
63   }
64   ```
65
66   - static_library中指定业务模块的编译结果,为静态库文件libmyapp.a,开发者根据实际情况完成填写。
67   - sources中指定静态库.a所依赖的.c文件及其路径,若路径中包含"//"则表示绝对路径(此处为代码根路径),若不包含"//"则表示相对路径。
68   - include_dirs中指定source所需要依赖的.h文件路径。
69
704. 添加新组件。
71
72   修改文件build/lite/components/applications.json,添加组件hello_world_app的配置,如下所示为applications.json文件片段,"\#\#start\#\#"和"\#\#end\#\#"之间为新增配置("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
73
74   > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
75   > 本章节操作是以OpenHarmony-v3.1-Release版本为例进行操作的,该版本中,组件配置文件为build/lite/components/applications.json;若源码版本大于等于OpenHarmony 3.2 Beta2时,组件配置文件为build/lite/components/communication.json76
77
78   ```
79   {
80     "components": [
81       {
82         "component": "camera_sample_communication",
83         "description": "Communication related samples.",
84         "optional": "true",
85         "dirs": [
86           "applications/sample/camera/communication"
87         ],
88         "targets": [
89           "//applications/sample/camera/communication:sample"
90         ],
91         "rom": "",
92         "ram": "",
93         "output": [],
94         "adapted_kernel": [ "liteos_a" ],
95         "features": [],
96         "deps": {
97           "components": [],
98           "third_party": []
99         }
100       },
101   ##start##
102       {
103         "component": "hello_world_app",
104         "description": "hello world samples.",
105         "optional": "true",
106         "dirs": [
107           "applications/sample/wifi-iot/app/my_first_app"
108         ],
109         "targets": [
110           "//applications/sample/wifi-iot/app/my_first_app:myapp"
111         ],
112         "rom": "",
113         "ram": "",
114         "output": [],
115         "adapted_kernel": [ "liteos_m" ],
116         "features": [],
117         "deps": {
118           "components": [],
119           "third_party": []
120         }
121       },
122   ##end##
123       {
124         "component": "camera_sample_app",
125         "description": "Camera related samples.",
126         "optional": "true",
127         "dirs": [
128           "applications/sample/camera/launcher",
129           "applications/sample/camera/cameraApp",
130           "applications/sample/camera/setting",
131           "applications/sample/camera/gallery",
132           "applications/sample/camera/media"
133         ],
134   ```
135
1365. 修改单板配置文件。
137
138   修改文件vendor/hisilicon/hispark_pegasus/config.json,新增hello_world_app组件的条目,如下所示代码片段为applications子系统配置,"\#\#start\#\#"和"\#\#end\#\#"之间为新增条目("\#\#start\#\#"和"\#\#end\#\#"仅用来标识位置,添加完配置后删除这两行):
139
140
141   ```
142         {
143           "subsystem": "applications",
144           "components": [
145   ##start##
146             { "component": "hello_world_app", "features":[] },
147   ##end##
148             { "component": "wifi_iot_sample_app", "features":[] }
149           ]
150         },
151   ```
152