美文网首页
AliOS Things Mqtt 启动分析 -- 2

AliOS Things Mqtt 启动分析 -- 2

作者: 三万分之一 | 来源:发表于2020-02-12 17:56 被阅读0次

    以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

          本文链接:https://www.haomeiwen.com/subject/xemcfhtx.html