Hi3681 ----- HarmonyOS的程序框架 和 启动流程

Hi3681 ----- HarmonyOS的程序框架 和 启动流程

HarmonyOS的程序框架

在这里插入图片描述

HarmonyOS的启动流程

由于 hi3681 的 liteos-m 被芯片 rom 化了,固化在芯片内部了。所以我们主 要看内核启动后的第一个入口函数。 代码路径: vendor\hisi\hi3861\hi3861\app\wifiiot_app\src\app_main.c

hi_void app_main(hi_void) { 
#ifdef CONFIG_FACTORY_TEST_MODE        
	printf("factory test mode!\r\n"); 
#endif 

   const hi_char* sdk_ver = hi_get_sdk_version();    
    printf("sdk ver:%s\r\n", sdk_ver);     
    hi_flash_partition_table *ptable = HI_NULL; 

   peripheral_init(); 

…..中间省略代码 

HOS_SystemInit(); 
} 

app_main一开始打印了 SDK版本号,最后一行会调用HOS_SystemInit(); 函 数进行鸿蒙系统的初始化。我们进去看下初始化做了哪些动作。 路径:base/startup/services/bootstrap_lite/source/system_init.c

void HOS_SystemInit(void) 
{     
MODULE_INIT(bsp);    
 MODULE_INIT(device);     
 MODULE_INIT(core);
 SYS_INIT(service);     
 SYS_INIT(feature);     
 MODULE_INIT(run);     
 SAMGR_Bootstrap(); 
 } 

我们可以看到主要是初始化了 一些相关模块、系统,包括有 bsp、device(设 备)。其中最终的是 MODULE_INIT(run); 它负责调用了,所有 run 段的代码,那么 run 段的代码是哪些呢? 事实上就是我们前面 application 中使用 SYS_RUN() 宏设置的函数名。 还记得我们前面写的 hello world 应用程序吗? #include “ohos_init.h” #include “ohos_types.h” void HelloWorld(void) { printf("[DEMO] Hello world.\n"); } SYS_RUN(HelloWorld);

也就是说所有用 SYS_RUN() 宏设置的函数都会在使用 MODULE_INIT(run); 的时候被调用。 为了验证这一点,我们可以加一些打印信息,如下: 在这里插入图片描述
我们重新编译后烧录。打开串口查看打印信息,如下:

在这里插入图片描述
可以看到在 35 行之后,就打印 hello world 的信息。符合预期
在这里插入图片描述

HarmonyOS的第一个程序

编写一个 hello world 程序比较简单,可以参考官网:
链接: 教你写第一个helloworld程序

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值