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.json。 76 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