sun63312 发表于 2021-6-9 23:38

【BearPi-HM Nano,玩转鸿蒙“碰一碰”】-3-HarmonyOS编译架构学习记录

<div class='showpostmsg'> 本帖最后由 sun63312 于 2021-6-9 23:42 编辑

<p style="text-align: center; margin-top: 0; margin-bottom: 0;"><span style="font-family: '宋体'; font-size: 22pt;">HarmonyOS</span><span style="font-family: '宋体'; font-size: 22pt;">例程学习记录</span></p>

<p><span style="font-family:宋体;">&nbsp; <span style="font-size:16px;">上次教程已经通过两种方法获得了源码和两种方式进行编译。而在继续跟着小熊提供的教程熟悉HarmonyOS期间华为也在6月2日正式发布了HarmonyOS2.0。那么下面就是简单记录学习过程中我觉得比较重点的点和一些问题:</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">1、例程存放的相对路径:</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; applications\BearPi\BearPi-HM_Nano\sample</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">2、HarmonyOS编译工具是基于Ninja的,小熊介绍说Ninja相比于以前用的Makefile更加注重编译的速度。那在我使用中确实编译的是挺快的基本10s就编译完成了。</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">3、编译不同例程或添加新例程,我们需要去操两个.gn文件</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; 一个是业务编译构建gn文件,在对于的例程文件夹下:</span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; 另一个是模块编译构建gn文件,就在sample文件夹下</span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; &bull;A2_kernel_timer是相对路径,指向业务gn文件:</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; &nbsp; applications\BearPi\BearPi-HM_Nano\sample\A2_kernel_timer\BUILD.gn</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; &bull;timer_example是目标,指向applications\BearPi\BearPi-HM_Nano\sample\A2_kernel_timer\BUILD.gn中的</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; &nbsp; static_library(&quot;timer_example&quot;)</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">4、另外描述编译模块路径Json文件(整个源码中有很多Json文件,小熊重点解释了这个)</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; 文件相对路径:build\lite\product\BearPi-HM_Nano.json</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; 后续我们自己添加文件夹或者修改,都在在这个json下进行修改(我还没试过)</span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; 以applications为例,里面的sample:app指的就是模块编译构建gn文件中的</span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">5、而例程的.c文件中通过APP_FEATURE_INIT()这个注入接口来实现例程的函数初始化</span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">6、上面是介绍的是如何简单的运行例程,那么代码最重要开始入口main()函数是:</span></span></p>

<p style="text-align: left; margin-top: 0; margin-bottom: 0;"><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main.c下的app_main()</span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">7、在app_main()的最后我们会调用HOS_SystemInit()这是系统初始化入口</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; 相对路径:base\startup\services\bootstrap_lite\source\system_init.c</span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">8、其中SYS_INIT(service);就用来初始化我们例程的将我们写的APP_FEATURE_INIT()里面的函数添加。不过这个初始化的代码有点绕,我还没理解透,而且还有两个问题:</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; ①教程说调用的是下图中的SYS_INIT(),为啥会用到__ICCARM__这个编译器预定宏?</span></span></p>

<p class="imagemiddle" style="text-align: center;"><span style="font-size:16px;"><span style="font-family:宋体;"></span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; ②教程里突然说道用的是SYS_CALL(name,2),也是没有理解为啥用的是2不是其他,5个SYS_CALL有什么区别?</span></span></p>

<p>&nbsp;</p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">小结:</span></span></p>

<p><span style="font-size:16px;"><span style="font-family:宋体;">&nbsp; 开始初步了解HarmonyOS,很多地方都还不是很懂,后面学懂多少就继续更新。</span></span></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

数码小叶 发表于 2021-6-10 20:56

<p>终于看到了鸿蒙操作这块板子的代码结构<img height="28" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smiling-face-with-open-mouth_1f603.png" width="28" /></p>

freebsder 发表于 2021-6-11 17:52

<p>牛,收藏了过粽子节看看。</p>
页: [1]
查看完整版本: 【BearPi-HM Nano,玩转鸿蒙“碰一碰”】-3-HarmonyOS编译架构学习记录