本帖最后由 sun63312 于 2021-6-9 23:42 编辑
HarmonyOS例程学习记录
上次教程已经通过两种方法获得了源码和两种方式进行编译。而在继续跟着小熊提供的教程熟悉HarmonyOS期间华为也在6月2日正式发布了HarmonyOS2.0。那么下面就是简单记录学习过程中我觉得比较重点的点和一些问题:
1、例程存放的相对路径:
applications\BearPi\BearPi-HM_Nano\sample
2、HarmonyOS编译工具是基于Ninja的,小熊介绍说Ninja相比于以前用的Makefile更加注重编译的速度。那在我使用中确实编译的是挺快的基本10s就编译完成了。
3、编译不同例程或添加新例程,我们需要去操两个.gn文件
一个是业务编译构建gn文件,在对于的例程文件夹下:
另一个是模块编译构建gn文件,就在sample文件夹下
•A2_kernel_timer是相对路径,指向业务gn文件:
applications\BearPi\BearPi-HM_Nano\sample\A2_kernel_timer\BUILD.gn
•timer_example是目标,指向applications\BearPi\BearPi-HM_Nano\sample\A2_kernel_timer\BUILD.gn中的
static_library("timer_example")
4、另外描述编译模块路径Json文件(整个源码中有很多Json文件,小熊重点解释了这个)
文件相对路径:build\lite\product\BearPi-HM_Nano.json
后续我们自己添加文件夹或者修改,都在在这个json下进行修改(我还没试过)
以applications为例,里面的sample:app指的就是模块编译构建gn文件中的
5、而例程的.c文件中通过APP_FEATURE_INIT()这个注入接口来实现例程的函数初始化
6、上面是介绍的是如何简单的运行例程,那么代码最重要开始入口main()函数是:
vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main.c下的app_main()
7、在app_main()的最后我们会调用HOS_SystemInit()这是系统初始化入口
相对路径:base\startup\services\bootstrap_lite\source\system_init.c
8、其中SYS_INIT(service);就用来初始化我们例程的将我们写的APP_FEATURE_INIT()里面的函数添加。不过这个初始化的代码有点绕,我还没理解透,而且还有两个问题:
①教程说调用的是下图中的SYS_INIT(),为啥会用到__ICCARM__这个编译器预定宏?
②教程里突然说道用的是SYS_CALL(name,2),也是没有理解为啥用的是2不是其他,5个SYS_CALL有什么区别?
小结:
开始初步了解HarmonyOS,很多地方都还不是很懂,后面学懂多少就继续更新。