小熊派-鸿蒙-季 BearPi-HM Nano 3 + 在vscode下进行编写源码过程分析
<p>上次按照教程,一步一步的开始hello_world的例程的开发。由于涉及的步骤较多,一时也没太弄明的是怎么就成功的。这次先停一下,对hello_world的开发过程进行分析梳理。</p><p>由于上次使用的是vim操作,在这种多文件构成的工程目录下,还是很不直观,为此,在ubuntu操作系统下下载了vscode,并配置了C和GN文件的高亮插件,这样效率高起来的。需要注意的是vscode只是用来修改与查看代码使用的,真正来编译还是在终端下通过hb命令来完成。</p>
<p>这里插一个小经验,在使用hb build 命令时,必须在/home/bearpi/proj/bearpi-hm_micro_small目录下,否则在其它目录下会重新下载。之所以在这个目录下,也可能是第一次使用hb build命令时在这个目录下下载过,而其它目录下不支持。也可能是hb是在这个目录的根目录下,目前没仔细调查。</p>
<p>在vscode下可以直观地看到目录结构。这里需要编辑的文件主要集中在applications、build、vendor下。</p>
<p>1、applications文件夹下</p>
<p>主要用于存放源代码 。按习惯一般每个应用程序都在建有一个文件夹,里边至少存放一个c文件和一个gn文件,c为业务代码,BUILD.gn为编译脚本</p>
<p>hello_world.c比较简单,就是printf信息。这里主要看看BUILD.gn</p>
<pre>
<code>###首先导入 gni 组件,将源码hello_world.c编译成hello_world_lib库文件###
import("//build/lite/config/component/lite_component.gni")
executable("hello_world_lib") {
output_name = "hello_world"###输出的可执行文件名称由output_name定义为hello_world###
sources = [ "hello_world.c" ]###源文件为hello_world.c###
include_dirs = []
defines = []
cflags_c = []
ldflags = []
}
###将hello_world_lib打包成 lite_component,命名为my_app组件###
lite_component("my_app") {
features = [
":hello_world_lib",
]
}</code></pre>
<p>这里的my_app要注意下面有对应的地方。</p>
<p>2、build文件夹下</p>
<p>接下来处理两个json,其中一个是build/lite/components/applications.json,主要是在"components": []中添加一个{},主要对新建的组件名称、目录、目标文件进行声明。</p>
<p>3、vendor文件夹下</p>
<p>另一个json文件是vendor/bearpi/bearpi_hm_micro/config.json,主要是在"subsystem": "applications",下添加单板配置文件,内容比较简单,</p>
<pre>
<code>{
"subsystem": "applications",
"components": [
{ "component": "bearpi_sample_app", "features":[] },
{ "component": "my_sample", "features":[] },
{ "component": "bearpi_screensaver_app", "features":[] }
]
},</code></pre>
<p>最后,就可以在终端编译后,通过stm32Programer下载到开发板上,在Moba里输入指令“./bin/hello_world”执行写入的demo程序</p>
<p>总结一下,主要过程(参考gitee教程)</p>
<ol>
<li>在config.json中添加"my_sample"组件,"my_sample"组件在applications.json中被定义。</li>
<li>在my_sample的targets里面添加"my_app"的lite_component名称</li>
<li>"my_app"字段链接到my_first_app文件下BUILD.gn里面的lite_component。</li>
<li>lite_component里指定lib库为"hello_world_lib"。</li>
<li>通过hello_world_lib里面sources来指定要编译的.c文件,并通过output_name来指定生成的可执行程序名称</li>
</ol>
<p>同时注意几个json文件与gn文件内的关系图。可参考如下关联走向图。</p>
<p>只要这个关联关系的名称对应的上,基本都能编译通过。</p>
<p>磨刀不误砍柴工,今天就先到这吧。</p>
Json的添加,一直是个麻烦活,感觉郁闷的一件事。 lugl4313820 发表于 2022-4-10 08:18
Json的添加,一直是个麻烦活,感觉郁闷的一件事。
<p>是的,嵌入式这边老想往互联网上靠,编译环境你一个我一个,json,xml,yml的配置,这完全是没必要的事情。现在搞个单片机还要把互联网配置那一套学一遍。。。</p>
freebsder 发表于 2022-4-11 16:57
是的,嵌入式这边老想往互联网上靠,编译环境你一个我一个,json,xml,yml的配置,这完全是没必要的事情 ...
<p>以后还请你多多指教,我弄Python整到后面还是用pcycharm弄。</p>
lugl4313820 发表于 2022-4-11 17:52
以后还请你多多指教,我弄Python整到后面还是用pcycharm弄。
<p>pcycharm 挺好的呀,IDE没什么不好,不要听别人说什么高手都用记事本。</p>
<p>在ubuntu下打开vscode,可直接输入code</p>
页:
[1]