当前位置:   article > 正文

Harmony编译与执行_app_feature_init 无效

app_feature_init 无效

编译

在build\lite\product下的文件BearPi-HM_Nano.json 描述了编译模块路径

其中,dir给定路径,通过该路径,可以找到对应的"app"

 

 接着,在又在"app"里,BUILD.gn中又指向了my_led下的BUILD.gn文件

 my_led下的BUILD.gn文件中,有给定的.c文件,这些文件会被编译成.a文件

通过这样的方式 将各种.c文件(头文件等)编译成.a文件 再连接起来 最后生成.bin文件

 

接着把.bin文件烧录到开发板就可以运行了! 

执行

从哪里开始执行?

vendor\hisi\hi3861\hi3861\app\wifiiot_app\src文件下的app_main.c文件

其中有一个入口函数:

可以看到有一个打印函数 打开MobaXterm验证下是否有这个打印结果

 

这个入口函数最后回执行HOS_SystemInit()函数

 

点进去查看这个函数

 

观察SYS_INIT函数

 

发现该函数调用了SYS_CALL

 

SYS_CALL函数调用了两个函数SYS_BEGIN和SYS_END

 

发现SYS_BEGIN是被定义成SYS_NAME 其中#name、#step是两个参数 分别sys.servise和2

 

于是SYS_NAME被定义成了”.zinitcall.sys.servise2.init”

 也就是说 上面指针指向了 ”.zinitcall.sys.servise2.init”代码段的地址

接着分析”.zinitcall.sys.servise2.init”是什么

打开base\startup\services\bootstrap_lite\source\bootstrap_service.c

有一个函数SYS_SERVICE_INIT 点开查看

 

看不懂 但作用是把Init()函数放到”.zinitcall.sys.servise2.init”里 也就是 刚刚的指针是指向函数Init()的

 

Init()函数被执行,其中调用了函数MessageHandle,查看该函数

 看到INIT_APP_CALL()函数 这个形式见过 点开查看

果然形式差不多 刚刚是SYS_CALL

 

按照刚刚的分析 这个指针指向的是代码段”zinitcall.app.feature2.init”的地址

而”zinitcall.app.feature2.init”地址所指向的函数就是写业务代码时 在最后加上的APP_FEATURE_INIT()函数

 

 也就是说 最后会让指针指向要执行的Hello_World()函数

业务代码成功执行!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/288626
推荐阅读
相关标签
  

闽ICP备14008679号