AliOS Things Mqtt 启动分析 -- 2

以stm32f4xx板子为例,在board\stm32f429zi-nucleo\startup_stm32f429xx.s 中定义的Reset_Handler 指向main函数,main函数入口在:


AliOS-Things_stm32f429zi-nucleo_2858\AliOS-Things\platform\mcu\stm32f4xx_cube\aos\aos.c中,其中的代码如下:

static void sys_init(void)

{

    stm32_peripheral_init();

#ifdef BOOTLOADER

    main();

#else

    hw_start_hal();

    board_init();

    var_init();

    aos_components_init(&kinit);

#ifndef AOS_BINS

    application_start(kinit.argc, kinit.argv);  /* jump to app/example entry */

#endif

#endif

}


static void sys_start(void)

{

    aos_heap_set();

    stm32_soc_init();

    aos_init();

    krhino_task_create(&demo_task_obj, "aos-init", 0,AOS_DEFAULT_APP_PRI, 0, demo_task_buf, AOS_START_STACK, (task_entry_t)sys_init, 1);


    aos_start();

}


int main(void)

{

    sys_start();

    return 0;

}

调用关系为:main-》sys_start-》sys_init

其中,sys_start函数做了如下工作:

[if !supportLists]1)[endif]aos_heap_set();  //设置堆大小

[if !supportLists]2)[endif]stm32_soc_init(); //硬件初始化,比如欲取指、I-cache、D-cache,中断组优先级,设置系统时间滴答为1ms,低层级硬件设置等

[if !supportLists]3)[endif]SystemClock_Config(); //Initializes the CPU, AHB and APB busses clocks

[if !supportLists]4)[endif]aos_init(); //操作系统初始化,没有细看,主要是创建系统队列,列表,和信号量等系统所需资源并启动idle任务,并对任务堆栈进行初始化

[if !supportLists]5)[endif]sys_init(); //创建初始化任务,后续讲解

[if !supportLists]6)[endif]aos_start(); //系统运行,调度任务开始


我们来看下sys_init任务做了什么:

[if !supportLists]1) [endif]stm32_peripheral_init(); //外围总线初始化,iic/uart等

[if !supportLists]2) [endif]hw_start_hal(); //硬件初始化,根据所选组件而不同,我的组件中是初始化wifi模组

[if !supportLists]3) [endif]board_init(); //板子初始化,主要是存储区的读写属性等

[if !supportLists]4) [endif]var_init(); //变量初始化,主要是设置真正的main函数的参数

[if !supportLists]5) [endif]aos_components_init(&kinit); //组件初始化,根据编译时候所选组件而不同

[if !supportLists]6) [endif]application_start(kinit.argc, kinit.argv); //跳转到实例代码运行


在这个函数中比较重要的就是这句:

aos_register_event_filter(EV_WIFI, wifi_service_event, NULL);

将wifi的事件注册到回调函数wifi_service_event中,这个回调会在第一次调用的时候,创建一个新的任务:

if (!linkkit_started) {

        aos_task_new("iotx_example", (task_fun)linkkit_main, (void *)&entry_paras, 1024 * 6);

        linkkit_started = 1;

    }

这里创建了linkkit_main任务,,这个任务在app\example\mqttapp\mqtt_example.c文件中,主要是创建了一个mqtt client信息,并发送给server,不详细介绍了。

你可能感兴趣的:(AliOS Things Mqtt 启动分析 -- 2)