Harmony编译与执行

编译

在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()函数

业务代码成功执行!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值